diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000000..e69de29bb2d diff --git a/404.html b/404.html new file mode 100644 index 00000000000..665afcbe774 --- /dev/null +++ b/404.html @@ -0,0 +1,116 @@ + + + + + + Ts.ED - A Node.js and TypeScript Framework on top of Express/Koa.js. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Support us

+ Ts.ED is an MIT-licensed open source project. It can grow thanks to the support by the + community. If + you'd like to join them, please read more here. +

+ Copyright © 2016-2023 MIT License | By + Lenzotti Romain +
+ + + diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..75630f31ce9 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +tsed.io \ No newline at end of file diff --git a/agenda.svg b/agenda.svg new file mode 100644 index 00000000000..66dc766c08c --- /dev/null +++ b/agenda.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ajv_logo.png b/ajv_logo.png new file mode 100644 index 00000000000..24f72d163f9 Binary files /dev/null and b/ajv_logo.png differ diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png new file mode 100644 index 00000000000..5b57f18df23 Binary files /dev/null and b/android-chrome-192x192.png differ diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png new file mode 100644 index 00000000000..b7c7a673e6a Binary files /dev/null and b/android-chrome-512x512.png differ diff --git a/api.json b/api.json new file mode 100644 index 00000000000..730f5f4b860 --- /dev/null +++ b/api.json @@ -0,0 +1,10179 @@ +{ + "version": "7.33.0", + "scope": "@tsed", + "symbolTypes": [ + { + "value": "decorator", + "label": "Decorator", + "code": "@" + }, + { + "value": "class", + "label": "Class", + "code": "C" + }, + { + "value": "enum", + "label": "Enum", + "code": "E" + }, + { + "value": "function", + "label": "Function", + "code": "F" + }, + { + "value": "interface", + "label": "Interface", + "code": "I" + }, + { + "value": "const", + "label": "Constant", + "code": "K" + }, + { + "value": "service", + "label": "Service", + "code": "S" + }, + { + "value": "type", + "label": "Type alias", + "code": "T" + } + ], + "symbolStatus": [ + { + "value": "stable", + "label": "Stable" + }, + { + "value": "deprecated", + "label": "Deprecated" + }, + { + "value": "experimental", + "label": "Experimental" + }, + { + "value": "private", + "label": "Private" + }, + { + "value": "public", + "label": "Public" + } + ], + "modules": { + "@tsed/core": { + "symbols": [ + { + "path": "/api/core/types/decorators/Configurable", + "symbolName": "Configurable", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/decorators/Deprecated", + "symbolName": "Deprecated", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/core/types/decorators/Enumerable", + "symbolName": "Enumerable", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/decorators/NotConfigurable", + "symbolName": "NotConfigurable", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/decorators/NotEnumerable", + "symbolName": "NotEnumerable", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/decorators/Readonly", + "symbolName": "Readonly", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/decorators/StoreFn", + "symbolName": "StoreFn", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/decorators/StoreMerge", + "symbolName": "StoreMerge", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/decorators/StoreSet", + "symbolName": "StoreSet", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/decorators/Writable", + "symbolName": "Writable", + "module": "@tsed/core", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/domain/AnyToPromiseResponseTypes", + "symbolName": "AnyToPromiseResponseTypes", + "module": "@tsed/core", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/domain/AnyPromiseResult", + "symbolName": "AnyPromiseResult", + "module": "@tsed/core", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/domain/AnyToPromise", + "symbolName": "AnyToPromise", + "module": "@tsed/core", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/domain/DecoratorTypes", + "symbolName": "DecoratorTypes", + "module": "@tsed/core", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/domain/Env", + "symbolName": "Env", + "module": "@tsed/core", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/domain/EnvTypes", + "symbolName": "EnvTypes", + "module": "@tsed/core", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "type", + "stable" + ] + }, + { + "path": "/api/core/types/domain/Hooks", + "symbolName": "Hooks", + "module": "@tsed/core", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/domain/Metadata", + "symbolName": "Metadata", + "module": "@tsed/core", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable", + "stable" + ] + }, + { + "path": "/api/core/types/domain/Store", + "symbolName": "Store", + "module": "@tsed/core", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/domain/Type", + "symbolName": "Type", + "module": "@tsed/core", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/errors/UnsupportedDecoratorType", + "symbolName": "UnsupportedDecoratorType", + "module": "@tsed/core", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/interfaces/AnyDecorator", + "symbolName": "AnyDecorator", + "module": "@tsed/core", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/core/types/interfaces/DecoratorParameters", + "symbolName": "DecoratorParameters", + "module": "@tsed/core", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/core/types/interfaces/DecoratorMethodParameters", + "symbolName": "DecoratorMethodParameters", + "module": "@tsed/core", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/core/types/interfaces/StaticMethodDecorator", + "symbolName": "StaticMethodDecorator", + "module": "@tsed/core", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/core/types/interfaces/MetadataTypes", + "symbolName": "MetadataTypes", + "module": "@tsed/core", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/core/types/interfaces/ValueOf", + "symbolName": "ValueOf", + "module": "@tsed/core", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + } + ], + "name": "@tsed/core" + }, + "@tsed/schema": { + "symbols": [ + { + "path": "/api/specs/schema/types/decorators/operations/Deprecated", + "symbolName": "Deprecated", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Schema", + "symbolName": "Schema", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "classDecorator", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Route", + "symbolName": "Route", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonClassStore", + "symbolName": "JsonClassStore", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/Discriminator", + "symbolName": "Discriminator", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonEntityStoreOptions", + "symbolName": "JsonEntityStoreOptions", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonEntityStore", + "symbolName": "JsonEntityStore", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonFormatTypes", + "symbolName": "JsonFormatTypes", + "module": "@tsed/schema", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonLazyRef", + "symbolName": "JsonLazyRef", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonMap", + "symbolName": "JsonMap", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonViewOptions", + "symbolName": "JsonViewOptions", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonRedirectOptions", + "symbolName": "JsonRedirectOptions", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonMethodStore", + "symbolName": "JsonMethodStore", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/EndpointMetadata", + "symbolName": "EndpointMetadata", + "module": "@tsed/schema", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "alias", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonMethodPath", + "symbolName": "JsonMethodPath", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonOperationOptions", + "symbolName": "JsonOperationOptions", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonOperation", + "symbolName": "JsonOperation", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonOperationPathsMap", + "symbolName": "JsonOperationPathsMap", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonOperationRoute", + "symbolName": "JsonOperationRoute", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonParameter", + "symbolName": "JsonParameter", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonParameterStoreOptions", + "symbolName": "JsonParameterStoreOptions", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/PipeMethods", + "symbolName": "PipeMethods", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonParameterStore", + "symbolName": "JsonParameterStore", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/ParamMetadata", + "symbolName": "ParamMetadata", + "module": "@tsed/schema", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "alias", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonParameterTypes", + "symbolName": "JsonParameterTypes", + "module": "@tsed/schema", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonPropertyStore", + "symbolName": "JsonPropertyStore", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/PropertyMetadata", + "symbolName": "PropertyMetadata", + "module": "@tsed/schema", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "alias", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonRequestBodyOptions", + "symbolName": "JsonRequestBodyOptions", + "module": "@tsed/schema", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonRequestBody", + "symbolName": "JsonRequestBody", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonResponseOptions", + "symbolName": "JsonResponseOptions", + "module": "@tsed/schema", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonMedia", + "symbolName": "JsonMedia", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonResponse", + "symbolName": "JsonResponse", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonSchemaObject", + "symbolName": "JsonSchemaObject", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/AnyJsonSchema", + "symbolName": "AnyJsonSchema", + "module": "@tsed/schema", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/JsonSchema", + "symbolName": "JsonSchema", + "module": "@tsed/schema", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/domain/SpecTypes", + "symbolName": "SpecTypes", + "module": "@tsed/schema", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/interfaces/IgnoreCallback", + "symbolName": "IgnoreCallback", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/interfaces/JsonHookContext", + "symbolName": "JsonHookContext", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/interfaces/JsonHeader", + "symbolName": "JsonHeader", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/interfaces/JsonHeaders", + "symbolName": "JsonHeaders", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/interfaces/JsonSchemaOptions", + "symbolName": "JsonSchemaOptions", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/class/Children", + "symbolName": "Children", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "classDecorator", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/class/DiscriminatorValue", + "symbolName": "DiscriminatorValue", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "classDecorator", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/CollectionContains", + "symbolName": "CollectionContains", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "collections", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/ArrayOfChainedDecorators", + "symbolName": "ArrayOfChainedDecorators", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/MapOfChainedDecorators", + "symbolName": "MapOfChainedDecorators", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/CollectionOfChainedDecorators", + "symbolName": "CollectionOfChainedDecorators", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/CollectionOf", + "symbolName": "CollectionOf", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "collections", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/ArrayOf", + "symbolName": "ArrayOf", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/MapOf", + "symbolName": "MapOf", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/MaxItems", + "symbolName": "MaxItems", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "collections", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/MaxProperties", + "symbolName": "MaxProperties", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "collections", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/MinItems", + "symbolName": "MinItems", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "collections", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/MinProperties", + "symbolName": "MinProperties", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "collections", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/collections/UniqueItems", + "symbolName": "UniqueItems", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "collections", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/AdditionalProperties", + "symbolName": "AdditionalProperties", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/AllOf", + "symbolName": "AllOf", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "classDecorator", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Allow", + "symbolName": "Allow", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Any", + "symbolName": "Any", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/AnyOf", + "symbolName": "AnyOf", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "classDecorator", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Const", + "symbolName": "Const", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/CustomKey", + "symbolName": "CustomKey", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "property", + "parameter", + "schema", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/CustomKeys", + "symbolName": "CustomKeys", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "property", + "parameter", + "schema", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Default", + "symbolName": "Default", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/DefaultMsg", + "symbolName": "DefaultMsg", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Description", + "symbolName": "Description", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "classDecorator", + "methodDecorator", + "propertyDecorator", + "parameterDecorator", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/DiscriminatorKey", + "symbolName": "DiscriminatorKey", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Enum", + "symbolName": "Enum", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/ErrorMsg", + "symbolName": "ErrorMsg", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "ajv", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Example", + "symbolName": "Example", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "input", + "methodDecorator", + "classDecorator", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Examples", + "symbolName": "Examples", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "input", + "methodDecorator", + "classDecorator", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/ExclusiveMaximum", + "symbolName": "ExclusiveMaximum", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/ExclusiveMinimum", + "symbolName": "ExclusiveMinimum", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Format", + "symbolName": "Format", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Email", + "symbolName": "Email", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "schema", + "swagger", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/DateTime", + "symbolName": "DateTime", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "property", + "parameter", + "schema", + "auto-map", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/DateFormat", + "symbolName": "DateFormat", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "property", + "parameter", + "schema", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/TimeFormat", + "symbolName": "TimeFormat", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "property", + "parameter", + "schema", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Uri", + "symbolName": "Uri", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "property", + "parameter", + "schema", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Url", + "symbolName": "Url", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "property", + "parameter", + "schema", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/ForwardGroups", + "symbolName": "ForwardGroups", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Groups", + "symbolName": "Groups", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Ignore", + "symbolName": "Ignore", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Integer", + "symbolName": "Integer", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/JsonEntityFn", + "symbolName": "JsonEntityFn", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "utils", + "model", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/MaxLength", + "symbolName": "MaxLength", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Maximum", + "symbolName": "Maximum", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Max", + "symbolName": "Max", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/MinLength", + "symbolName": "MinLength", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Minimum", + "symbolName": "Minimum", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Min", + "symbolName": "Min", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "alias", + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/MultipleOf", + "symbolName": "MultipleOf", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Name", + "symbolName": "Name", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "classDecorator", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Nullable", + "symbolName": "Nullable", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/OneOf", + "symbolName": "OneOf", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "classDecorator", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Optional", + "symbolName": "Optional", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Pattern", + "symbolName": "Pattern", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "ajv-errors", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Property", + "symbolName": "Property", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/ReadOnly", + "symbolName": "ReadOnly", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "property", + "parameter", + "schema", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/RecordOf", + "symbolName": "RecordOf", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "classDecorator", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Required", + "symbolName": "Required", + "module": "@tsed/schema", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/RequiredGroups", + "symbolName": "RequiredGroups", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/For", + "symbolName": "For", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "classDecorator", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/Title", + "symbolName": "Title", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "classDecorator", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/TypeError", + "symbolName": "TypeError", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "ajv", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/common/WriteOnly", + "symbolName": "WriteOnly", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "property", + "parameter", + "schema", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/generics/GenericOfChainedDecorators", + "symbolName": "GenericOfChainedDecorators", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/generics/GenericOf", + "symbolName": "GenericOf", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "generics", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/generics/Generics", + "symbolName": "Generics", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "generics", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/AcceptMime", + "symbolName": "AcceptMime", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "response", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Consumes", + "symbolName": "Consumes", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "classDecorator", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/ContentType", + "symbolName": "ContentType", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "response", + "headers", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Header", + "symbolName": "Header", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "response", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/InChainedDecorators", + "symbolName": "InChainedDecorators", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/In", + "symbolName": "In", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "input", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/InFile", + "symbolName": "InFile", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "input", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Location", + "symbolName": "Location", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/OperationId", + "symbolName": "OperationId", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/OperationPath", + "symbolName": "OperationPath", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Partial", + "symbolName": "Partial", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "validation", + "swagger", + "schema", + "input", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Path", + "symbolName": "Path", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "classDecorator", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Produces", + "symbolName": "Produces", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "methodDecorator", + "classDecorator", + "operation", + "response", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Redirect", + "symbolName": "Redirect", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/ReturnsChainedDecorators", + "symbolName": "ReturnsChainedDecorators", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Returns", + "symbolName": "Returns", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "response", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/RouteChainedDecorators", + "symbolName": "RouteChainedDecorators", + "module": "@tsed/schema", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/All", + "symbolName": "All", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "httpMethod", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Get", + "symbolName": "Get", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "httpMethod", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Post", + "symbolName": "Post", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "httpMethod", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Put", + "symbolName": "Put", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "httpMethod", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Delete", + "symbolName": "Delete", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "httpMethod", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Head", + "symbolName": "Head", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "httpMethod", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Patch", + "symbolName": "Patch", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "httpMethod", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Options", + "symbolName": "Options", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "httpMethod", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Security", + "symbolName": "Security", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "classDecorator", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Status", + "symbolName": "Status", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "response", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Summary", + "symbolName": "Summary", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/Tags", + "symbolName": "Tags", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "schema", + "classDecorator", + "operation", + "stable" + ] + }, + { + "path": "/api/specs/schema/types/decorators/operations/View", + "symbolName": "View", + "module": "@tsed/schema", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "response", + "stable" + ] + } + ], + "name": "@tsed/schema" + }, + "@tsed/engines": { + "symbols": [ + { + "path": "/api/engines/types/components/AtplEngine", + "symbolName": "AtplEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/BracketEngine", + "symbolName": "BracketEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/DotEngine", + "symbolName": "DotEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/DustEngine", + "symbolName": "DustEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/EctEngine", + "symbolName": "EctEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/EjsEngine", + "symbolName": "EjsEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/ViewEngineOptions", + "symbolName": "ViewEngineOptions", + "module": "@tsed/engines", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/EngineOptions", + "symbolName": "EngineOptions", + "module": "@tsed/engines", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/Engine", + "symbolName": "Engine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/HamlCoffeeEngine", + "symbolName": "HamlCoffeeEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/HamlEngine", + "symbolName": "HamlEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/HamletEngine", + "symbolName": "HamletEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/HandlebarsEngine", + "symbolName": "HandlebarsEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/HoganEngine", + "symbolName": "HoganEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/HtmlingEngine", + "symbolName": "HtmlingEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/JazzEngine", + "symbolName": "JazzEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/JqtplEngine", + "symbolName": "JqtplEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/JustEngine", + "symbolName": "JustEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/LiquorEngine", + "symbolName": "LiquorEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/LodashEngine", + "symbolName": "LodashEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/MarkoEngine", + "symbolName": "MarkoEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/MoteEngine", + "symbolName": "MoteEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/MustacheEngine", + "symbolName": "MustacheEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/NunjucksEngine", + "symbolName": "NunjucksEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/PlatesEngine", + "symbolName": "PlatesEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/PugEngine", + "symbolName": "PugEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/RactiveEngine", + "symbolName": "RactiveEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/ReactEngine", + "symbolName": "ReactEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/SlmEngine", + "symbolName": "SlmEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/SquirrellyEngine", + "symbolName": "SquirrellyEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/SwigEngine", + "symbolName": "SwigEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/TemplayedEngine", + "symbolName": "TemplayedEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/ToffeeEngine", + "symbolName": "ToffeeEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/TwigEngine", + "symbolName": "TwigEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/TwingEngine", + "symbolName": "TwingEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/UnderscoreEngine", + "symbolName": "UnderscoreEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/VashEngine", + "symbolName": "VashEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/VelocityEngine", + "symbolName": "VelocityEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/VueEngine", + "symbolName": "VueEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/components/WalrusEngine", + "symbolName": "WalrusEngine", + "module": "@tsed/engines", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/engines/types/decorators/ViewEngine", + "symbolName": "ViewEngine", + "module": "@tsed/engines", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/engines" + }, + "@tsed/apollo": { + "symbols": [ + { + "path": "/api/graphql/apollo/types/ApolloModule", + "symbolName": "ApolloModule", + "module": "@tsed/apollo", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/graphql/apollo/types/decorators/DataSource", + "symbolName": "DataSource", + "module": "@tsed/apollo", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "graphql", + "stable" + ] + }, + { + "path": "/api/graphql/apollo/types/decorators/DataSourceService", + "symbolName": "DataSourceService", + "module": "@tsed/apollo", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "decorator", + "graphql", + "stable" + ] + }, + { + "path": "/api/graphql/apollo/types/interfaces/ApolloMiddlewareOptions", + "symbolName": "ApolloMiddlewareOptions", + "module": "@tsed/apollo", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/graphql/apollo/types/interfaces/ApolloServer", + "symbolName": "ApolloServer", + "module": "@tsed/apollo", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/graphql/apollo/types/interfaces/ApolloCustomServerCB", + "symbolName": "ApolloCustomServerCB", + "module": "@tsed/apollo", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/graphql/apollo/types/interfaces/ApolloConfig", + "symbolName": "ApolloConfig", + "module": "@tsed/apollo", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/graphql/apollo/types/interfaces/ApolloSettings", + "symbolName": "ApolloSettings", + "module": "@tsed/apollo", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/apollo" + }, + "@tsed/mikro-orm": { + "symbols": [ + { + "path": "/api/orm/mikro-orm/types/MikroOrmModule", + "symbolName": "MikroOrmModule", + "module": "@tsed/mikro-orm", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/DEFAULT_CONTEXT_NAME", + "symbolName": "DEFAULT_CONTEXT_NAME", + "module": "@tsed/mikro-orm", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/SUBSCRIBER_INJECTION_TYPE", + "symbolName": "SUBSCRIBER_INJECTION_TYPE", + "module": "@tsed/mikro-orm", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/decorators/EntityManager", + "symbolName": "EntityManager", + "module": "@tsed/mikro-orm", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mikroOrm", + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/decorators/Em", + "symbolName": "Em", + "module": "@tsed/mikro-orm", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mikroOrm", + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/decorators/Orm", + "symbolName": "Orm", + "module": "@tsed/mikro-orm", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/decorators/Subscriber", + "symbolName": "Subscriber", + "module": "@tsed/mikro-orm", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mikroOrm", + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/decorators/Transactional", + "symbolName": "Transactional", + "module": "@tsed/mikro-orm", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/filters/OptimisticLockErrorFilter", + "symbolName": "OptimisticLockErrorFilter", + "module": "@tsed/mikro-orm", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/interceptors/TransactionOptions", + "symbolName": "TransactionOptions", + "module": "@tsed/mikro-orm", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/interceptors/TransactionalInterceptor", + "symbolName": "TransactionalInterceptor", + "module": "@tsed/mikro-orm", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/services/MikroOrmContext", + "symbolName": "MikroOrmContext", + "module": "@tsed/mikro-orm", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "internal", + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/services/MikroOrmFactory", + "symbolName": "MikroOrmFactory", + "module": "@tsed/mikro-orm", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/services/MikroOrmRegistry", + "symbolName": "MikroOrmRegistry", + "module": "@tsed/mikro-orm", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mikro-orm/types/services/RetryStrategy", + "symbolName": "RetryStrategy", + "module": "@tsed/mikro-orm", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/mikro-orm" + }, + "@tsed/testing-mongoose": { + "symbols": [ + { + "path": "/api/orm/testing-mongoose/types/TestMongooseContext", + "symbolName": "TestMongooseContext", + "module": "@tsed/testing-mongoose", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/testing-mongoose" + }, + "@tsed/typeorm": { + "symbols": [ + { + "path": "/api/orm/typeorm/types/TypeORMModule", + "symbolName": "TypeORMModule", + "module": "@tsed/typeorm", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/typeorm/types/decorators/UseConnection", + "symbolName": "UseConnection", + "module": "@tsed/typeorm", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/orm/typeorm/types/services/TypeORMService", + "symbolName": "TypeORMService", + "module": "@tsed/typeorm", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/typeorm" + }, + "@tsed/platform-serverless-testing": { + "symbols": [ + { + "path": "/api/platform/platform-serverless-testing/types/LambdaPromiseResult", + "symbolName": "LambdaPromiseResult", + "module": "@tsed/platform-serverless-testing", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless-testing/types/LambdaClientRequest", + "symbolName": "LambdaClientRequest", + "module": "@tsed/platform-serverless-testing", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless-testing/types/PlatformServerlessTest", + "symbolName": "PlatformServerlessTest", + "module": "@tsed/platform-serverless-testing", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless-testing/types/createFakeContext", + "symbolName": "createFakeContext", + "module": "@tsed/platform-serverless-testing", + "symbolType": "function", + "symbolLabel": "Function", + "symbolCode": "F", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless-testing/types/createFakeEvent", + "symbolName": "createFakeEvent", + "module": "@tsed/platform-serverless-testing", + "symbolType": "function", + "symbolLabel": "Function", + "symbolCode": "F", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/platform-serverless-testing" + }, + "@tsed/jwks": { + "symbols": [ + { + "path": "/api/security/jwks/types/JwksKeyParameters", + "symbolName": "JwksKeyParameters", + "module": "@tsed/jwks", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/jwks/types/JwksOptions", + "symbolName": "JwksOptions", + "module": "@tsed/jwks", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/jwks/types/generateJwks", + "symbolName": "generateJwks", + "module": "@tsed/jwks", + "symbolType": "function", + "symbolLabel": "Function", + "symbolCode": "F", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/jwks/types/getJwks", + "symbolName": "getJwks", + "module": "@tsed/jwks", + "symbolType": "function", + "symbolLabel": "Function", + "symbolCode": "F", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/jwks" + }, + "@tsed/oidc-provider": { + "symbols": [ + { + "path": "/api/security/oidc-provider/types/OidcModule", + "symbolName": "OidcModule", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/GrantId", + "symbolName": "GrantId", + "module": "@tsed/oidc-provider", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/Interaction", + "symbolName": "Interaction", + "module": "@tsed/oidc-provider", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "Oidc", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/InteractionsOptions", + "symbolName": "InteractionsOptions", + "module": "@tsed/oidc-provider", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/Interactions", + "symbolName": "Interactions", + "module": "@tsed/oidc-provider", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/NoCache", + "symbolName": "NoCache", + "module": "@tsed/oidc-provider", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/OidcCtx", + "symbolName": "OidcCtx", + "module": "@tsed/oidc-provider", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/OidcSession", + "symbolName": "OidcSession", + "module": "@tsed/oidc-provider", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/Params", + "symbolName": "Params", + "module": "@tsed/oidc-provider", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/Prompt", + "symbolName": "Prompt", + "module": "@tsed/oidc-provider", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/decorators/Uid", + "symbolName": "Uid", + "module": "@tsed/oidc-provider", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/InteractionMethods", + "symbolName": "InteractionMethods", + "module": "@tsed/oidc-provider", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/OidcAccountsMethods", + "symbolName": "OidcAccountsMethods", + "module": "@tsed/oidc-provider", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/OidcBadInteractionName", + "symbolName": "OidcBadInteractionName", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/OidcInteractionMethods", + "symbolName": "OidcInteractionMethods", + "module": "@tsed/oidc-provider", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/OidcInteractionOptions", + "symbolName": "OidcInteractionOptions", + "module": "@tsed/oidc-provider", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/OidcInteractionPromptProps", + "symbolName": "OidcInteractionPromptProps", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/OidcSettings", + "symbolName": "OidcSettings", + "module": "@tsed/oidc-provider", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/OIDCContext", + "symbolName": "OIDCContext", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/OidcClient", + "symbolName": "OidcClient", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/DefaultPolicy", + "symbolName": "DefaultPolicy", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/AuthorizationCode", + "symbolName": "AuthorizationCode", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/AccessToken", + "symbolName": "AccessToken", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/ClientCredentials", + "symbolName": "ClientCredentials", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/DeviceCode", + "symbolName": "DeviceCode", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/RefreshToken", + "symbolName": "RefreshToken", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/BackchannelAuthenticationRequest", + "symbolName": "BackchannelAuthenticationRequest", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/Grant", + "symbolName": "Grant", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/domain/OidcInteraction", + "symbolName": "OidcInteraction", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/middlewares/OidcInteractionMiddleware", + "symbolName": "OidcInteractionMiddleware", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/middlewares/OidcNoCacheMiddleware", + "symbolName": "OidcNoCacheMiddleware", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/middlewares/OidcSecureMiddleware", + "symbolName": "OidcSecureMiddleware", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/services/OidcAdapterMethods", + "symbolName": "OidcAdapterMethods", + "module": "@tsed/oidc-provider", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/services/OidcAdapters", + "symbolName": "OidcAdapters", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/services/OidcInteractionContext", + "symbolName": "OidcInteractionContext", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/services/OidcInteractions", + "symbolName": "OidcInteractions", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/services/OidcJwks", + "symbolName": "OidcJwks", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/services/OidcPolicy", + "symbolName": "OidcPolicy", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/services/OidcProvider", + "symbolName": "OidcProvider", + "module": "@tsed/oidc-provider", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/oidc-provider/types/services/OIDC_PROVIDER_NODE_MODULE", + "symbolName": "OIDC_PROVIDER_NODE_MODULE", + "module": "@tsed/oidc-provider", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/oidc-provider" + }, + "@tsed/oidc-provider-plugin-wildcard-redirect-uri": { + "symbols": [ + { + "path": "/api/security/oidc-provider-plugin-wildcard-redirect-uri/types/OidcWildcardRedirectUriModule", + "symbolName": "OidcWildcardRedirectUriModule", + "module": "@tsed/oidc-provider-plugin-wildcard-redirect-uri", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/oidc-provider-plugin-wildcard-redirect-uri" + }, + "@tsed/agenda": { + "symbols": [ + { + "path": "/api/third-parties/agenda/types/AgendaModule", + "symbolName": "AgendaModule", + "module": "@tsed/agenda", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/agenda/types/decorators/Agenda", + "symbolName": "Agenda", + "module": "@tsed/agenda", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/agenda/types/decorators/Define", + "symbolName": "Define", + "module": "@tsed/agenda", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/agenda/types/decorators/Every", + "symbolName": "Every", + "module": "@tsed/agenda", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/agenda/types/interfaces/DefineOptions", + "symbolName": "DefineOptions", + "module": "@tsed/agenda", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/agenda/types/interfaces/EveryOptions", + "symbolName": "EveryOptions", + "module": "@tsed/agenda", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/third-parties/agenda/types/interfaces/AgendaStore", + "symbolName": "AgendaStore", + "module": "@tsed/agenda", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/agenda/types/services/AgendaService", + "symbolName": "AgendaService", + "module": "@tsed/agenda", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/agenda" + }, + "@tsed/event-emitter": { + "symbols": [ + { + "path": "/api/third-parties/event-emitter/types/EventEmitterModule", + "symbolName": "EventEmitterModule", + "module": "@tsed/event-emitter", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/event-emitter/types/decorators/OnAny", + "symbolName": "OnAny", + "module": "@tsed/event-emitter", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/event-emitter/types/decorators/OnEvent", + "symbolName": "OnEvent", + "module": "@tsed/event-emitter", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/event-emitter/types/interfaces/EventEmitterStore", + "symbolName": "EventEmitterStore", + "module": "@tsed/event-emitter", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/event-emitter/types/services/EventEmitterService", + "symbolName": "EventEmitterService", + "module": "@tsed/event-emitter", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/event-emitter" + }, + "@tsed/terminus": { + "symbols": [ + { + "path": "/api/third-parties/terminus/types/TerminusModule", + "symbolName": "TerminusModule", + "module": "@tsed/terminus", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/terminus/types/decorators/Health", + "symbolName": "Health", + "module": "@tsed/terminus", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/terminus/types/interfaces/TerminusSettings", + "symbolName": "TerminusSettings", + "module": "@tsed/terminus", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + } + ], + "name": "@tsed/terminus" + }, + "@tsed/vite-ssr-plugin": { + "symbols": [ + { + "path": "/api/third-parties/vite-ssr-plugin/types/ViteModule", + "symbolName": "ViteModule", + "module": "@tsed/vite-ssr-plugin", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/vite-ssr-plugin/types/decorators/Vite", + "symbolName": "Vite", + "module": "@tsed/vite-ssr-plugin", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/vite-ssr-plugin/types/interfaces/ViteConfig", + "symbolName": "ViteConfig", + "module": "@tsed/vite-ssr-plugin", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/vite-ssr-plugin/types/interfaces/VitePageProps", + "symbolName": "VitePageProps", + "module": "@tsed/vite-ssr-plugin", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/third-parties/vite-ssr-plugin/types/interfaces/ViteRenderContext", + "symbolName": "ViteRenderContext", + "module": "@tsed/vite-ssr-plugin", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/vite-ssr-plugin/types/middlewares/ViteRendererMiddleware", + "symbolName": "ViteRendererMiddleware", + "module": "@tsed/vite-ssr-plugin", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/vite-ssr-plugin/types/services/VITE_SERVER", + "symbolName": "VITE_SERVER", + "module": "@tsed/vite-ssr-plugin", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/vite-ssr-plugin/types/services/ViteService", + "symbolName": "ViteService", + "module": "@tsed/vite-ssr-plugin", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/vite-ssr-plugin" + }, + "@tsed/di": { + "symbols": [ + { + "path": "/api/di/types/common/decorators/Configuration", + "symbolName": "Configuration", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Constant", + "symbolName": "Constant", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/PathType", + "symbolName": "PathType", + "module": "@tsed/di", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/ControllerMiddlewares", + "symbolName": "ControllerMiddlewares", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/ControllerOptions", + "symbolName": "ControllerOptions", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Controller", + "symbolName": "Controller", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "controller", + "decorator", + "classDecorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/injectProperty", + "symbolName": "injectProperty", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Inject", + "symbolName": "Inject", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Injectable", + "symbolName": "Injectable", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Intercept", + "symbolName": "Intercept", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Interceptor", + "symbolName": "Interceptor", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/LazyInject", + "symbolName": "LazyInject", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/OptionalLazyInject", + "symbolName": "OptionalLazyInject", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/ModuleOptions", + "symbolName": "ModuleOptions", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Module", + "symbolName": "Module", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Opts", + "symbolName": "Opts", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/OverrideProvider", + "symbolName": "OverrideProvider", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Scope", + "symbolName": "Scope", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "constructor", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Service", + "symbolName": "Service", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/UseOpts", + "symbolName": "UseOpts", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/decorators/Value", + "symbolName": "Value", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/common/domain/Container", + "symbolName": "Container", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/domain/ControllerProvider", + "symbolName": "ControllerProvider", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/domain/InjectablePropertyType", + "symbolName": "InjectablePropertyType", + "module": "@tsed/di", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/domain/LocalsContainer", + "symbolName": "LocalsContainer", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/domain/ProviderHookCallback", + "symbolName": "ProviderHookCallback", + "module": "@tsed/di", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/di/types/common/domain/Provider", + "symbolName": "Provider", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/domain/ProviderScope", + "symbolName": "ProviderScope", + "module": "@tsed/di", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/domain/ProviderType", + "symbolName": "ProviderType", + "module": "@tsed/di", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/errors/InjectionError", + "symbolName": "InjectionError", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/errors/InvalidPropertyTokenError", + "symbolName": "InvalidPropertyTokenError", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/errors/UndefinedTokenError", + "symbolName": "UndefinedTokenError", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/DIConfigurationOptions", + "symbolName": "DIConfigurationOptions", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/DILogger", + "symbolName": "DILogger", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/DILoggerOptions", + "symbolName": "DILoggerOptions", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/DIResolver", + "symbolName": "DIResolver", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/InjectableProperty", + "symbolName": "InjectableProperty", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/InjectablePropertyOptions", + "symbolName": "InjectablePropertyOptions", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/InjectablePropertyValue", + "symbolName": "InjectablePropertyValue", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/InjectableProperties", + "symbolName": "InjectableProperties", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/InterceptorNext", + "symbolName": "InterceptorNext", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/InterceptorContext", + "symbolName": "InterceptorContext", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/InterceptorMethods", + "symbolName": "InterceptorMethods", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/InvokeOptions", + "symbolName": "InvokeOptions", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/OnDestroy", + "symbolName": "OnDestroy", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/OnInit", + "symbolName": "OnInit", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/ProviderOpts", + "symbolName": "ProviderOpts", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/ResolvedInvokeOptions", + "symbolName": "ResolvedInvokeOptions", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/TokenProvider", + "symbolName": "TokenProvider", + "module": "@tsed/di", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/TokenProviderOpts", + "symbolName": "TokenProviderOpts", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/interfaces/TokenRoute", + "symbolName": "TokenRoute", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/services/DIConfiguration", + "symbolName": "DIConfiguration", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/services/LOGGER", + "symbolName": "LOGGER", + "module": "@tsed/di", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/common/services/InjectorService", + "symbolName": "InjectorService", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/node/decorators/InjectContext", + "symbolName": "InjectContext", + "module": "@tsed/di", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/di/types/node/domain/ContextLoggerOptions", + "symbolName": "ContextLoggerOptions", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/node/domain/ContextLogger", + "symbolName": "ContextLogger", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/node/domain/DIContextOptions", + "symbolName": "DIContextOptions", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/node/domain/DIContext", + "symbolName": "DIContext", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/node/domain/BaseContext", + "symbolName": "BaseContext", + "module": "@tsed/di", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/di/types/node/interfaces/AlterRunInContext", + "symbolName": "AlterRunInContext", + "module": "@tsed/di", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/di/types/node/services/DITest", + "symbolName": "DITest", + "module": "@tsed/di", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/di" + }, + "@tsed/typegraphql": { + "symbols": [ + { + "path": "/api/graphql/typegraphql/types/decorators/ResolverController", + "symbolName": "ResolverController", + "module": "@tsed/typegraphql", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/graphql/typegraphql/types/decorators/ResolverService", + "symbolName": "ResolverService", + "module": "@tsed/typegraphql", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "deprecated" + ] + }, + { + "path": "/api/graphql/typegraphql/types/interfaces/TypeGraphQLSettings", + "symbolName": "TypeGraphQLSettings", + "module": "@tsed/typegraphql", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/typegraphql" + }, + "@tsed/ioredis": { + "symbols": [ + { + "path": "/api/orm/ioredis/types/domain/ClusterConfiguration", + "symbolName": "ClusterConfiguration", + "module": "@tsed/ioredis", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/ioredis/types/domain/BaseIORedisConfiguration", + "symbolName": "BaseIORedisConfiguration", + "module": "@tsed/ioredis", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/ioredis/types/domain/IORedisConfiguration", + "symbolName": "IORedisConfiguration", + "module": "@tsed/ioredis", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/ioredis/types/domain/RedisClusterConfig", + "symbolName": "RedisClusterConfig", + "module": "@tsed/ioredis", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/ioredis/types/domain/IORedisStoreCtrOptions", + "symbolName": "IORedisStoreCtrOptions", + "module": "@tsed/ioredis", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/ioredis/types/domain/IORedisStore", + "symbolName": "IORedisStore", + "module": "@tsed/ioredis", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/ioredis/types/domain/ioRedisStore", + "symbolName": "ioRedisStore", + "module": "@tsed/ioredis", + "symbolType": "function", + "symbolLabel": "Function", + "symbolCode": "F", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/ioredis/types/domain/IORedisTest", + "symbolName": "IORedisTest", + "module": "@tsed/ioredis", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/ioredis" + }, + "@tsed/mongoose": { + "symbols": [ + { + "path": "/api/orm/mongoose/types/decorators/Auto", + "symbolName": "Auto", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/DynamicRef", + "symbolName": "DynamicRef", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/ExcludeIndexes", + "symbolName": "ExcludeIndexes", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Expires", + "symbolName": "Expires", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Immutable", + "symbolName": "Immutable", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Indexed", + "symbolName": "Indexed", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Lowercase", + "symbolName": "Lowercase", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Model", + "symbolName": "Model", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "class", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/MongooseIndex", + "symbolName": "MongooseIndex", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "class", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/MongooseIndexes", + "symbolName": "MongooseIndexes", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "class", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/MongoosePlugin", + "symbolName": "MongoosePlugin", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "class", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/DecimalFormat", + "symbolName": "DecimalFormat", + "module": "@tsed/mongoose", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/NumberDecimal", + "symbolName": "NumberDecimal", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "schema", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Decimal128", + "symbolName": "Decimal128", + "module": "@tsed/mongoose", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/ObjectID", + "symbolName": "ObjectID", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "schema", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/PostHook", + "symbolName": "PostHook", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "class", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/PreHook", + "symbolName": "PreHook", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "class", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Ref", + "symbolName": "Ref", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Schema", + "symbolName": "Schema", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "class", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/MongooseSchema", + "symbolName": "MongooseSchema", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "class", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/SchemaIgnore", + "symbolName": "SchemaIgnore", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "class", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Select", + "symbolName": "Select", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Sparse", + "symbolName": "Sparse", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Text", + "symbolName": "Text", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Trim", + "symbolName": "Trim", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Unique", + "symbolName": "Unique", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/Uppercase", + "symbolName": "Uppercase", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/VersionKey", + "symbolName": "VersionKey", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/VirtualRef", + "symbolName": "VirtualRef", + "module": "@tsed/mongoose", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "mongoose", + "property", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/decorators/VirtualRefs", + "symbolName": "VirtualRefs", + "module": "@tsed/mongoose", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "deprecated", + "private" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseConnectionOptions", + "symbolName": "MongooseConnectionOptions", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseDocument", + "symbolName": "MongooseDocument", + "module": "@tsed/mongoose", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseMergedDocument", + "symbolName": "MongooseMergedDocument", + "module": "@tsed/mongoose", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseDocumentMethods", + "symbolName": "MongooseDocumentMethods", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseModel", + "symbolName": "MongooseModel", + "module": "@tsed/mongoose", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseModelOptions", + "symbolName": "MongooseModelOptions", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseNextCB", + "symbolName": "MongooseNextCB", + "module": "@tsed/mongoose", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseHookOptions", + "symbolName": "MongooseHookOptions", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseHookPromised", + "symbolName": "MongooseHookPromised", + "module": "@tsed/mongoose", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongoosePreHookCB", + "symbolName": "MongoosePreHookCB", + "module": "@tsed/mongoose", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongoosePostHookCB", + "symbolName": "MongoosePostHookCB", + "module": "@tsed/mongoose", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongoosePreHook", + "symbolName": "MongoosePreHook", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongoosePostHook", + "symbolName": "MongoosePostHook", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongoosePluginOptions", + "symbolName": "MongoosePluginOptions", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseIndexOptions", + "symbolName": "MongooseIndexOptions", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseSchemaOptions", + "symbolName": "MongooseSchemaOptions", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseSchemaTypes", + "symbolName": "MongooseSchemaTypes", + "module": "@tsed/mongoose", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/interfaces/MongooseVirtualRefOptions", + "symbolName": "MongooseVirtualRefOptions", + "module": "@tsed/mongoose", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/mongoose/types/services/MongooseService", + "symbolName": "MongooseService", + "module": "@tsed/mongoose", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/mongoose" + }, + "@tsed/objection": { + "symbols": [ + { + "path": "/api/orm/objection/types/decorators/BelongsToOne", + "symbolName": "BelongsToOne", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/ColumnOptions", + "symbolName": "ColumnOptions", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/DecimalOptions", + "symbolName": "DecimalOptions", + "module": "@tsed/objection", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/Decimal", + "symbolName": "Decimal", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/Entity", + "symbolName": "Entity", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/EntityMethods", + "symbolName": "EntityMethods", + "module": "@tsed/objection", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/HasMany", + "symbolName": "HasMany", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/HasOne", + "symbolName": "HasOne", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/HasOneThroughRelation", + "symbolName": "HasOneThroughRelation", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/IdColumn", + "symbolName": "IdColumn", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/ManyToMany", + "symbolName": "ManyToMany", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/decorators/RelatesTo", + "symbolName": "RelatesTo", + "module": "@tsed/objection", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "objection", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/domain/ColumnOpts", + "symbolName": "ColumnOpts", + "module": "@tsed/objection", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/objection/types/domain/RelationshipOptsWithThrough", + "symbolName": "RelationshipOptsWithThrough", + "module": "@tsed/objection", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/domain/RelationshipOptsWithoutThrough", + "symbolName": "RelationshipOptsWithoutThrough", + "module": "@tsed/objection", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/domain/RelationshipOpts", + "symbolName": "RelationshipOpts", + "module": "@tsed/objection", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/orm/objection/types/domain/isRelationshipOptsWithThrough", + "symbolName": "isRelationshipOptsWithThrough", + "module": "@tsed/objection", + "symbolType": "function", + "symbolLabel": "Function", + "symbolCode": "F", + "status": [ + "stable" + ] + }, + { + "path": "/api/orm/objection/types/domain/isModelClassFactory", + "symbolName": "isModelClassFactory", + "module": "@tsed/objection", + "symbolType": "function", + "symbolLabel": "Function", + "symbolCode": "F", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/objection" + }, + "@tsed/common": { + "symbols": [ + { + "path": "/api/platform/common/types/builder/PlatformBuilder", + "symbolName": "PlatformBuilder", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/PlatformProvider", + "symbolName": "PlatformProvider", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/domain/AnyToPromiseWithCtx", + "symbolName": "AnyToPromiseWithCtx", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/domain/PlatformContextOptions", + "symbolName": "PlatformContextOptions", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/domain/PlatformContext", + "symbolName": "PlatformContext", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/domain/PlatformRouteDetails", + "symbolName": "PlatformRouteDetails", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/AfterInit", + "symbolName": "AfterInit", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/AfterListen", + "symbolName": "AfterListen", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/AfterRoutesInit", + "symbolName": "AfterRoutesInit", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/BeforeInit", + "symbolName": "BeforeInit", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/BeforeListen", + "symbolName": "BeforeListen", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/BeforeRoutesInit", + "symbolName": "BeforeRoutesInit", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/IncomingEvent", + "symbolName": "IncomingEvent", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/OnReady", + "symbolName": "OnReady", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/OnRequest", + "symbolName": "OnRequest", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/OnResponse", + "symbolName": "OnResponse", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/OnRoutesInit", + "symbolName": "OnRoutesInit", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/ResponseErrorObject", + "symbolName": "ResponseErrorObject", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/Route", + "symbolName": "Route", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/interfaces/RouteController", + "symbolName": "RouteController", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/middlewares/PlatformAcceptMimesMiddleware", + "symbolName": "PlatformAcceptMimesMiddleware", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "middleware", + "platform", + "stable" + ] + }, + { + "path": "/api/platform/common/types/middlewares/MulterInputOptions", + "symbolName": "MulterInputOptions", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/middlewares/MulterException", + "symbolName": "MulterException", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/middlewares/PlatformMulterMiddleware", + "symbolName": "PlatformMulterMiddleware", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "middleware", + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/FakeAdapter", + "symbolName": "FakeAdapter", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/Platform", + "symbolName": "Platform", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/PlatformAdapter", + "symbolName": "PlatformAdapter", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/PlatformBuilderSettings", + "symbolName": "PlatformBuilderSettings", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/PlatformApplication", + "symbolName": "PlatformApplication", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/PlatformHandler", + "symbolName": "PlatformHandler", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/PlatformMiddlewaresChain", + "symbolName": "PlatformMiddlewaresChain", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/PlatformRequest", + "symbolName": "PlatformRequest", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/PlatformResponse", + "symbolName": "PlatformResponse", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/common/types/services/PlatformTest", + "symbolName": "PlatformTest", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/interfaces/PlatformJsonMapperSettings", + "symbolName": "PlatformJsonMapperSettings", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/interfaces/PlatformLoggerSettings", + "symbolName": "PlatformLoggerSettings", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/interfaces/PlatformMulter", + "symbolName": "PlatformMulter", + "module": "@tsed/common", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/interfaces/PlatformMulterSettings", + "symbolName": "PlatformMulterSettings", + "module": "@tsed/common", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/interfaces/PlatformMulterFile", + "symbolName": "PlatformMulterFile", + "module": "@tsed/common", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/interfaces/PlatformMulterField", + "symbolName": "PlatformMulterField", + "module": "@tsed/common", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/interfaces/PlatformStaticsOptions", + "symbolName": "PlatformStaticsOptions", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/interfaces/PathOrStaticsOptions", + "symbolName": "PathOrStaticsOptions", + "module": "@tsed/common", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/interfaces/PlatformStaticsSettings", + "symbolName": "PlatformStaticsSettings", + "module": "@tsed/common", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/config/services/PlatformConfiguration", + "symbolName": "PlatformConfiguration", + "module": "@tsed/common", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/multer/MulterFileSize", + "symbolName": "MulterFileSize", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "multer", + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/multer/MulterOptions", + "symbolName": "MulterOptions", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "multer", + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/multer/MultipartFile", + "symbolName": "MultipartFile", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "input", + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/params/Err", + "symbolName": "Err", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/params/Next", + "symbolName": "Next", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/params/Request", + "symbolName": "Request", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/params/Req", + "symbolName": "Req", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "alias", + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/params/Response", + "symbolName": "Response", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "response", + "stable" + ] + }, + { + "path": "/api/platform/common/types/decorators/params/Res", + "symbolName": "Res", + "module": "@tsed/common", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "alias", + "decorator", + "operation", + "input", + "response", + "stable" + ] + } + ], + "name": "@tsed/common" + }, + "@tsed/platform-cache": { + "symbols": [ + { + "path": "/api/platform/platform-cache/types/decorators/UseCache", + "symbolName": "UseCache", + "module": "@tsed/platform-cache", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-cache/types/interceptors/PlatformCacheInterceptor", + "symbolName": "PlatformCacheInterceptor", + "module": "@tsed/platform-cache", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/platform-cache/types/interfaces/PlatformCacheOptions", + "symbolName": "PlatformCacheOptions", + "module": "@tsed/platform-cache", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-cache/types/interfaces/PlatformCachedObject", + "symbolName": "PlatformCachedObject", + "module": "@tsed/platform-cache", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-cache/types/interfaces/PlatformCacheLegacyStoreFactory", + "symbolName": "PlatformCacheLegacyStoreFactory", + "module": "@tsed/platform-cache", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "deprecated", + "private" + ] + }, + { + "path": "/api/platform/platform-cache/types/interfaces/PlatformCacheSettings", + "symbolName": "PlatformCacheSettings", + "module": "@tsed/platform-cache", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-cache/types/interfaces/OnCreateCacheManager", + "symbolName": "OnCreateCacheManager", + "module": "@tsed/platform-cache", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-cache/types/services/CacheManager", + "symbolName": "CacheManager", + "module": "@tsed/platform-cache", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-cache/types/services/Ttl", + "symbolName": "Ttl", + "module": "@tsed/platform-cache", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-cache/types/services/PlatformCache", + "symbolName": "PlatformCache", + "module": "@tsed/platform-cache", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + } + ], + "name": "@tsed/platform-cache" + }, + "@tsed/platform-exceptions": { + "symbols": [ + { + "path": "/api/platform/platform-exceptions/types/components/ErrorFilter", + "symbolName": "ErrorFilter", + "module": "@tsed/platform-exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-exceptions/types/components/ExceptionFilter", + "symbolName": "ExceptionFilter", + "module": "@tsed/platform-exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-exceptions/types/components/MongooseErrorFilter", + "symbolName": "MongooseErrorFilter", + "module": "@tsed/platform-exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-exceptions/types/components/StringErrorFilter", + "symbolName": "StringErrorFilter", + "module": "@tsed/platform-exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-exceptions/types/decorators/Catch", + "symbolName": "Catch", + "module": "@tsed/platform-exceptions", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/platform/platform-exceptions/types/errors/ResourceNotFound", + "symbolName": "ResourceNotFound", + "module": "@tsed/platform-exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-exceptions/types/interfaces/ExceptionFilterMethods", + "symbolName": "ExceptionFilterMethods", + "module": "@tsed/platform-exceptions", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-exceptions/types/services/PlatformExceptions", + "symbolName": "PlatformExceptions", + "module": "@tsed/platform-exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + } + ], + "name": "@tsed/platform-exceptions" + }, + "@tsed/platform-express": { + "symbols": [ + { + "path": "/api/platform/platform-express/types/interfaces/PlatformExpressSettings", + "symbolName": "PlatformExpressSettings", + "module": "@tsed/platform-express", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-express/types/interfaces/PlatformExpressStaticsOptions", + "symbolName": "PlatformExpressStaticsOptions", + "module": "@tsed/platform-express", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/platform-express" + }, + "@tsed/platform-koa": { + "symbols": [ + { + "path": "/api/platform/platform-koa/types/decorators/KoaCtx", + "symbolName": "KoaCtx", + "module": "@tsed/platform-koa", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "koa", + "stable" + ] + }, + { + "path": "/api/platform/platform-koa/types/decorators/Ctx", + "symbolName": "Ctx", + "module": "@tsed/platform-koa", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "koa", + "stable" + ] + }, + { + "path": "/api/platform/platform-koa/types/decorators/State", + "symbolName": "State", + "module": "@tsed/platform-koa", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "response", + "koa", + "stable" + ] + }, + { + "path": "/api/platform/platform-koa/types/interfaces/PlatformKoaSettings", + "symbolName": "PlatformKoaSettings", + "module": "@tsed/platform-koa", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-koa/types/services/PlatformKoaHandler", + "symbolName": "PlatformKoaHandler", + "module": "@tsed/platform-koa", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-koa/types/services/PlatformKoaRequest", + "symbolName": "PlatformKoaRequest", + "module": "@tsed/platform-koa", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "koa", + "stable" + ] + }, + { + "path": "/api/platform/platform-koa/types/services/PlatformKoaResponse", + "symbolName": "PlatformKoaResponse", + "module": "@tsed/platform-koa", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "koa", + "stable" + ] + } + ], + "name": "@tsed/platform-koa" + }, + "@tsed/platform-log-middleware": { + "symbols": [ + { + "path": "/api/platform/platform-log-middleware/types/domain/LoggerRequestFields", + "symbolName": "LoggerRequestFields", + "module": "@tsed/platform-log-middleware", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-log-middleware/types/domain/PlatformLogMiddlewareSettings", + "symbolName": "PlatformLogMiddlewareSettings", + "module": "@tsed/platform-log-middleware", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-log-middleware/types/middlewares/PlatformLogMiddleware", + "symbolName": "PlatformLogMiddleware", + "module": "@tsed/platform-log-middleware", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "middleware", + "platform", + "stable" + ] + } + ], + "name": "@tsed/platform-log-middleware" + }, + "@tsed/platform-middlewares": { + "symbols": [ + { + "path": "/api/platform/platform-middlewares/types/decorators/AuthOptions", + "symbolName": "AuthOptions", + "module": "@tsed/platform-middlewares", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "decorator", + "operation", + "stable" + ] + }, + { + "path": "/api/platform/platform-middlewares/types/decorators/Middleware", + "symbolName": "Middleware", + "module": "@tsed/platform-middlewares", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "classDecorator", + "stable" + ] + }, + { + "path": "/api/platform/platform-middlewares/types/decorators/Use", + "symbolName": "Use", + "module": "@tsed/platform-middlewares", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "stable" + ] + }, + { + "path": "/api/platform/platform-middlewares/types/decorators/UseAfter", + "symbolName": "UseAfter", + "module": "@tsed/platform-middlewares", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "stable" + ] + }, + { + "path": "/api/platform/platform-middlewares/types/decorators/UseAuth", + "symbolName": "UseAuth", + "module": "@tsed/platform-middlewares", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "stable" + ] + }, + { + "path": "/api/platform/platform-middlewares/types/decorators/UseBefore", + "symbolName": "UseBefore", + "module": "@tsed/platform-middlewares", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "stable" + ] + }, + { + "path": "/api/platform/platform-middlewares/types/decorators/UseBeforeEach", + "symbolName": "UseBeforeEach", + "module": "@tsed/platform-middlewares", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "stable" + ] + }, + { + "path": "/api/platform/platform-middlewares/types/domain/MiddlewareMethods", + "symbolName": "MiddlewareMethods", + "module": "@tsed/platform-middlewares", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-middlewares/types/domain/PlatformMiddlewareLoadingOptions", + "symbolName": "PlatformMiddlewareLoadingOptions", + "module": "@tsed/platform-middlewares", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-middlewares/types/domain/PlatformMiddlewareSettings", + "symbolName": "PlatformMiddlewareSettings", + "module": "@tsed/platform-middlewares", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + } + ], + "name": "@tsed/platform-middlewares" + }, + "@tsed/platform-params": { + "symbols": [ + { + "path": "/api/platform/platform-params/types/builder/PlatformParamsScope", + "symbolName": "PlatformParamsScope", + "module": "@tsed/platform-params", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/builder/PlatformParamsCallback", + "symbolName": "PlatformParamsCallback", + "module": "@tsed/platform-params", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/builder/PlatformParams", + "symbolName": "PlatformParams", + "module": "@tsed/platform-params", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/BodyParams", + "symbolName": "BodyParams", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/RawBodyParams", + "symbolName": "RawBodyParams", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "alias", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/Context", + "symbolName": "Context", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/CookiesParams", + "symbolName": "CookiesParams", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/Cookies", + "symbolName": "Cookies", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "aliasof", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/HeaderParams", + "symbolName": "HeaderParams", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/Locals", + "symbolName": "Locals", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "response", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/ParamFn", + "symbolName": "ParamFn", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/PathParams", + "symbolName": "PathParams", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/RawPathParams", + "symbolName": "RawPathParams", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/QueryParams", + "symbolName": "QueryParams", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/RawQueryParams", + "symbolName": "RawQueryParams", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/Session", + "symbolName": "Session", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/UseDeserialization", + "symbolName": "UseDeserialization", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "pipe", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/UseParam", + "symbolName": "UseParam", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "pipe", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/UseParamExpression", + "symbolName": "UseParamExpression", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "pipe", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/UseParamType", + "symbolName": "UseParamType", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "pipe", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/UsePipe", + "symbolName": "UsePipe", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "pipe", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/UseType", + "symbolName": "UseType", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "alias", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/decorators/UseValidation", + "symbolName": "UseValidation", + "module": "@tsed/platform-params", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "pipe", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/domain/ParamOptions", + "symbolName": "ParamOptions", + "module": "@tsed/platform-params", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/domain/ParamTypes", + "symbolName": "ParamTypes", + "module": "@tsed/platform-params", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/domain/PARAM_TYPES_DATA_PATH", + "symbolName": "PARAM_TYPES_DATA_PATH", + "module": "@tsed/platform-params", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/errors/ParamValidationError", + "symbolName": "ParamValidationError", + "module": "@tsed/platform-params", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/errors/RequiredValidationError", + "symbolName": "RequiredValidationError", + "module": "@tsed/platform-params", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/errors/ValidationError", + "symbolName": "ValidationError", + "module": "@tsed/platform-params", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/pipes/DeserializerPipe", + "symbolName": "DeserializerPipe", + "module": "@tsed/platform-params", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/pipes/ParseExpressionPipe", + "symbolName": "ParseExpressionPipe", + "module": "@tsed/platform-params", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/pipes/ValidatorServiceMethods", + "symbolName": "ValidatorServiceMethods", + "module": "@tsed/platform-params", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-params/types/pipes/ValidationPipe", + "symbolName": "ValidationPipe", + "module": "@tsed/platform-params", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/platform-params" + }, + "@tsed/platform-response-filter": { + "symbols": [ + { + "path": "/api/platform/platform-response-filter/types/decorators/ResponseFilter", + "symbolName": "ResponseFilter", + "module": "@tsed/platform-response-filter", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/platform/platform-response-filter/types/errors/TemplateRenderError", + "symbolName": "TemplateRenderError", + "module": "@tsed/platform-response-filter", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-response-filter/types/interfaces/ResponseFilterMethods", + "symbolName": "ResponseFilterMethods", + "module": "@tsed/platform-response-filter", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-response-filter/types/services/PlatformResponseFilter", + "symbolName": "PlatformResponseFilter", + "module": "@tsed/platform-response-filter", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + } + ], + "name": "@tsed/platform-response-filter" + }, + "@tsed/platform-router": { + "symbols": [ + { + "path": "/api/platform/platform-router/types/domain/PlatformHandlerMetadataOpts", + "symbolName": "PlatformHandlerMetadataOpts", + "module": "@tsed/platform-router", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-router/types/domain/PlatformHandlerMetadataProps", + "symbolName": "PlatformHandlerMetadataProps", + "module": "@tsed/platform-router", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-router/types/domain/PlatformHandlerMetadata", + "symbolName": "PlatformHandlerMetadata", + "module": "@tsed/platform-router", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-router/types/domain/PlatformHandlerType", + "symbolName": "PlatformHandlerType", + "module": "@tsed/platform-router", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-router/types/domain/PlatformLayerOptions", + "symbolName": "PlatformLayerOptions", + "module": "@tsed/platform-router", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-router/types/domain/PlatformLayerProps", + "symbolName": "PlatformLayerProps", + "module": "@tsed/platform-router", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-router/types/domain/PlatformLayer", + "symbolName": "PlatformLayer", + "module": "@tsed/platform-router", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-router/types/domain/PlatformRouter", + "symbolName": "PlatformRouter", + "module": "@tsed/platform-router", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-router/types/domain/PlatformRouters", + "symbolName": "PlatformRouters", + "module": "@tsed/platform-router", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-router/types/domain/SinglePathType", + "symbolName": "SinglePathType", + "module": "@tsed/platform-router", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + } + ], + "name": "@tsed/platform-router" + }, + "@tsed/platform-serverless": { + "symbols": [ + { + "path": "/api/platform/platform-serverless/types/builder/PlatformServerlessSettings", + "symbolName": "PlatformServerlessSettings", + "module": "@tsed/platform-serverless", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless/types/builder/PlatformServerless", + "symbolName": "PlatformServerless", + "module": "@tsed/platform-serverless", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless/types/builder/PlatformServerlessHandler", + "symbolName": "PlatformServerlessHandler", + "module": "@tsed/platform-serverless", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless/types/domain/ServerlessContextOptions", + "symbolName": "ServerlessContextOptions", + "module": "@tsed/platform-serverless", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless/types/domain/ServerlessContext", + "symbolName": "ServerlessContext", + "module": "@tsed/platform-serverless", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless/types/domain/ServerlessRequest", + "symbolName": "ServerlessRequest", + "module": "@tsed/platform-serverless", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless/types/domain/HeaderValue", + "symbolName": "HeaderValue", + "module": "@tsed/platform-serverless", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless/types/domain/ServerlessResponse", + "symbolName": "ServerlessResponse", + "module": "@tsed/platform-serverless", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + } + ], + "name": "@tsed/platform-serverless" + }, + "@tsed/platform-serverless-http": { + "symbols": [ + { + "path": "/api/platform/platform-serverless-http/types/decorators/ServerlessContext", + "symbolName": "ServerlessContext", + "module": "@tsed/platform-serverless-http", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless-http/types/builder/PlatformServerlessHttp", + "symbolName": "PlatformServerlessHttp", + "module": "@tsed/platform-serverless-http", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-serverless-http/types/decorators/ServerlessEvent", + "symbolName": "ServerlessEvent", + "module": "@tsed/platform-serverless-http", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + } + ], + "name": "@tsed/platform-serverless-http" + }, + "@tsed/platform-test-sdk": { + "symbols": [ + { + "path": "/api/platform/platform-test-sdk/types/interfaces/PlatformTestingSdkOpts", + "symbolName": "PlatformTestingSdkOpts", + "module": "@tsed/platform-test-sdk", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/platform-test-sdk" + }, + "@tsed/platform-views": { + "symbols": [ + { + "path": "/api/platform/platform-views/types/domain/PLATFORM_VIEWS_EXTENSIONS", + "symbolName": "PLATFORM_VIEWS_EXTENSIONS", + "module": "@tsed/platform-views", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-views/types/domain/PlatformViewsExtensionsTypes", + "symbolName": "PlatformViewsExtensionsTypes", + "module": "@tsed/platform-views", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/platform/platform-views/types/domain/PlatformViewsEngineOptions", + "symbolName": "PlatformViewsEngineOptions", + "module": "@tsed/platform-views", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-views/types/domain/PlatformRenderOptions", + "symbolName": "PlatformRenderOptions", + "module": "@tsed/platform-views", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-views/types/domain/PlatformViewWritableStream", + "symbolName": "PlatformViewWritableStream", + "module": "@tsed/platform-views", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-views/types/domain/PlatformViewEngine", + "symbolName": "PlatformViewEngine", + "module": "@tsed/platform-views", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-views/types/domain/PlatformViewsSettings", + "symbolName": "PlatformViewsSettings", + "module": "@tsed/platform-views", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/platform/platform-views/types/services/PlatformViews", + "symbolName": "PlatformViews", + "module": "@tsed/platform-views", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "platform", + "stable" + ] + } + ], + "name": "@tsed/platform-views" + }, + "@tsed/passport": { + "symbols": [ + { + "path": "/api/security/passport/types/contants/PROVIDER_TYPE_PROTOCOL", + "symbolName": "PROVIDER_TYPE_PROTOCOL", + "module": "@tsed/passport", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/decorators/Args", + "symbolName": "Args", + "module": "@tsed/passport", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/security/passport/types/decorators/Arg", + "symbolName": "Arg", + "module": "@tsed/passport", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/decorators/AuthenticateOptions", + "symbolName": "AuthenticateOptions", + "module": "@tsed/passport", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/decorators/Authenticate", + "symbolName": "Authenticate", + "module": "@tsed/passport", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/decorators/AuthorizeOptions", + "symbolName": "AuthorizeOptions", + "module": "@tsed/passport", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/decorators/Authorize", + "symbolName": "Authorize", + "module": "@tsed/passport", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/decorators/Protocol", + "symbolName": "Protocol", + "module": "@tsed/passport", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "class", + "stable" + ] + }, + { + "path": "/api/security/passport/types/decorators/ProtocolOptionsDecorator", + "symbolName": "ProtocolOptionsDecorator", + "module": "@tsed/passport", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/security/passport/types/domain/UserInfo", + "symbolName": "UserInfo", + "module": "@tsed/passport", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/errors/PassportException", + "symbolName": "PassportException", + "module": "@tsed/passport", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/interfaces/BeforeInstall", + "symbolName": "BeforeInstall", + "module": "@tsed/passport", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/interfaces/OnInstall", + "symbolName": "OnInstall", + "module": "@tsed/passport", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/interfaces/OnVerify", + "symbolName": "OnVerify", + "module": "@tsed/passport", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/interfaces/ProtocolMethods", + "symbolName": "ProtocolMethods", + "module": "@tsed/passport", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/interfaces/ProtocolOptions", + "symbolName": "ProtocolOptions", + "module": "@tsed/passport", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/security/passport/types/middlewares/PassportMiddleware", + "symbolName": "PassportMiddleware", + "module": "@tsed/passport", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/passport" + }, + "@tsed/socketio": { + "symbols": [ + { + "path": "/api/third-parties/socketio/types/decorators/Args", + "symbolName": "Args", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/class/SocketProviderMetadata", + "symbolName": "SocketProviderMetadata", + "module": "@tsed/socketio", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/Broadcast", + "symbolName": "Broadcast", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/BroadcastOthers", + "symbolName": "BroadcastOthers", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/Emit", + "symbolName": "Emit", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/Input", + "symbolName": "Input", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/InputAndBroadcast", + "symbolName": "InputAndBroadcast", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/InputAndBroadcastOthers", + "symbolName": "InputAndBroadcastOthers", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/InputAndEmit", + "symbolName": "InputAndEmit", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/IO", + "symbolName": "IO", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/Namespace", + "symbolName": "Namespace", + "module": "@tsed/socketio", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/Nsp", + "symbolName": "Nsp", + "module": "@tsed/socketio", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/Reason", + "symbolName": "Reason", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "example", + "experimental", + "decorator" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/Socket", + "symbolName": "Socket", + "module": "@tsed/socketio", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketErr", + "symbolName": "SocketErr", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketEventName", + "symbolName": "SocketEventName", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "experimental", + "decorator" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketFilter", + "symbolName": "SocketFilter", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketMiddleware", + "symbolName": "SocketMiddleware", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "experimental" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketMiddlewareError", + "symbolName": "SocketMiddlewareError", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "experimental" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketNsp", + "symbolName": "SocketNsp", + "module": "@tsed/socketio", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketReturns", + "symbolName": "SocketReturns", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketService", + "symbolName": "SocketService", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketSession", + "symbolName": "SocketSession", + "module": "@tsed/socketio", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketUseAfter", + "symbolName": "SocketUseAfter", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "experimental" + ] + }, + { + "path": "/api/third-parties/socketio/types/decorators/SocketUseBefore", + "symbolName": "SocketUseBefore", + "module": "@tsed/socketio", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "experimental" + ] + }, + { + "path": "/api/third-parties/socketio/types/interfaces/OnNamespaceInit", + "symbolName": "OnNamespaceInit", + "module": "@tsed/socketio", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/interfaces/SocketHandlerMetadata", + "symbolName": "SocketHandlerMetadata", + "module": "@tsed/socketio", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/interfaces/SocketInjectableNsp", + "symbolName": "SocketInjectableNsp", + "module": "@tsed/socketio", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/interfaces/SocketParamMetadata", + "symbolName": "SocketParamMetadata", + "module": "@tsed/socketio", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/interfaces/SocketProviderTypes", + "symbolName": "SocketProviderTypes", + "module": "@tsed/socketio", + "symbolType": "enum", + "symbolLabel": "Enum", + "symbolCode": "E", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/services/SocketIOServer", + "symbolName": "SocketIOServer", + "module": "@tsed/socketio", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "stable" + ] + }, + { + "path": "/api/third-parties/socketio/types/services/SocketIOService", + "symbolName": "SocketIOService", + "module": "@tsed/socketio", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/socketio" + }, + "@tsed/ajv": { + "symbols": [ + { + "path": "/api/specs/ajv/types/decorators/FormatsOptions", + "symbolName": "FormatsOptions", + "module": "@tsed/ajv", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/ajv/types/decorators/Formats", + "symbolName": "Formats", + "module": "@tsed/ajv", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "ajv", + "stable" + ] + }, + { + "path": "/api/specs/ajv/types/decorators/KeywordOptions", + "symbolName": "KeywordOptions", + "module": "@tsed/ajv", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/ajv/types/decorators/Keyword", + "symbolName": "Keyword", + "module": "@tsed/ajv", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "ajv", + "stable" + ] + }, + { + "path": "/api/specs/ajv/types/errors/AjvValidationError", + "symbolName": "AjvValidationError", + "module": "@tsed/ajv", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/ajv/types/services/AjvValidateOptions", + "symbolName": "AjvValidateOptions", + "module": "@tsed/ajv", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/ajv/types/services/AjvService", + "symbolName": "AjvService", + "module": "@tsed/ajv", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/ajv" + }, + "@tsed/exceptions": { + "symbols": [ + { + "path": "/api/specs/exceptions/types/clientErrors/BadMapping", + "symbolName": "BadMapping", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/BadRequest", + "symbolName": "BadRequest", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/Conflict", + "symbolName": "Conflict", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/ExpectationFailed", + "symbolName": "ExpectationFailed", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/Forbidden", + "symbolName": "Forbidden", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/Gone", + "symbolName": "Gone", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/ImATeapot", + "symbolName": "ImATeapot", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/LengthRequired", + "symbolName": "LengthRequired", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/MethodNotAllowed", + "symbolName": "MethodNotAllowed", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/MisdirectedRequest", + "symbolName": "MisdirectedRequest", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/NotAcceptable", + "symbolName": "NotAcceptable", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/NotFound", + "symbolName": "NotFound", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/PaymentRequired", + "symbolName": "PaymentRequired", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/PreconditionFailed", + "symbolName": "PreconditionFailed", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/PreconditionRequired", + "symbolName": "PreconditionRequired", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/ProxyAuthentificationRequired", + "symbolName": "ProxyAuthentificationRequired", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/RequestEntityTooLarge", + "symbolName": "RequestEntityTooLarge", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/RequestHeaderFieldsTooLarge", + "symbolName": "RequestHeaderFieldsTooLarge", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/RequestRangeUnsatisfiable", + "symbolName": "RequestRangeUnsatisfiable", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/RequestTimeout", + "symbolName": "RequestTimeout", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/RequestURITooLong", + "symbolName": "RequestURITooLong", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/TooManyRequests", + "symbolName": "TooManyRequests", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/Unauthorized", + "symbolName": "Unauthorized", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/UnavailableForLegalReasons", + "symbolName": "UnavailableForLegalReasons", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/UnprocessableEntity", + "symbolName": "UnprocessableEntity", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/UnsupportedMediaType", + "symbolName": "UnsupportedMediaType", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/clientErrors/UpgradeRequired", + "symbolName": "UpgradeRequired", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/core/Exception", + "symbolName": "Exception", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/core/HTTPException", + "symbolName": "HTTPException", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/redirections/MovedPermanently", + "symbolName": "MovedPermanently", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/redirections/MovedTemporarily", + "symbolName": "MovedTemporarily", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/redirections/MultipleChoices", + "symbolName": "MultipleChoices", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/redirections/NotModified", + "symbolName": "NotModified", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/redirections/PermanentRedirect", + "symbolName": "PermanentRedirect", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/redirections/SeeOther", + "symbolName": "SeeOther", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/redirections/TemporaryRedirect", + "symbolName": "TemporaryRedirect", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/redirections/UseProxy", + "symbolName": "UseProxy", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/BadGateway", + "symbolName": "BadGateway", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/BandwidthLimitExceeded", + "symbolName": "BandwidthLimitExceeded", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/GatewayTimeout", + "symbolName": "GatewayTimeout", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/InternalServerError", + "symbolName": "InternalServerError", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/NetworkAuthenticationRequired", + "symbolName": "NetworkAuthenticationRequired", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/NotExtended", + "symbolName": "NotExtended", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/NotImplemented", + "symbolName": "NotImplemented", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/ProxyError", + "symbolName": "ProxyError", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/ServiceUnvailable", + "symbolName": "ServiceUnvailable", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/exceptions/types/serverErrors/VariantAlsoNegotiates", + "symbolName": "VariantAlsoNegotiates", + "module": "@tsed/exceptions", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/exceptions" + }, + "@tsed/json-mapper": { + "symbols": [ + { + "path": "/api/specs/json-mapper/types/components/ArrayMapper", + "symbolName": "ArrayMapper", + "module": "@tsed/json-mapper", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "jsonmapper", + "component", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/components/DateMapper", + "symbolName": "DateMapper", + "module": "@tsed/json-mapper", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "jsonmapper", + "component", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/components/MapMapper", + "symbolName": "MapMapper", + "module": "@tsed/json-mapper", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "jsonmapper", + "component", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/components/CastError", + "symbolName": "CastError", + "module": "@tsed/json-mapper", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/components/PrimitiveMapper", + "symbolName": "PrimitiveMapper", + "module": "@tsed/json-mapper", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "jsonmapper", + "component", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/components/SetMapper", + "symbolName": "SetMapper", + "module": "@tsed/json-mapper", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "jsonmapper", + "component", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/components/SymbolMapper", + "symbolName": "SymbolMapper", + "module": "@tsed/json-mapper", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "jsonmapper", + "component", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/decorators/AfterDeserializeCallback", + "symbolName": "AfterDeserializeCallback", + "module": "@tsed/json-mapper", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/decorators/AfterDeserialize", + "symbolName": "AfterDeserialize", + "module": "@tsed/json-mapper", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "schema", + "property", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/decorators/BeforeDeserializeCallback", + "symbolName": "BeforeDeserializeCallback", + "module": "@tsed/json-mapper", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/decorators/BeforeDeserialize", + "symbolName": "BeforeDeserialize", + "module": "@tsed/json-mapper", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "schema", + "property", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/decorators/JsonMapper", + "symbolName": "JsonMapper", + "module": "@tsed/json-mapper", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "constructor", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/decorators/OnDeserializeCallback", + "symbolName": "OnDeserializeCallback", + "module": "@tsed/json-mapper", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/decorators/OnDeserialize", + "symbolName": "OnDeserialize", + "module": "@tsed/json-mapper", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "schema", + "property", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/decorators/OnSerializeCallback", + "symbolName": "OnSerializeCallback", + "module": "@tsed/json-mapper", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/decorators/OnSerialize", + "symbolName": "OnSerialize", + "module": "@tsed/json-mapper", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "schema", + "property", + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/domain/JsonMapperSettings", + "symbolName": "JsonMapperSettings", + "module": "@tsed/json-mapper", + "symbolType": "const", + "symbolLabel": "Constant", + "symbolCode": "K", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/interfaces/JsonMapperCtx", + "symbolName": "JsonMapperCtx", + "module": "@tsed/json-mapper", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/interfaces/JsonMapperNext", + "symbolName": "JsonMapperNext", + "module": "@tsed/json-mapper", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/json-mapper/types/interfaces/JsonMapperMethods", + "symbolName": "JsonMapperMethods", + "module": "@tsed/json-mapper", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/json-mapper" + }, + "@tsed/openspec": { + "symbols": [ + { + "path": "/api/specs/openspec/types/common/OpenSpecExternalDocs", + "symbolName": "OpenSpecExternalDocs", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecHash", + "symbolName": "OpenSpecHash", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecContact", + "symbolName": "OpenSpecContact", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecLicense", + "symbolName": "OpenSpecLicense", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecInfo", + "symbolName": "OpenSpecInfo", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecBaseJsonSchema", + "symbolName": "OpenSpecBaseJsonSchema", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecJsonSchema", + "symbolName": "OpenSpecJsonSchema", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecPath", + "symbolName": "OpenSpecPath", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecRef", + "symbolName": "OpenSpecRef", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecSecurity", + "symbolName": "OpenSpecSecurity", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecTag", + "symbolName": "OpenSpecTag", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecTypes", + "symbolName": "OpenSpecTypes", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OS2Versions", + "symbolName": "OS2Versions", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OS3Versions", + "symbolName": "OS3Versions", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecVersions", + "symbolName": "OpenSpecVersions", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/common/OpenSpecXML", + "symbolName": "OpenSpecXML", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2Header", + "symbolName": "OS2Header", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2Operation", + "symbolName": "OS2Operation", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2BaseParameter", + "symbolName": "OS2BaseParameter", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2BodyParameter", + "symbolName": "OS2BodyParameter", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2GenericFormat", + "symbolName": "OS2GenericFormat", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2IntegerFormat", + "symbolName": "OS2IntegerFormat", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2NumberFormat", + "symbolName": "OS2NumberFormat", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2StringFormat", + "symbolName": "OS2StringFormat", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2SchemaFormatConstraints", + "symbolName": "OS2SchemaFormatConstraints", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2BaseFormatContrainedParameter", + "symbolName": "OS2BaseFormatContrainedParameter", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/ParameterCollectionFormat", + "symbolName": "ParameterCollectionFormat", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2QueryParameter", + "symbolName": "OS2QueryParameter", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2PathParameter", + "symbolName": "OS2PathParameter", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2HeaderParameter", + "symbolName": "OS2HeaderParameter", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2FormDataParameter", + "symbolName": "OS2FormDataParameter", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2Parameter", + "symbolName": "OS2Parameter", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2Paths", + "symbolName": "OS2Paths", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2Response", + "symbolName": "OS2Response", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2XML", + "symbolName": "OS2XML", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2BaseSchema", + "symbolName": "OS2BaseSchema", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2Schema", + "symbolName": "OS2Schema", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2SecurityBase", + "symbolName": "OS2SecurityBase", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2SecurityBasic", + "symbolName": "OS2SecurityBasic", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2SecurityApiKey", + "symbolName": "OS2SecurityApiKey", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2SecurityOAuth", + "symbolName": "OS2SecurityOAuth", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2FlowImplicit", + "symbolName": "OS2FlowImplicit", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2FlowPassword", + "symbolName": "OS2FlowPassword", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2FlowApplication", + "symbolName": "OS2FlowApplication", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2FlowAccessCode", + "symbolName": "OS2FlowAccessCode", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OS2Security", + "symbolName": "OS2Security", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec2/OpenSpec2", + "symbolName": "OpenSpec2", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Callbacks", + "symbolName": "OS3Callbacks", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Components", + "symbolName": "OS3Components", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Encoding", + "symbolName": "OS3Encoding", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Example", + "symbolName": "OS3Example", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Flow", + "symbolName": "OS3Flow", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3FlowImplicit", + "symbolName": "OS3FlowImplicit", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3FlowPassword", + "symbolName": "OS3FlowPassword", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3FlowClientCredentials", + "symbolName": "OS3FlowClientCredentials", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3FlowAuthorizationCode", + "symbolName": "OS3FlowAuthorizationCode", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Flows", + "symbolName": "OS3Flows", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Header", + "symbolName": "OS3Header", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Link", + "symbolName": "OS3Link", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3MediaType", + "symbolName": "OS3MediaType", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Operation", + "symbolName": "OS3Operation", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3StyleParameter", + "symbolName": "OS3StyleParameter", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Parameter", + "symbolName": "OS3Parameter", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Paths", + "symbolName": "OS3Paths", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3RequestBody", + "symbolName": "OS3RequestBody", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Response", + "symbolName": "OS3Response", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3BaseSchema", + "symbolName": "OS3BaseSchema", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Schema", + "symbolName": "OS3Schema", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3SecurityBase", + "symbolName": "OS3SecurityBase", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3SecurityApiKey", + "symbolName": "OS3SecurityApiKey", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3SecurityOAuth2", + "symbolName": "OS3SecurityOAuth2", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3SecurityOpenIDConnect", + "symbolName": "OS3SecurityOpenIDConnect", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3SecurityHTTP", + "symbolName": "OS3SecurityHTTP", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Security", + "symbolName": "OS3Security", + "module": "@tsed/openspec", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OpenSpecServerVariable", + "symbolName": "OpenSpecServerVariable", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OS3Server", + "symbolName": "OS3Server", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/openspec/types/openspec3/OpenSpec3", + "symbolName": "OpenSpec3", + "module": "@tsed/openspec", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/openspec" + }, + "@tsed/swagger": { + "symbols": [ + { + "path": "/api/specs/swagger/types/decorators/Docs", + "symbolName": "Docs", + "module": "@tsed/swagger", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "stable" + ] + }, + { + "path": "/api/specs/swagger/types/decorators/Hidden", + "symbolName": "Hidden", + "module": "@tsed/swagger", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "swagger", + "stable" + ] + }, + { + "path": "/api/specs/swagger/types/interfaces/SwaggerUIOptions", + "symbolName": "SwaggerUIOptions", + "module": "@tsed/swagger", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/swagger/types/interfaces/SwaggerSettingsBase", + "symbolName": "SwaggerSettingsBase", + "module": "@tsed/swagger", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/swagger/types/interfaces/SwaggerOS2Settings", + "symbolName": "SwaggerOS2Settings", + "module": "@tsed/swagger", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/swagger/types/interfaces/SwaggerOS3Settings", + "symbolName": "SwaggerOS3Settings", + "module": "@tsed/swagger", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + }, + { + "path": "/api/specs/swagger/types/interfaces/SwaggerSettings", + "symbolName": "SwaggerSettings", + "module": "@tsed/swagger", + "symbolType": "type", + "symbolLabel": "Type alias", + "symbolCode": "T", + "status": [ + "private", + "stable" + ] + } + ], + "name": "@tsed/swagger" + }, + "@tsed/socketio-testing": { + "symbols": [ + { + "path": "/api/third-parties/socketio-testing/types/services/SocketClientService", + "symbolName": "SocketClientService", + "module": "@tsed/socketio-testing", + "symbolType": "class", + "symbolLabel": "Class", + "symbolCode": "C", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/socketio-testing" + }, + "@tsed/stripe": { + "symbols": [ + { + "path": "/api/third-parties/stripe/types/decorators/WebhookEvent", + "symbolName": "WebhookEvent", + "module": "@tsed/stripe", + "symbolType": "decorator", + "symbolLabel": "Decorator", + "symbolCode": "@", + "status": [ + "decorator", + "operation", + "input", + "stable" + ] + }, + { + "path": "/api/third-parties/stripe/types/domain/StripeSettings", + "symbolName": "StripeSettings", + "module": "@tsed/stripe", + "symbolType": "interface", + "symbolLabel": "Interface", + "symbolCode": "I", + "status": [ + "stable" + ] + } + ], + "name": "@tsed/stripe" + } + } +} \ No newline at end of file diff --git a/apollo-graphql-1.svg b/apollo-graphql-1.svg new file mode 100644 index 00000000000..cf89c15a362 --- /dev/null +++ b/apollo-graphql-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apollo-graphql-compact.svg b/apollo-graphql-compact.svg new file mode 100644 index 00000000000..955fff19442 --- /dev/null +++ b/apollo-graphql-compact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 00000000000..9176e2b8e5b Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/assets/css/0.styles.aaed514a.css b/assets/css/0.styles.aaed514a.css new file mode 100644 index 00000000000..687124295ed --- /dev/null +++ b/assets/css/0.styles.aaed514a.css @@ -0,0 +1,10 @@ +html{scroll-behavior:smooth}.medium-zoom-overlay{z-index:100}.medium-zoom-overlay~img{z-index:101}@font-face{font-family:boxicons;font-weight:400;font-style:normal;src:url(/assets/fonts/boxicons.afbad0fa.eot);src:url(/assets/fonts/boxicons.afbad0fa.eot) format("embedded-opentype"),url(data:font/woff2;base64,) format("woff2"),url(/assets/fonts/boxicons.deea39cb.woff) format("woff"),url(/assets/fonts/boxicons.f46ca69e.ttf) format("truetype"),url(/assets/img/boxicons.ac68c5be.svg?#boxicons) format("svg")}.bx{font-family:boxicons!important;font-weight:400;font-style:normal;font-variant:normal;line-height:1;display:inline-block;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bx-ul{margin-left:2em;padding-left:0;list-style:none}.bx-ul>li{position:relative}.bx-ul .bx{font-size:inherit;line-height:inherit;position:absolute;left:-2em;width:2em;text-align:center}@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}@-webkit-keyframes burst{0%{transform:scale(1);opacity:1}90%{transform:scale(1.5);opacity:0}}@keyframes burst{0%{transform:scale(1);opacity:1}90%{transform:scale(1.5);opacity:0}}@-webkit-keyframes flashing{0%{opacity:1}45%{opacity:0}90%{opacity:1}}@keyframes flashing{0%{opacity:1}45%{opacity:0}90%{opacity:1}}@-webkit-keyframes fade-left{0%{transform:translateX(0);opacity:1}75%{transform:translateX(-20px);opacity:0}}@keyframes fade-left{0%{transform:translateX(0);opacity:1}75%{transform:translateX(-20px);opacity:0}}@-webkit-keyframes fade-right{0%{transform:translateX(0);opacity:1}75%{transform:translateX(20px);opacity:0}}@keyframes fade-right{0%{transform:translateX(0);opacity:1}75%{transform:translateX(20px);opacity:0}}@-webkit-keyframes fade-up{0%{transform:translateY(0);opacity:1}75%{transform:translateY(-20px);opacity:0}}@keyframes fade-up{0%{transform:translateY(0);opacity:1}75%{transform:translateY(-20px);opacity:0}}@-webkit-keyframes fade-down{0%{transform:translateY(0);opacity:1}75%{transform:translateY(20px);opacity:0}}@keyframes fade-down{0%{transform:translateY(0);opacity:1}75%{transform:translateY(20px);opacity:0}}@-webkit-keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.95,.95,.95) rotate(-10deg)}30%,50%,70%,90%{transform:scaleX(1) rotate(10deg)}40%,60%,80%{transform:scaleX(1) rotate(-10deg)}to{transform:scaleX(1)}}@keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.95,.95,.95) rotate(-10deg)}30%,50%,70%,90%{transform:scaleX(1) rotate(10deg)}40%,60%,80%{transform:rotate(-10deg)}to{transform:scaleX(1)}}.bx-spin,.bx-spin-hover:hover{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.bx-tada,.bx-tada-hover:hover{-webkit-animation:tada 1.5s ease infinite;animation:tada 1.5s ease infinite}.bx-flashing,.bx-flashing-hover:hover{-webkit-animation:flashing 1.5s linear infinite;animation:flashing 1.5s linear infinite}.bx-burst,.bx-burst-hover:hover{-webkit-animation:burst 1.5s linear infinite;animation:burst 1.5s linear infinite}.bx-fade-up,.bx-fade-up-hover:hover{-webkit-animation:fade-up 1.5s linear infinite;animation:fade-up 1.5s linear infinite}.bx-fade-down,.bx-fade-down-hover:hover{-webkit-animation:fade-down 1.5s linear infinite;animation:fade-down 1.5s linear infinite}.bx-fade-left,.bx-fade-left-hover:hover{-webkit-animation:fade-left 1.5s linear infinite;animation:fade-left 1.5s linear infinite}.bx-fade-right,.bx-fade-right-hover:hover{-webkit-animation:fade-right 1.5s linear infinite;animation:fade-right 1.5s linear infinite}.bx-xs{font-size:1rem!important}.bx-sm{font-size:1.55rem!important}.bx-md{font-size:2.25rem!important}.bx-fw{font-size:1.2857142857em;line-height:.8em;width:1.2857142857em;height:.8em;margin-top:-.2em!important;vertical-align:middle}.bx-lg{font-size:3!important}.bx-pull-left{float:left;margin-right:.3em!important}.bx-pull-right{float:right;margin-left:.3em!important}.bx-rotate-90{transform:rotate(90deg);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"}.bx-rotate-180{transform:rotate(180deg);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"}.bx-rotate-270{transform:rotate(270deg);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"}.bx-flip-horizontal{transform:scaleX(-1);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1)"}.bx-flip-vertical{transform:scaleY(-1);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1)"}.bx-border{padding:.25em;border:.07em solid rgba(0,0,0,.1);border-radius:.25em}.bx-border-circle{padding:.25em;border:.07em solid rgba(0,0,0,.1);border-radius:50%}.bxl-adobe:before{content:"\e900"}.bxl-algolia:before{content:"\e901"}.bxl-audible:before{content:"\e902"}.bxl-figma:before{content:"\e903"}.bxl-redbubble:before{content:"\e904"}.bxl-etsy:before{content:"\e905"}.bxl-gitlab:before{content:"\e906"}.bxl-patreon:before{content:"\e907"}.bxl-facebook-circle:before{content:"\e908"}.bxl-imdb:before{content:"\e909"}.bxl-jquery:before{content:"\e90a"}.bxl-pinterest-alt:before{content:"\e90b"}.bxl-500px:before{content:"\e90c"}.bxl-airbnb:before{content:"\e90d"}.bxl-amazon:before{content:"\e90e"}.bxl-android:before{content:"\e90f"}.bxl-angular:before{content:"\e910"}.bxl-apple:before{content:"\e911"}.bxl-baidu:before{content:"\e912"}.bxl-behance:before{content:"\e913"}.bxl-bing:before{content:"\e914"}.bxl-bitcoin:before{content:"\e915"}.bxl-blogger:before{content:"\e916"}.bxl-bootstrap:before{content:"\e917"}.bxl-chrome:before{content:"\e918"}.bxl-codepen:before{content:"\e919"}.bxl-creative-commons:before{content:"\e91a"}.bxl-css3:before{content:"\e91b"}.bxl-dailymotion:before{content:"\e91c"}.bxl-deviantart:before{content:"\e91d"}.bxl-digg:before{content:"\e91e"}.bxl-digitalocean:before{content:"\e91f"}.bxl-discord:before{content:"\e920"}.bxl-discourse:before{content:"\e921"}.bxl-dribbble:before{content:"\e922"}.bxl-dropbox:before{content:"\e923"}.bxl-drupal:before{content:"\e924"}.bxl-ebay:before{content:"\e925"}.bxl-edge:before{content:"\e926"}.bxl-facebook:before{content:"\e927"}.bxl-facebook-square:before{content:"\e928"}.bxl-firefox:before{content:"\e929"}.bxl-flickr:before{content:"\e92a"}.bxl-flickr-square:before{content:"\e92b"}.bxl-foursquare:before{content:"\e92c"}.bxl-git:before{content:"\e92d"}.bxl-github:before{content:"\e92e"}.bxl-google:before{content:"\e92f"}.bxl-google-plus:before{content:"\e930"}.bxl-google-plus-circle:before{content:"\e931"}.bxl-html5:before{content:"\e932"}.bxl-instagram:before{content:"\e933"}.bxl-instagram-alt:before{content:"\e934"}.bxl-internet-explorer:before{content:"\e935"}.bxl-invision:before{content:"\e936"}.bxl-javascript:before{content:"\e937"}.bxl-joomla:before{content:"\e938"}.bxl-jsfiddle:before{content:"\e939"}.bxl-kickstarter:before{content:"\e93a"}.bxl-less:before{content:"\e93b"}.bxl-linkedin:before{content:"\e93c"}.bxl-linkedin-square:before{content:"\e93d"}.bxl-magento:before{content:"\e93e"}.bxl-mailchimp:before{content:"\e93f"}.bxl-mastercard:before{content:"\e940"}.bxl-medium:before{content:"\e941"}.bxl-medium-old:before{content:"\e942"}.bxl-medium-square:before{content:"\e943"}.bxl-messenger:before{content:"\e944"}.bxl-microsoft:before{content:"\e945"}.bxl-nodejs:before{content:"\e946"}.bxl-opera:before{content:"\e947"}.bxl-paypal:before{content:"\e948"}.bxl-periscope:before{content:"\e949"}.bxl-pinterest:before{content:"\e94a"}.bxl-play-store:before{content:"\e94b"}.bxl-pocket:before{content:"\e94c"}.bxl-product-hunt:before{content:"\e94d"}.bxl-quora:before{content:"\e94e"}.bxl-react:before{content:"\e94f"}.bxl-reddit:before{content:"\e950"}.bxl-redux:before{content:"\e951"}.bxl-sass:before{content:"\e952"}.bxl-shopify:before{content:"\e953"}.bxl-skype:before{content:"\e954"}.bxl-slack:before{content:"\e955"}.bxl-slack-old:before{content:"\e956"}.bxl-snapchat:before{content:"\e957"}.bxl-soundcloud:before{content:"\e958"}.bxl-spotify:before{content:"\e959"}.bxl-squarespace:before{content:"\e95a"}.bxl-stack-overflow:before{content:"\e95b"}.bxl-stripe:before{content:"\e95c"}.bxl-telegram:before{content:"\e95d"}.bxl-trello:before{content:"\e95e"}.bxl-tumblr:before{content:"\e95f"}.bxl-twitch:before{content:"\e960"}.bxl-twitter:before{content:"\e961"}.bxl-unsplash:before{content:"\e962"}.bxl-vimeo:before{content:"\e963"}.bxl-visa:before{content:"\e964"}.bxl-vk:before{content:"\e965"}.bxl-vuejs:before{content:"\e966"}.bxl-whatsapp:before{content:"\e967"}.bxl-whatsapp-square:before{content:"\e968"}.bxl-wikipedia:before{content:"\e969"}.bxl-windows:before{content:"\e96a"}.bxl-wix:before{content:"\e96b"}.bxl-wordpress:before{content:"\e96c"}.bxl-yahoo:before{content:"\e96d"}.bxl-yelp:before{content:"\e96e"}.bxl-youtube:before{content:"\e96f"}.bx-accessibility:before{content:"\e970"}.bx-add-to-queue:before{content:"\e971"}.bx-adjust:before{content:"\e972"}.bx-alarm:before{content:"\e973"}.bx-alarm-add:before{content:"\e974"}.bx-alarm-off:before{content:"\e975"}.bx-album:before{content:"\e976"}.bx-align-justify:before{content:"\e977"}.bx-align-left:before{content:"\e978"}.bx-align-middle:before{content:"\e979"}.bx-align-right:before{content:"\e97a"}.bx-analyse:before{content:"\e97b"}.bx-anchor:before{content:"\e97c"}.bx-angry:before{content:"\e97d"}.bx-aperture:before{content:"\e97e"}.bx-archive:before{content:"\e97f"}.bx-archive-in:before{content:"\e980"}.bx-archive-out:before{content:"\e981"}.bx-area:before{content:"\e982"}.bx-arrow-back:before{content:"\e983"}.bx-at:before{content:"\e984"}.bx-award:before{content:"\e985"}.bx-badge:before{content:"\e986"}.bx-badge-check:before{content:"\e987"}.bx-ball:before{content:"\e988"}.bx-band-aid:before{content:"\e989"}.bx-bar-chart:before{content:"\e98a"}.bx-bar-chart-alt:before{content:"\e98b"}.bx-bar-chart-alt-2:before{content:"\e98c"}.bx-bar-chart-square:before{content:"\e98d"}.bx-barcode:before{content:"\e98e"}.bx-basket:before{content:"\e98f"}.bx-basketball:before{content:"\e990"}.bx-bath:before{content:"\e991"}.bx-battery:before{content:"\e992"}.bx-bed:before{content:"\e993"}.bx-bell:before{content:"\e994"}.bx-bell-minus:before{content:"\e995"}.bx-bell-off:before{content:"\e996"}.bx-bell-plus:before{content:"\e997"}.bx-bitcoin:before{content:"\e998"}.bx-block:before{content:"\e999"}.bx-bluetooth:before{content:"\e99a"}.bx-body:before{content:"\e99b"}.bx-bold:before{content:"\e99c"}.bx-bolt-circle:before{content:"\e99d"}.bx-book:before{content:"\e99e"}.bx-book-bookmark:before{content:"\e99f"}.bx-book-content:before{content:"\e9a0"}.bx-bookmark:before{content:"\e9a1"}.bx-bookmark-minus:before{content:"\e9a2"}.bx-bookmark-plus:before{content:"\e9a3"}.bx-bookmarks:before{content:"\e9a4"}.bx-book-open:before{content:"\e9a5"}.bx-border-all:before{content:"\e9a6"}.bx-border-bottom:before{content:"\e9a7"}.bx-border-left:before{content:"\e9a8"}.bx-border-radius:before{content:"\e9a9"}.bx-border-right:before{content:"\e9aa"}.bx-border-top:before{content:"\e9ab"}.bx-bot:before{content:"\e9ac"}.bx-bowling-ball:before{content:"\e9ad"}.bx-box:before{content:"\e9ae"}.bx-briefcase:before{content:"\e9af"}.bx-briefcase-alt:before{content:"\e9b0"}.bx-briefcase-alt-2:before{content:"\e9b1"}.bx-brightness:before{content:"\e9b2"}.bx-brightness-half:before{content:"\e9b3"}.bx-broadcast:before{content:"\e9b4"}.bx-brush:before{content:"\e9b5"}.bx-brush-alt:before{content:"\e9b6"}.bx-bug:before{content:"\e9b7"}.bx-bug-alt:before{content:"\e9b8"}.bx-building:before{content:"\e9b9"}.bx-building-house:before{content:"\e9ba"}.bx-buildings:before{content:"\e9bb"}.bx-bulb:before{content:"\e9bc"}.bx-bullseye:before{content:"\e9bd"}.bx-buoy:before{content:"\e9be"}.bx-bus:before{content:"\e9bf"}.bx-cake:before{content:"\e9c0"}.bx-calculator:before{content:"\e9c1"}.bx-calendar:before{content:"\e9c2"}.bx-calendar-alt:before{content:"\e9c3"}.bx-calendar-check:before{content:"\e9c4"}.bx-calendar-event:before{content:"\e9c5"}.bx-calendar-minus:before{content:"\e9c6"}.bx-calendar-plus:before{content:"\e9c7"}.bx-calendar-x:before{content:"\e9c8"}.bx-camera:before{content:"\e9c9"}.bx-camera-off:before{content:"\e9ca"}.bx-captions:before{content:"\e9cb"}.bx-car:before{content:"\e9cc"}.bx-card:before{content:"\e9cd"}.bx-caret-down:before{content:"\e9ce"}.bx-caret-left:before{content:"\e9cf"}.bx-caret-right:before{content:"\e9d0"}.bx-caret-up:before{content:"\e9d1"}.bx-carousel:before{content:"\e9d2"}.bx-cart:before{content:"\e9d3"}.bx-cart-alt:before{content:"\e9d4"}.bx-cast:before{content:"\e9d5"}.bx-certification:before{content:"\e9d6"}.bx-chalkboard:before{content:"\e9d7"}.bx-chart:before{content:"\e9d8"}.bx-chat:before{content:"\e9d9"}.bx-check:before{content:"\e9da"}.bx-checkbox:before{content:"\e9db"}.bx-checkbox-checked:before{content:"\e9dc"}.bx-checkbox-square:before{content:"\e9dd"}.bx-check-circle:before{content:"\e9de"}.bx-check-double:before{content:"\e9df"}.bx-check-shield:before{content:"\e9e0"}.bx-check-square:before{content:"\e9e1"}.bx-chevron-down:before{content:"\e9e2"}.bx-chevron-left:before{content:"\e9e3"}.bx-chevron-right:before{content:"\e9e4"}.bx-chevrons-down:before{content:"\e9e5"}.bx-chevrons-left:before{content:"\e9e6"}.bx-chevrons-right:before{content:"\e9e7"}.bx-chevrons-up:before{content:"\e9e8"}.bx-chevron-up:before{content:"\e9e9"}.bx-chip:before{content:"\e9ea"}.bx-circle:before{content:"\e9eb"}.bx-clinic:before{content:"\e9ec"}.bx-clipboard:before{content:"\e9ed"}.bx-closet:before{content:"\e9ee"}.bx-cloud:before{content:"\e9ef"}.bx-cloud-download:before{content:"\e9f0"}.bx-cloud-drizzle:before{content:"\e9f1"}.bx-cloud-lightning:before{content:"\e9f2"}.bx-cloud-light-rain:before{content:"\e9f3"}.bx-cloud-rain:before{content:"\e9f4"}.bx-cloud-snow:before{content:"\e9f5"}.bx-cloud-upload:before{content:"\e9f6"}.bx-code:before{content:"\e9f7"}.bx-code-alt:before{content:"\e9f8"}.bx-code-block:before{content:"\e9f9"}.bx-code-curly:before{content:"\e9fa"}.bx-coffee:before{content:"\e9fb"}.bx-cog:before{content:"\e9fc"}.bx-collapse:before{content:"\e9fd"}.bx-collection:before{content:"\e9fe"}.bx-columns:before{content:"\e9ff"}.bx-command:before{content:"\ea00"}.bx-comment:before{content:"\ea01"}.bx-comment-dots:before{content:"\ea02"}.bx-compass:before{content:"\ea03"}.bx-confused:before{content:"\ea04"}.bx-conversation:before{content:"\ea05"}.bx-cool:before{content:"\ea06"}.bx-copy:before{content:"\ea07"}.bx-copy-alt:before{content:"\ea08"}.bx-copyright:before{content:"\ea09"}.bx-credit-card:before{content:"\ea0a"}.bx-credit-card-alt:before{content:"\ea0b"}.bx-crop:before{content:"\ea0c"}.bx-crosshair:before{content:"\ea0d"}.bx-crown:before{content:"\ea0e"}.bx-cube:before{content:"\ea0f"}.bx-cube-alt:before{content:"\ea10"}.bx-cuboid:before{content:"\ea11"}.bx-customize:before{content:"\ea12"}.bx-cut:before{content:"\ea13"}.bx-cycling:before{content:"\ea14"}.bx-cylinder:before{content:"\ea15"}.bx-data:before{content:"\ea16"}.bx-desktop:before{content:"\ea17"}.bx-detail:before{content:"\ea18"}.bx-devices:before{content:"\ea19"}.bx-dialpad:before{content:"\ea1a"}.bx-dialpad-alt:before{content:"\ea1b"}.bx-diamond:before{content:"\ea1c"}.bx-directions:before{content:"\ea1d"}.bx-disc:before{content:"\ea1e"}.bx-dish:before{content:"\ea1f"}.bx-dislike:before{content:"\ea20"}.bx-dizzy:before{content:"\ea21"}.bx-dna:before{content:"\ea22"}.bx-dock-bottom:before{content:"\ea23"}.bx-dock-left:before{content:"\ea24"}.bx-dock-right:before{content:"\ea25"}.bx-dock-top:before{content:"\ea26"}.bx-dollar:before{content:"\ea27"}.bx-dollar-circle:before{content:"\ea28"}.bx-dots-horizontal:before{content:"\ea29"}.bx-dots-horizontal-rounded:before{content:"\ea2a"}.bx-dots-vertical:before{content:"\ea2b"}.bx-dots-vertical-rounded:before{content:"\ea2c"}.bx-doughnut-chart:before{content:"\ea2d"}.bx-down-arrow:before{content:"\ea2e"}.bx-down-arrow-alt:before{content:"\ea2f"}.bx-down-arrow-circle:before{content:"\ea30"}.bx-download:before{content:"\ea31"}.bx-downvote:before{content:"\ea32"}.bx-droplet:before{content:"\ea33"}.bx-dumbbell:before{content:"\ea34"}.bx-duplicate:before{content:"\ea35"}.bx-edit:before{content:"\ea36"}.bx-edit-alt:before{content:"\ea37"}.bx-envelope:before{content:"\ea38"}.bx-equalizer:before{content:"\ea39"}.bx-error:before{content:"\ea3a"}.bx-error-alt:before{content:"\ea3b"}.bx-error-circle:before{content:"\ea3c"}.bx-euro:before{content:"\ea3d"}.bx-exit:before{content:"\ea3e"}.bx-exit-fullscreen:before{content:"\ea3f"}.bx-expand:before{content:"\ea40"}.bx-export:before{content:"\ea41"}.bx-extension:before{content:"\ea42"}.bx-face:before{content:"\ea43"}.bx-fast-forward:before{content:"\ea44"}.bx-fast-forward-circle:before{content:"\ea45"}.bx-female:before{content:"\ea46"}.bx-female-sign:before{content:"\ea47"}.bx-file:before{content:"\ea48"}.bx-file-blank:before{content:"\ea49"}.bx-file-find:before{content:"\ea4a"}.bx-film:before{content:"\ea4b"}.bx-filter:before{content:"\ea4c"}.bx-filter-alt:before{content:"\ea4d"}.bx-fingerprint:before{content:"\ea4e"}.bx-first-aid:before{content:"\ea4f"}.bx-first-page:before{content:"\ea50"}.bx-flag:before{content:"\ea51"}.bx-folder:before{content:"\ea52"}.bx-folder-minus:before{content:"\ea53"}.bx-folder-open:before{content:"\ea54"}.bx-folder-plus:before{content:"\ea55"}.bx-font:before{content:"\ea56"}.bx-font-color:before{content:"\ea57"}.bx-font-family:before{content:"\ea58"}.bx-font-size:before{content:"\ea59"}.bx-food-menu:before{content:"\ea5a"}.bx-food-tag:before{content:"\ea5b"}.bx-football:before{content:"\ea5c"}.bx-fridge:before{content:"\ea5d"}.bx-fullscreen:before{content:"\ea5e"}.bx-gas-pump:before{content:"\ea5f"}.bx-ghost:before{content:"\ea60"}.bx-gift:before{content:"\ea61"}.bx-git-branch:before{content:"\ea62"}.bx-git-commit:before{content:"\ea63"}.bx-git-compare:before{content:"\ea64"}.bx-git-merge:before{content:"\ea65"}.bx-git-pull-request:before{content:"\ea66"}.bx-git-repo-forked:before{content:"\ea67"}.bx-globe:before{content:"\ea68"}.bx-globe-alt:before{content:"\ea69"}.bx-grid:before{content:"\ea6a"}.bx-grid-alt:before{content:"\ea6b"}.bx-grid-horizontal:before{content:"\ea6c"}.bx-grid-small:before{content:"\ea6d"}.bx-grid-vertical:before{content:"\ea6e"}.bx-group:before{content:"\ea6f"}.bx-handicap:before{content:"\ea70"}.bx-happy:before{content:"\ea71"}.bx-happy-alt:before{content:"\ea72"}.bx-happy-beaming:before{content:"\ea73"}.bx-happy-heart-eyes:before{content:"\ea74"}.bx-hash:before{content:"\ea75"}.bx-hdd:before{content:"\ea76"}.bx-heading:before{content:"\ea77"}.bx-headphone:before{content:"\ea78"}.bx-health:before{content:"\ea79"}.bx-heart:before{content:"\ea7a"}.bx-help-circle:before{content:"\ea7b"}.bx-hide:before{content:"\ea7c"}.bx-highlight:before{content:"\ea7d"}.bx-history:before{content:"\ea7e"}.bx-hive:before{content:"\ea7f"}.bx-home:before{content:"\ea80"}.bx-home-alt:before{content:"\ea81"}.bx-home-circle:before{content:"\ea82"}.bx-horizontal-center:before{content:"\ea83"}.bx-hotel:before{content:"\ea84"}.bx-hourglass:before{content:"\ea85"}.bx-id-card:before{content:"\ea86"}.bx-image:before{content:"\ea87"}.bx-image-add:before{content:"\ea88"}.bx-image-alt:before{content:"\ea89"}.bx-images:before{content:"\ea8a"}.bx-import:before{content:"\ea8b"}.bx-infinite:before{content:"\ea8c"}.bx-info-circle:before{content:"\ea8d"}.bx-italic:before{content:"\ea8e"}.bx-joystick:before{content:"\ea8f"}.bx-joystick-alt:before{content:"\ea90"}.bx-joystick-button:before{content:"\ea91"}.bx-key:before{content:"\ea92"}.bx-label:before{content:"\ea93"}.bx-landscape:before{content:"\ea94"}.bx-laptop:before{content:"\ea95"}.bx-last-page:before{content:"\ea96"}.bx-laugh:before{content:"\ea97"}.bx-layer:before{content:"\ea98"}.bx-layout:before{content:"\ea99"}.bx-left-arrow:before{content:"\ea9a"}.bx-left-arrow-alt:before{content:"\ea9b"}.bx-left-arrow-circle:before{content:"\ea9c"}.bx-left-down-arrow-circle:before{content:"\ea9d"}.bx-left-indent:before{content:"\ea9e"}.bx-left-top-arrow-circle:before{content:"\ea9f"}.bx-like:before{content:"\eaa0"}.bx-line-chart:before{content:"\eaa1"}.bx-link:before{content:"\eaa2"}.bx-link-alt:before{content:"\eaa3"}.bx-link-external:before{content:"\eaa4"}.bx-lira:before{content:"\eaa5"}.bx-list-check:before{content:"\eaa6"}.bx-list-minus:before{content:"\eaa7"}.bx-list-ol:before{content:"\eaa8"}.bx-list-plus:before{content:"\eaa9"}.bx-list-ul:before{content:"\eaaa"}.bx-loader:before{content:"\eaab"}.bx-loader-alt:before{content:"\eaac"}.bx-loader-circle:before{content:"\eaad"}.bx-lock:before{content:"\eaae"}.bx-lock-alt:before{content:"\eaaf"}.bx-lock-open:before{content:"\eab0"}.bx-lock-open-alt:before{content:"\eab1"}.bx-log-in:before{content:"\eab2"}.bx-log-in-circle:before{content:"\eab3"}.bx-log-out:before{content:"\eab4"}.bx-log-out-circle:before{content:"\eab5"}.bx-magnet:before{content:"\eab6"}.bx-mail-send:before{content:"\eab7"}.bx-male:before{content:"\eab8"}.bx-male-sign:before{content:"\eab9"}.bx-map:before{content:"\eaba"}.bx-map-alt:before{content:"\eabb"}.bx-map-pin:before{content:"\eabc"}.bx-meh:before{content:"\eabd"}.bx-meh-alt:before{content:"\eabe"}.bx-meh-blank:before{content:"\eabf"}.bx-memory-card:before{content:"\eac0"}.bx-menu:before{content:"\eac1"}.bx-menu-alt-left:before{content:"\eac2"}.bx-menu-alt-right:before{content:"\eac3"}.bx-message:before{content:"\eac4"}.bx-message-alt:before{content:"\eac5"}.bx-message-alt-dots:before{content:"\eac6"}.bx-message-dots:before{content:"\eac7"}.bx-message-rounded:before{content:"\eac8"}.bx-message-rounded-dots:before{content:"\eac9"}.bx-message-square:before{content:"\eaca"}.bx-message-square-dots:before{content:"\eacb"}.bx-microphone:before{content:"\eacc"}.bx-microphone-off:before{content:"\eacd"}.bx-minus:before{content:"\eace"}.bx-minus-circle:before{content:"\eacf"}.bx-mobile:before{content:"\ead0"}.bx-mobile-alt:before{content:"\ead1"}.bx-mobile-landscape:before{content:"\ead2"}.bx-mobile-vibration:before{content:"\ead3"}.bx-money:before{content:"\ead4"}.bx-moon:before{content:"\ead5"}.bx-mouse:before{content:"\ead6"}.bx-mouse-alt:before{content:"\ead7"}.bx-move:before{content:"\ead8"}.bx-move-horizontal:before{content:"\ead9"}.bx-move-vertical:before{content:"\eada"}.bx-movie:before{content:"\eadb"}.bx-music:before{content:"\eadc"}.bx-navigation:before{content:"\eadd"}.bx-news:before{content:"\eade"}.bx-no-entry:before{content:"\eadf"}.bx-note:before{content:"\eae0"}.bx-notepad:before{content:"\eae1"}.bx-notification:before{content:"\eae2"}.bx-notification-off:before{content:"\eae3"}.bx-package:before{content:"\eae4"}.bx-paint:before{content:"\eae5"}.bx-paint-roll:before{content:"\eae6"}.bx-palette:before{content:"\eae7"}.bx-paperclip:before{content:"\eae8"}.bx-paper-plane:before{content:"\eae9"}.bx-paragraph:before{content:"\eaea"}.bx-paste:before{content:"\eaeb"}.bx-pause:before{content:"\eaec"}.bx-pause-circle:before{content:"\eaed"}.bx-pen:before{content:"\eaee"}.bx-pencil:before{content:"\eaef"}.bx-phone:before{content:"\eaf0"}.bx-phone-call:before{content:"\eaf1"}.bx-phone-incoming:before{content:"\eaf2"}.bx-phone-outgoing:before{content:"\eaf3"}.bx-photo-album:before{content:"\eaf4"}.bx-pie-chart:before{content:"\eaf5"}.bx-pie-chart-alt:before{content:"\eaf6"}.bx-pie-chart-alt-2:before{content:"\eaf7"}.bx-pin:before{content:"\eaf8"}.bx-planet:before{content:"\eaf9"}.bx-play:before{content:"\eafa"}.bx-play-circle:before{content:"\eafb"}.bx-plug:before{content:"\eafc"}.bx-plus:before{content:"\eafd"}.bx-plus-circle:before{content:"\eafe"}.bx-plus-medical:before{content:"\eaff"}.bx-poll:before{content:"\eb00"}.bx-polygon:before{content:"\eb01"}.bx-pound:before{content:"\eb02"}.bx-power-off:before{content:"\eb03"}.bx-printer:before{content:"\eb04"}.bx-pulse:before{content:"\eb05"}.bx-purchase-tag:before{content:"\eb06"}.bx-purchase-tag-alt:before{content:"\eb07"}.bx-pyramid:before{content:"\eb08"}.bx-question-mark:before{content:"\eb09"}.bx-radar:before{content:"\eb0a"}.bx-radio:before{content:"\eb0b"}.bx-radio-circle:before{content:"\eb0c"}.bx-radio-circle-marked:before{content:"\eb0d"}.bx-receipt:before{content:"\eb0e"}.bx-rectangle:before{content:"\eb0f"}.bx-redo:before{content:"\eb10"}.bx-rename:before{content:"\eb11"}.bx-repeat:before{content:"\eb12"}.bx-reply:before{content:"\eb13"}.bx-reply-all:before{content:"\eb14"}.bx-repost:before{content:"\eb15"}.bx-reset:before{content:"\eb16"}.bx-restaurant:before{content:"\eb17"}.bx-revision:before{content:"\eb18"}.bx-rewind:before{content:"\eb19"}.bx-rewind-circle:before{content:"\eb1a"}.bx-right-arrow:before{content:"\eb1b"}.bx-right-arrow-alt:before{content:"\eb1c"}.bx-right-arrow-circle:before{content:"\eb1d"}.bx-right-down-arrow-circle:before{content:"\eb1e"}.bx-right-indent:before{content:"\eb1f"}.bx-right-top-arrow-circle:before{content:"\eb20"}.bx-rocket:before{content:"\eb21"}.bx-rotate-left:before{content:"\eb22"}.bx-rotate-right:before{content:"\eb23"}.bx-rss:before{content:"\eb24"}.bx-ruble:before{content:"\eb25"}.bx-ruler:before{content:"\eb26"}.bx-run:before{content:"\eb27"}.bx-rupee:before{content:"\eb28"}.bx-sad:before{content:"\eb29"}.bx-save:before{content:"\eb2a"}.bx-screenshot:before{content:"\eb2b"}.bx-search:before{content:"\eb2c"}.bx-search-alt:before{content:"\eb2d"}.bx-search-alt-2:before{content:"\eb2e"}.bx-selection:before{content:"\eb2f"}.bx-select-multiple:before{content:"\eb30"}.bx-send:before{content:"\eb31"}.bx-server:before{content:"\eb32"}.bx-shape-circle:before{content:"\eb33"}.bx-shape-square:before{content:"\eb34"}.bx-shape-triangle:before{content:"\eb35"}.bx-share:before{content:"\eb36"}.bx-share-alt:before{content:"\eb37"}.bx-shekel:before{content:"\eb38"}.bx-shield:before{content:"\eb39"}.bx-shield-alt:before{content:"\eb3a"}.bx-shield-alt-2:before{content:"\eb3b"}.bx-shield-quarter:before{content:"\eb3c"}.bx-shocked:before{content:"\eb3d"}.bx-shopping-bag:before{content:"\eb3e"}.bx-show:before{content:"\eb3f"}.bx-show-alt:before{content:"\eb40"}.bx-shuffle:before{content:"\eb41"}.bx-sidebar:before{content:"\eb42"}.bx-sitemap:before{content:"\eb43"}.bx-skip-next:before{content:"\eb44"}.bx-skip-next-circle:before{content:"\eb45"}.bx-skip-previous:before{content:"\eb46"}.bx-skip-previous-circle:before{content:"\eb47"}.bx-sleepy:before{content:"\eb48"}.bx-slider:before{content:"\eb49"}.bx-slider-alt:before{content:"\eb4a"}.bx-slideshow:before{content:"\eb4b"}.bx-smile:before{content:"\eb4c"}.bx-sort:before{content:"\eb4d"}.bx-sort-a-z:before{content:"\eb4e"}.bx-sort-down:before{content:"\eb4f"}.bx-sort-up:before{content:"\eb50"}.bx-sort-z-a:before{content:"\eb51"}.bx-spa:before{content:"\eb52"}.bx-space-bar:before{content:"\eb53"}.bx-spreadsheet:before{content:"\eb54"}.bx-square:before{content:"\eb55"}.bx-square-rounded:before{content:"\eb56"}.bx-star:before{content:"\eb57"}.bx-station:before{content:"\eb58"}.bx-stats:before{content:"\eb59"}.bx-sticker:before{content:"\eb5a"}.bx-stop:before{content:"\eb5b"}.bx-stop-circle:before{content:"\eb5c"}.bx-stopwatch:before{content:"\eb5d"}.bx-store:before{content:"\eb5e"}.bx-store-alt:before{content:"\eb5f"}.bx-street-view:before{content:"\eb60"}.bx-strikethrough:before{content:"\eb61"}.bx-subdirectory-left:before{content:"\eb62"}.bx-subdirectory-right:before{content:"\eb63"}.bx-sun:before{content:"\eb64"}.bx-support:before{content:"\eb65"}.bx-swim:before{content:"\eb66"}.bx-sync:before{content:"\eb67"}.bx-tab:before{content:"\eb68"}.bx-table:before{content:"\eb69"}.bx-tag:before{content:"\eb6a"}.bx-target-lock:before{content:"\eb6b"}.bx-task:before{content:"\eb6c"}.bx-taxi:before{content:"\eb6d"}.bx-tennis-ball:before{content:"\eb6e"}.bx-terminal:before{content:"\eb6f"}.bx-test-tube:before{content:"\eb70"}.bx-text:before{content:"\eb71"}.bx-time:before{content:"\eb72"}.bx-time-five:before{content:"\eb73"}.bx-timer:before{content:"\eb74"}.bx-tired:before{content:"\eb75"}.bx-toggle-left:before{content:"\eb76"}.bx-toggle-right:before{content:"\eb77"}.bx-tone:before{content:"\eb78"}.bx-train:before{content:"\eb79"}.bx-transfer:before{content:"\eb7a"}.bx-transfer-alt:before{content:"\eb7b"}.bx-trash:before{content:"\eb7c"}.bx-trash-alt:before{content:"\eb7d"}.bx-trending-down:before{content:"\eb7e"}.bx-trending-up:before{content:"\eb7f"}.bx-trophy:before{content:"\eb80"}.bx-tv:before{content:"\eb81"}.bx-underline:before{content:"\eb82"}.bx-undo:before{content:"\eb83"}.bx-unlink:before{content:"\eb84"}.bx-up-arrow:before{content:"\eb85"}.bx-up-arrow-alt:before{content:"\eb86"}.bx-up-arrow-circle:before{content:"\eb87"}.bx-upload:before{content:"\eb88"}.bx-upside-down:before{content:"\eb89"}.bx-upvote:before{content:"\eb8a"}.bx-usb:before{content:"\eb8b"}.bx-user:before{content:"\eb8c"}.bx-user-check:before{content:"\eb8d"}.bx-user-circle:before{content:"\eb8e"}.bx-user-minus:before{content:"\eb8f"}.bx-user-pin:before{content:"\eb90"}.bx-user-plus:before{content:"\eb91"}.bx-user-voice:before{content:"\eb92"}.bx-user-x:before{content:"\eb93"}.bx-vertical-center:before{content:"\eb94"}.bx-video:before{content:"\eb95"}.bx-video-off:before{content:"\eb96"}.bx-video-plus:before{content:"\eb97"}.bx-video-recording:before{content:"\eb98"}.bx-voicemail:before{content:"\eb99"}.bx-volume:before{content:"\eb9a"}.bx-volume-full:before{content:"\eb9b"}.bx-volume-low:before{content:"\eb9c"}.bx-volume-mute:before{content:"\eb9d"}.bx-walk:before{content:"\eb9e"}.bx-wallet:before{content:"\eb9f"}.bx-wallet-alt:before{content:"\eba0"}.bx-water:before{content:"\eba1"}.bx-wifi:before{content:"\eba2"}.bx-wifi-off:before{content:"\eba3"}.bx-wind:before{content:"\eba4"}.bx-window:before{content:"\eba5"}.bx-window-close:before{content:"\eba6"}.bx-window-open:before{content:"\eba7"}.bx-windows:before{content:"\eba8"}.bx-wink-smile:before{content:"\eba9"}.bx-wink-tongue:before{content:"\ebaa"}.bx-won:before{content:"\ebab"}.bx-world:before{content:"\ebac"}.bx-wrench:before{content:"\ebad"}.bx-x:before{content:"\ebae"}.bx-x-circle:before{content:"\ebaf"}.bx-yen:before{content:"\ebb0"}.bx-zoom-in:before{content:"\ebb1"}.bx-zoom-out:before{content:"\ebb2"}.bxs-add-to-queue:before{content:"\ebb3"}.bxs-adjust:before{content:"\ebb4"}.bxs-adjust-alt:before{content:"\ebb5"}.bxs-alarm:before{content:"\ebb6"}.bxs-alarm-add:before{content:"\ebb7"}.bxs-alarm-off:before{content:"\ebb8"}.bxs-album:before{content:"\ebb9"}.bxs-ambulance:before{content:"\ebba"}.bxs-analyse:before{content:"\ebbb"}.bxs-angry:before{content:"\ebbc"}.bxs-archive:before{content:"\ebbd"}.bxs-archive-in:before{content:"\ebbe"}.bxs-archive-out:before{content:"\ebbf"}.bxs-area:before{content:"\ebc0"}.bxs-award:before{content:"\ebc1"}.bxs-baby-carriage:before{content:"\ebc2"}.bxs-badge:before{content:"\ebc3"}.bxs-badge-check:before{content:"\ebc4"}.bxs-ball:before{content:"\ebc5"}.bxs-band-aid:before{content:"\ebc6"}.bxs-bank:before{content:"\ebc7"}.bxs-bar-chart-alt-2:before{content:"\ebc8"}.bxs-bar-chart-square:before{content:"\ebc9"}.bxs-barcode:before{content:"\ebca"}.bxs-basket:before{content:"\ebcb"}.bxs-bath:before{content:"\ebcc"}.bxs-battery:before{content:"\ebcd"}.bxs-battery-charging:before{content:"\ebce"}.bxs-battery-full:before{content:"\ebcf"}.bxs-battery-low:before{content:"\ebd0"}.bxs-bed:before{content:"\ebd1"}.bxs-bell:before{content:"\ebd2"}.bxs-bell-minus:before{content:"\ebd3"}.bxs-bell-off:before{content:"\ebd4"}.bxs-bell-plus:before{content:"\ebd5"}.bxs-bell-ring:before{content:"\ebd6"}.bxs-bolt:before{content:"\ebd7"}.bxs-bolt-circle:before{content:"\ebd8"}.bxs-book:before{content:"\ebd9"}.bxs-book-bookmark:before{content:"\ebda"}.bxs-book-content:before{content:"\ebdb"}.bxs-bookmark:before{content:"\ebdc"}.bxs-bookmark-minus:before{content:"\ebdd"}.bxs-bookmark-plus:before{content:"\ebde"}.bxs-bookmarks:before{content:"\ebdf"}.bxs-bookmark-star:before{content:"\ebe0"}.bxs-book-open:before{content:"\ebe1"}.bxs-bot:before{content:"\ebe2"}.bxs-bowling-ball:before{content:"\ebe3"}.bxs-box:before{content:"\ebe4"}.bxs-briefcase:before{content:"\ebe5"}.bxs-briefcase-alt:before{content:"\ebe6"}.bxs-briefcase-alt-2:before{content:"\ebe7"}.bxs-brightness:before{content:"\ebe8"}.bxs-brightness-half:before{content:"\ebe9"}.bxs-brush:before{content:"\ebea"}.bxs-brush-alt:before{content:"\ebeb"}.bxs-bug:before{content:"\ebec"}.bxs-bug-alt:before{content:"\ebed"}.bxs-building:before{content:"\ebee"}.bxs-building-house:before{content:"\ebef"}.bxs-buildings:before{content:"\ebf0"}.bxs-bulb:before{content:"\ebf1"}.bxs-buoy:before{content:"\ebf2"}.bxs-bus:before{content:"\ebf3"}.bxs-business:before{content:"\ebf4"}.bxs-cake:before{content:"\ebf5"}.bxs-calculator:before{content:"\ebf6"}.bxs-calendar:before{content:"\ebf7"}.bxs-calendar-alt:before{content:"\ebf8"}.bxs-calendar-check:before{content:"\ebf9"}.bxs-calendar-event:before{content:"\ebfa"}.bxs-calendar-minus:before{content:"\ebfb"}.bxs-calendar-plus:before{content:"\ebfc"}.bxs-calendar-x:before{content:"\ebfd"}.bxs-camera:before{content:"\ebfe"}.bxs-camera-off:before{content:"\ebff"}.bxs-camera-plus:before{content:"\ec00"}.bxs-capsule:before{content:"\ec01"}.bxs-captions:before{content:"\ec02"}.bxs-car:before{content:"\ec03"}.bxs-card:before{content:"\ec04"}.bxs-caret-down-circle:before{content:"\ec05"}.bxs-caret-left-circle:before{content:"\ec06"}.bxs-caret-right-circle:before{content:"\ec07"}.bxs-caret-up-circle:before{content:"\ec08"}.bxs-carousel:before{content:"\ec09"}.bxs-cart:before{content:"\ec0a"}.bxs-cart-alt:before{content:"\ec0b"}.bxs-certification:before{content:"\ec0c"}.bxs-chalkboard:before{content:"\ec0d"}.bxs-chart:before{content:"\ec0e"}.bxs-chat:before{content:"\ec0f"}.bxs-checkbox:before{content:"\ec10"}.bxs-checkbox-checked:before{content:"\ec11"}.bxs-check-circle:before{content:"\ec12"}.bxs-check-shield:before{content:"\ec13"}.bxs-check-square:before{content:"\ec14"}.bxs-chip:before{content:"\ec15"}.bxs-circle:before{content:"\ec16"}.bxs-city:before{content:"\ec17"}.bxs-clinic:before{content:"\ec18"}.bxs-cloud:before{content:"\ec19"}.bxs-cloud-download:before{content:"\ec1a"}.bxs-cloud-lightning:before{content:"\ec1b"}.bxs-cloud-rain:before{content:"\ec1c"}.bxs-cloud-upload:before{content:"\ec1d"}.bxs-coffee:before{content:"\ec1e"}.bxs-coffee-alt:before{content:"\ec1f"}.bxs-cog:before{content:"\ec20"}.bxs-collection:before{content:"\ec21"}.bxs-color-fill:before{content:"\ec22"}.bxs-comment:before{content:"\ec23"}.bxs-comment-add:before{content:"\ec24"}.bxs-comment-detail:before{content:"\ec25"}.bxs-comment-dots:before{content:"\ec26"}.bxs-comment-error:before{content:"\ec27"}.bxs-compass:before{content:"\ec28"}.bxs-component:before{content:"\ec29"}.bxs-confused:before{content:"\ec2a"}.bxs-contact:before{content:"\ec2b"}.bxs-conversation:before{content:"\ec2c"}.bxs-cool:before{content:"\ec2d"}.bxs-copy:before{content:"\ec2e"}.bxs-copy-alt:before{content:"\ec2f"}.bxs-coupon:before{content:"\ec30"}.bxs-credit-card:before{content:"\ec31"}.bxs-credit-card-alt:before{content:"\ec32"}.bxs-crown:before{content:"\ec33"}.bxs-cube:before{content:"\ec34"}.bxs-cube-alt:before{content:"\ec35"}.bxs-cuboid:before{content:"\ec36"}.bxs-customize:before{content:"\ec37"}.bxs-cylinder:before{content:"\ec38"}.bxs-dashboard:before{content:"\ec39"}.bxs-data:before{content:"\ec3a"}.bxs-detail:before{content:"\ec3b"}.bxs-devices:before{content:"\ec3c"}.bxs-direction-left:before{content:"\ec3d"}.bxs-direction-right:before{content:"\ec3e"}.bxs-directions:before{content:"\ec3f"}.bxs-disc:before{content:"\ec40"}.bxs-discount:before{content:"\ec41"}.bxs-dish:before{content:"\ec42"}.bxs-dislike:before{content:"\ec43"}.bxs-dizzy:before{content:"\ec44"}.bxs-dock-bottom:before{content:"\ec45"}.bxs-dock-left:before{content:"\ec46"}.bxs-dock-right:before{content:"\ec47"}.bxs-dock-top:before{content:"\ec48"}.bxs-dollar-circle:before{content:"\ec49"}.bxs-doughnut-chart:before{content:"\ec4a"}.bxs-down-arrow:before{content:"\ec4b"}.bxs-down-arrow-circle:before{content:"\ec4c"}.bxs-down-arrow-square:before{content:"\ec4d"}.bxs-download:before{content:"\ec4e"}.bxs-downvote:before{content:"\ec4f"}.bxs-drink:before{content:"\ec50"}.bxs-droplet:before{content:"\ec51"}.bxs-droplet-half:before{content:"\ec52"}.bxs-duplicate:before{content:"\ec53"}.bxs-edit:before{content:"\ec54"}.bxs-edit-alt:before{content:"\ec55"}.bxs-eject:before{content:"\ec56"}.bxs-envelope:before{content:"\ec57"}.bxs-eraser:before{content:"\ec58"}.bxs-error:before{content:"\ec59"}.bxs-error-alt:before{content:"\ec5a"}.bxs-error-circle:before{content:"\ec5b"}.bxs-exit:before{content:"\ec5c"}.bxs-extension:before{content:"\ec5d"}.bxs-eyedropper:before{content:"\ec5e"}.bxs-face:before{content:"\ec5f"}.bxs-factory:before{content:"\ec60"}.bxs-fast-forward-circle:before{content:"\ec61"}.bxs-file:before{content:"\ec62"}.bxs-file-blank:before{content:"\ec63"}.bxs-file-css:before{content:"\ec64"}.bxs-file-doc:before{content:"\ec65"}.bxs-file-find:before{content:"\ec66"}.bxs-file-gif:before{content:"\ec67"}.bxs-file-html:before{content:"\ec68"}.bxs-file-image:before{content:"\ec69"}.bxs-file-jpg:before{content:"\ec6a"}.bxs-file-js:before{content:"\ec6b"}.bxs-file-json:before{content:"\ec6c"}.bxs-file-md:before{content:"\ec6d"}.bxs-file-pdf:before{content:"\ec6e"}.bxs-file-plus:before{content:"\ec6f"}.bxs-file-png:before{content:"\ec70"}.bxs-file-txt:before{content:"\ec71"}.bxs-film:before{content:"\ec72"}.bxs-filter-alt:before{content:"\ec73"}.bxs-first-aid:before{content:"\ec74"}.bxs-flag:before{content:"\ec75"}.bxs-flag-alt:before{content:"\ec76"}.bxs-flame:before{content:"\ec77"}.bxs-flask:before{content:"\ec78"}.bxs-folder:before{content:"\ec79"}.bxs-folder-minus:before{content:"\ec7a"}.bxs-folder-open:before{content:"\ec7b"}.bxs-folder-plus:before{content:"\ec7c"}.bxs-food-menu:before{content:"\ec7d"}.bxs-fridge:before{content:"\ec7e"}.bxs-gas-pump:before{content:"\ec7f"}.bxs-ghost:before{content:"\ec80"}.bxs-gift:before{content:"\ec81"}.bxs-graduation:before{content:"\ec82"}.bxs-grid:before{content:"\ec83"}.bxs-grid-alt:before{content:"\ec84"}.bxs-group:before{content:"\ec85"}.bxs-hand-down:before{content:"\ec86"}.bxs-hand-left:before{content:"\ec87"}.bxs-hand-right:before{content:"\ec88"}.bxs-hand-up:before{content:"\ec89"}.bxs-happy:before{content:"\ec8a"}.bxs-happy-alt:before{content:"\ec8b"}.bxs-happy-beaming:before{content:"\ec8c"}.bxs-happy-heart-eyes:before{content:"\ec8d"}.bxs-hdd:before{content:"\ec8e"}.bxs-heart:before{content:"\ec8f"}.bxs-help-circle:before{content:"\ec90"}.bxs-hide:before{content:"\ec91"}.bxs-home:before{content:"\ec92"}.bxs-home-circle:before{content:"\ec93"}.bxs-hot:before{content:"\ec94"}.bxs-hotel:before{content:"\ec95"}.bxs-hourglass:before{content:"\ec96"}.bxs-hourglass-bottom:before{content:"\ec97"}.bxs-hourglass-top:before{content:"\ec98"}.bxs-id-card:before{content:"\ec99"}.bxs-image:before{content:"\ec9a"}.bxs-image-add:before{content:"\ec9b"}.bxs-image-alt:before{content:"\ec9c"}.bxs-inbox:before{content:"\ec9d"}.bxs-info-circle:before{content:"\ec9e"}.bxs-institution:before{content:"\ec9f"}.bxs-joystick:before{content:"\eca0"}.bxs-joystick-alt:before{content:"\eca1"}.bxs-joystick-button:before{content:"\eca2"}.bxs-key:before{content:"\eca3"}.bxs-keyboard:before{content:"\eca4"}.bxs-label:before{content:"\eca5"}.bxs-landmark:before{content:"\eca6"}.bxs-landscape:before{content:"\eca7"}.bxs-laugh:before{content:"\eca8"}.bxs-layer:before{content:"\eca9"}.bxs-layout:before{content:"\ecaa"}.bxs-left-arrow:before{content:"\ecab"}.bxs-left-arrow-circle:before{content:"\ecac"}.bxs-left-arrow-square:before{content:"\ecad"}.bxs-left-down-arrow-circle:before{content:"\ecae"}.bxs-left-top-arrow-circle:before{content:"\ecaf"}.bxs-like:before{content:"\ecb0"}.bxs-lock:before{content:"\ecb1"}.bxs-lock-alt:before{content:"\ecb2"}.bxs-lock-open:before{content:"\ecb3"}.bxs-lock-open-alt:before{content:"\ecb4"}.bxs-log-in:before{content:"\ecb5"}.bxs-log-in-circle:before{content:"\ecb6"}.bxs-log-out:before{content:"\ecb7"}.bxs-log-out-circle:before{content:"\ecb8"}.bxs-magic-wand:before{content:"\ecb9"}.bxs-magnet:before{content:"\ecba"}.bxs-map:before{content:"\ecbb"}.bxs-map-alt:before{content:"\ecbc"}.bxs-map-pin:before{content:"\ecbd"}.bxs-megaphone:before{content:"\ecbe"}.bxs-meh:before{content:"\ecbf"}.bxs-meh-alt:before{content:"\ecc0"}.bxs-meh-blank:before{content:"\ecc1"}.bxs-memory-card:before{content:"\ecc2"}.bxs-message:before{content:"\ecc3"}.bxs-message-alt:before{content:"\ecc4"}.bxs-message-alt-dots:before{content:"\ecc5"}.bxs-message-dots:before{content:"\ecc6"}.bxs-message-rounded:before{content:"\ecc7"}.bxs-message-rounded-dots:before{content:"\ecc8"}.bxs-message-square:before{content:"\ecc9"}.bxs-message-square-dots:before{content:"\ecca"}.bxs-microphone:before{content:"\eccb"}.bxs-microphone-alt:before{content:"\eccc"}.bxs-microphone-off:before{content:"\eccd"}.bxs-minus-circle:before{content:"\ecce"}.bxs-minus-square:before{content:"\eccf"}.bxs-mobile:before{content:"\ecd0"}.bxs-mobile-vibration:before{content:"\ecd1"}.bxs-moon:before{content:"\ecd2"}.bxs-mouse:before{content:"\ecd3"}.bxs-mouse-alt:before{content:"\ecd4"}.bxs-movie:before{content:"\ecd5"}.bxs-music:before{content:"\ecd6"}.bxs-navigation:before{content:"\ecd7"}.bxs-news:before{content:"\ecd8"}.bxs-no-entry:before{content:"\ecd9"}.bxs-note:before{content:"\ecda"}.bxs-notepad:before{content:"\ecdb"}.bxs-notification:before{content:"\ecdc"}.bxs-notification-off:before{content:"\ecdd"}.bxs-offer:before{content:"\ecde"}.bxs-package:before{content:"\ecdf"}.bxs-paint:before{content:"\ece0"}.bxs-paint-roll:before{content:"\ece1"}.bxs-palette:before{content:"\ece2"}.bxs-paper-plane:before{content:"\ece3"}.bxs-parking:before{content:"\ece4"}.bxs-paste:before{content:"\ece5"}.bxs-pen:before{content:"\ece6"}.bxs-pencil:before{content:"\ece7"}.bxs-phone:before{content:"\ece8"}.bxs-phone-call:before{content:"\ece9"}.bxs-phone-incoming:before{content:"\ecea"}.bxs-phone-outgoing:before{content:"\eceb"}.bxs-photo-album:before{content:"\ecec"}.bxs-pie-chart:before{content:"\eced"}.bxs-pie-chart-alt:before{content:"\ecee"}.bxs-pie-chart-alt-2:before{content:"\ecef"}.bxs-pin:before{content:"\ecf0"}.bxs-plane:before{content:"\ecf1"}.bxs-plane-alt:before{content:"\ecf2"}.bxs-plane-land:before{content:"\ecf3"}.bxs-planet:before{content:"\ecf4"}.bxs-plane-take-off:before{content:"\ecf5"}.bxs-playlist:before{content:"\ecf6"}.bxs-plug:before{content:"\ecf7"}.bxs-plus-circle:before{content:"\ecf8"}.bxs-plus-square:before{content:"\ecf9"}.bxs-polygon:before{content:"\ecfa"}.bxs-printer:before{content:"\ecfb"}.bxs-purchase-tag:before{content:"\ecfc"}.bxs-purchase-tag-alt:before{content:"\ecfd"}.bxs-pyramid:before{content:"\ecfe"}.bxs-quote-alt-left:before{content:"\ecff"}.bxs-quote-alt-right:before{content:"\ed00"}.bxs-quote-left:before{content:"\ed01"}.bxs-quote-right:before{content:"\ed02"}.bxs-quote-single-left:before{content:"\ed03"}.bxs-quote-single-right:before{content:"\ed04"}.bxs-radio:before{content:"\ed05"}.bxs-receipt:before{content:"\ed06"}.bxs-rectangle:before{content:"\ed07"}.bxs-rename:before{content:"\ed08"}.bxs-report:before{content:"\ed09"}.bxs-rewind-circle:before{content:"\ed0a"}.bxs-right-arrow:before{content:"\ed0b"}.bxs-right-arrow-circle:before{content:"\ed0c"}.bxs-right-arrow-square:before{content:"\ed0d"}.bxs-right-down-arrow-circle:before{content:"\ed0e"}.bxs-right-top-arrow-circle:before{content:"\ed0f"}.bxs-rocket:before{content:"\ed10"}.bxs-ruler:before{content:"\ed11"}.bxs-sad:before{content:"\ed12"}.bxs-save:before{content:"\ed13"}.bxs-school:before{content:"\ed14"}.bxs-search:before{content:"\ed15"}.bxs-search-alt-2:before{content:"\ed16"}.bxs-select-multiple:before{content:"\ed17"}.bxs-send:before{content:"\ed18"}.bxs-server:before{content:"\ed19"}.bxs-share:before{content:"\ed1a"}.bxs-share-alt:before{content:"\ed1b"}.bxs-shield:before{content:"\ed1c"}.bxs-shield-alt-2:before{content:"\ed1d"}.bxs-ship:before{content:"\ed1e"}.bxs-shocked:before{content:"\ed1f"}.bxs-shopping-bag:before{content:"\ed20"}.bxs-shopping-bag-alt:before{content:"\ed21"}.bxs-show:before{content:"\ed22"}.bxs-skip-next-circle:before{content:"\ed23"}.bxs-skip-previous-circle:before{content:"\ed24"}.bxs-skull:before{content:"\ed25"}.bxs-sleepy:before{content:"\ed26"}.bxs-slideshow:before{content:"\ed27"}.bxs-smile:before{content:"\ed28"}.bxs-sort-alt:before{content:"\ed29"}.bxs-spa:before{content:"\ed2a"}.bxs-spreadsheet:before{content:"\ed2b"}.bxs-square:before{content:"\ed2c"}.bxs-square-rounded:before{content:"\ed2d"}.bxs-star:before{content:"\ed2e"}.bxs-star-half:before{content:"\ed2f"}.bxs-stopwatch:before{content:"\ed30"}.bxs-store:before{content:"\ed31"}.bxs-store-alt:before{content:"\ed32"}.bxs-sun:before{content:"\ed33"}.bxs-tag:before{content:"\ed34"}.bxs-tag-x:before{content:"\ed35"}.bxs-taxi:before{content:"\ed36"}.bxs-tennis-ball:before{content:"\ed37"}.bxs-terminal:before{content:"\ed38"}.bxs-time:before{content:"\ed39"}.bxs-time-five:before{content:"\ed3a"}.bxs-timer:before{content:"\ed3b"}.bxs-tired:before{content:"\ed3c"}.bxs-toggle-left:before{content:"\ed3d"}.bxs-toggle-right:before{content:"\ed3e"}.bxs-tone:before{content:"\ed3f"}.bxs-torch:before{content:"\ed40"}.bxs-to-top:before{content:"\ed41"}.bxs-traffic:before{content:"\ed42"}.bxs-traffic-barrier:before{content:"\ed43"}.bxs-train:before{content:"\ed44"}.bxs-trash:before{content:"\ed45"}.bxs-trash-alt:before{content:"\ed46"}.bxs-tree:before{content:"\ed47"}.bxs-trophy:before{content:"\ed48"}.bxs-truck:before{content:"\ed49"}.bxs-t-shirt:before{content:"\ed4a"}.bxs-up-arrow:before{content:"\ed4b"}.bxs-up-arrow-circle:before{content:"\ed4c"}.bxs-up-arrow-square:before{content:"\ed4d"}.bxs-upside-down:before{content:"\ed4e"}.bxs-upvote:before{content:"\ed4f"}.bxs-user:before{content:"\ed50"}.bxs-user-badge:before{content:"\ed51"}.bxs-user-check:before{content:"\ed52"}.bxs-user-circle:before{content:"\ed53"}.bxs-user-detail:before{content:"\ed54"}.bxs-user-minus:before{content:"\ed55"}.bxs-user-pin:before{content:"\ed56"}.bxs-user-plus:before{content:"\ed57"}.bxs-user-rectangle:before{content:"\ed58"}.bxs-user-voice:before{content:"\ed59"}.bxs-user-x:before{content:"\ed5a"}.bxs-vial:before{content:"\ed5b"}.bxs-video:before{content:"\ed5c"}.bxs-video-off:before{content:"\ed5d"}.bxs-video-plus:before{content:"\ed5e"}.bxs-video-recording:before{content:"\ed5f"}.bxs-videos:before{content:"\ed60"}.bxs-volume:before{content:"\ed61"}.bxs-volume-full:before{content:"\ed62"}.bxs-volume-low:before{content:"\ed63"}.bxs-volume-mute:before{content:"\ed64"}.bxs-wallet:before{content:"\ed65"}.bxs-wallet-alt:before{content:"\ed66"}.bxs-watch:before{content:"\ed67"}.bxs-watch-alt:before{content:"\ed68"}.bxs-widget:before{content:"\ed69"}.bxs-wine:before{content:"\ed6a"}.bxs-wink-smile:before{content:"\ed6b"}.bxs-wink-tongue:before{content:"\ed6c"}.bxs-wrench:before{content:"\ed6d"}.bxs-x-circle:before{content:"\ed6e"}.bxs-x-square:before{content:"\ed6f"}.bxs-yin-yang:before{content:"\ed70"}.bxs-zap:before{content:"\ed71"}.bxs-zoom-in:before{content:"\ed72"}.bxs-zoom-out:before{content:"\ed73"}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Inconsolata;font-style:normal;font-weight:400;src:local("Inconsolata Regular"),local("Inconsolata-Regular"),url(https://fonts.gstatic.com/s/inconsolata/v16/QldKNThLqRwH-OJ1UHjlKGlW5qhExfHwNJU.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Inconsolata;font-style:normal;font-weight:400;src:local("Inconsolata Regular"),local("Inconsolata-Regular"),url(https://fonts.gstatic.com/s/inconsolata/v16/QldKNThLqRwH-OJ1UHjlKGlX5qhExfHwNJU.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Inconsolata;font-style:normal;font-weight:400;src:local("Inconsolata Regular"),local("Inconsolata-Regular"),url(https://fonts.gstatic.com/s/inconsolata/v16/QldKNThLqRwH-OJ1UHjlKGlZ5qhExfHw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}:root{--Global-body-max-width:73.75rem;--Global-transition-duration:0.25s;--Global-animation-duration:0.5s;--Global-animation-long-duration:0.75s;--Breakpoints:XS,S,M,L,XL;--Grid-container-max-width:var(--Global-body-max-width);--Grid-gutter-size-small:0.9375rem;--Grid-gutter-size-large:1.25rem;--Grid-columns:12;--Grid-columns-offsets:11;--Global-border-radius-default:0.25rem;--Global-code-line-numbers-with:3.5rem;--Color-amber:#d78737;--Color-blue:[object Object];--Color-deepBlue:#0e346c;--Color-gold:#bd9e56;--Color-gray:[object Object];--Color-grenadine:#c35078;--Color-kiwi:#9a9f1e;--Color-lilas:#7ea1d3;--Color-mahogany:#57142e;--Color-ocher:#c29614;--Color-pine:#144d52;--Color-platinum:#000;--Color-prune:#661456;--Color-sand:#d7be88;--Color-sandPearl:#f0e5d6;--Color-silver:#b1b2b4;--Color-skyBlue:#98d2d7;--Color-southSea:#9dc9cd;--Color-turquoise:#14a5c2;--Color-waterGreen:#007571;--Color-app-black:#000;--Color-app-deepRed:#c32222;--Color-app-emerald:#14a33a;--Color-app-orange:#eb6437;--Color-app-red:#d64343;--Color-white:#fff;--Color-app-gray-lighter:#f7f7f7;--Color-app-gray-light:#d4d1d1;--Color-app-gray-medium:#a8a0a0;--Color-app-gray-darker:#504747;--Color-danger:var(--Color-app-red);--Color-info:var(--Color-app-gray-dark);--Color-warning:var(--Color-app-orange);--Color-facebook:#4267b2;--Color-disabled:var(--Color-app-gray-light);--Color-invalid:var(--Color-app-red);--Color-text-current:var(--Color-app-gray-darker);--Color-text-light:var(--Color-app-gray-medium);--Color-background-decoration:var(--Color-app-gray-light);--Color-valid:var(--Color-app-emerald);--Color-overlay-default:color-mod(var(--Color-app-black) alpha(0.5));--Color-separator-light:var(--Color-app-gray-light);--Color-separator-medium:var(--Color-app-gray-medium);--Color-border-grey:#dedede}.fadeIn{-webkit-animation:fadeIn var(--Global-animation-duration);animation:fadeIn var(--Global-animation-duration)}.fadeInLong{-webkit-animation:fadeIn var(--Global-animation-long-duration);animation:fadeIn var(--Global-animation-long-duration)}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeOut{-webkit-animation:fadeOut var(--Global-animation-duration);animation:fadeOut var(--Global-animation-duration)}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.scaleIn{-webkit-animation:scaleIn var(--Global-animation-duration);animation:scaleIn var(--Global-animation-duration)}@-webkit-keyframes scaleIn{0%{transform:scale(.5)}to{transform:scale(1)}}@keyframes scaleIn{0%{transform:scale(.5)}to{transform:scale(1)}}.scaleOut{-webkit-animation:scaleOut var(--Global-animation-duration);animation:scaleOut var(--Global-animation-duration)}@-webkit-keyframes scaleOut{0%{transform:scale(1)}to{transform:scale(0)}}@keyframes scaleOut{0%{transform:scale(1)}to{transform:scale(0)}}.rtl\:slideInRight,.slideInRight{-webkit-animation:slideInRight var(--Global-animation-duration);animation:slideInRight var(--Global-animation-duration)}body[dir=rtl] .rtl\:slideInRight{-webkit-animation:slideInLeft var(--Global-animation-duration);animation:slideInLeft var(--Global-animation-duration)}@-webkit-keyframes slideInRight{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes slideInRight{0%{transform:translateX(100%)}to{transform:translateX(0)}}.rtl\:slideInLeft,.slideInLeft{-webkit-animation:slideInLeft var(--Global-animation-duration);animation:slideInLeft var(--Global-animation-duration)}body[dir=rtl] .rtl\:slideInLeft{-webkit-animation:slideInRight var(--Global-animation-duration);animation:slideInRight var(--Global-animation-duration)}@-webkit-keyframes slideInLeft{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes slideInLeft{0%{transform:translateX(-100%)}to{transform:translateX(0)}}.slideInBottom{-webkit-animation:slideInBottom var(--Global-animation-long-duration);animation:slideInBottom var(--Global-animation-long-duration)}@-webkit-keyframes slideInBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideInBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}.slideInTop{-webkit-animation:slideInTop var(--Global-animation-long-duration);animation:slideInTop var(--Global-animation-long-duration)}@-webkit-keyframes slideInTop{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slideInTop{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.rotateInfinite{-webkit-animation:rotateInfinite 1.4s cubic-bezier(.5,.1,.4,.9) infinite;animation:rotateInfinite 1.4s cubic-bezier(.5,.1,.4,.9) infinite}@-webkit-keyframes rotateInfinite{to{transform:rotate(1turn)}}@keyframes rotateInfinite{to{transform:rotate(1turn)}}.loadingDots{margin-top:-.9rem;padding:0 20px 0 5px;font-size:1.8rem;line-height:1rem}.loadingDots:after{content:".";-webkit-animation:loadingDots 1s steps(5) infinite;animation:loadingDots 1s steps(5) infinite}@-webkit-keyframes loadingDots{0%,20%{color:transparent;text-shadow:.25em 0 0 transparent,.5em 0 0 transparent}40%{color:#fff;text-shadow:.25em 0 0 transparent,.5em 0 0 transparent}60%{text-shadow:.25em 0 0 #fff,.5em 0 0 transparent}80%,to{text-shadow:.25em 0 0 #fff,.5em 0 0 #fff}}@keyframes loadingDots{0%,20%{color:transparent;text-shadow:.25em 0 0 transparent,.5em 0 0 transparent}40%{color:#fff;text-shadow:.25em 0 0 transparent,.5em 0 0 transparent}60%{text-shadow:.25em 0 0 #fff,.5em 0 0 transparent}80%,to{text-shadow:.25em 0 0 #fff,.5em 0 0 #fff}}@-webkit-keyframes placeHolderShimmer{0%{background-position:-100% 0}to{background-position:100% 0}}@keyframes placeHolderShimmer{0%{background-position:-100% 0}to{background-position:100% 0}}html{box-sizing:border-box;overflow-x:hidden;background-color:#fff}*,:after,:before{box-sizing:inherit;border:0 solid}body{min-width:18.75rem;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:1.4;min-height:100vh;--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity));font-size:1rem;font-family:Source Sans Pro,sans-serif}a{color:[object Object];text-decoration:none}.icon-monochrome svg *{fill:currentColor}.list-disc,.list-hyphen{position:relative}html:not([dir=rtl]) .list-disc,html:not([dir=rtl]) .list-hyphen{padding-left:.75rem}[dir=rtl] .list-disc,[dir=rtl] .list-hyphen{padding-right:.75rem}.list-disc:before{position:absolute;content:"•"}.list-hyphen:before{position:absolute;content:"-"}html:not([dir=rtl]) .list-disc:before,html:not([dir=rtl]) .list-hyphen:before{left:0}[dir=rtl] .list-disc:before,[dir=rtl] .list-hyphen:before{right:0}.reset-anchor{color:inherit;text-decoration:none}.reset-button{outline:none;border:none;padding:0;text-decoration:none;cursor:pointer;background:none}.reset-list{margin:0;padding:0;list-style:none}.reset-heading{margin:0;font-weight:400}.reset-paragraph{margin:0}.reset-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;outline:none;border:none;border-radius:0;padding:0;background:none}.reset-input::-ms-clear{display:none;width:0;height:0}.reset-input-number{-moz-appearance:textfield}.reset-input-number::-webkit-inner-spin-button,.reset-input-number::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none}.reset-select::-ms-expand{display:none}abbr,abbr[title]{text-decoration:none}.shadow-bottom{position:relative}.shadow-inner-bottom,.shadow-inner-left,.shadow-inner-right,.shadow-inner-top{overflow:hidden;position:relative}.shadow-bottom:after,.shadow-inner-bottom:after,.shadow-inner-left:before,.shadow-inner-right:after,.shadow-inner-top:before{position:absolute;border-radius:100%;content:""}.shadow-inner-left:before,.shadow-inner-right:after{top:0;bottom:0;width:1.25rem;box-shadow:0 0 1.25rem rgba(0,0,0,.5)}.shadow-inner-left:before{right:auto;left:-1.25rem}.shadow-inner-right:after{right:-1.25rem;left:auto}.shadow-bottom:after,.shadow-inner-bottom:after,.shadow-inner-top:before{max-width:73.75rem;margin:auto;right:0;left:0;width:90%;z-index:0;height:1.25rem;box-shadow:0 0 1.25rem rgba(0,0,0,.15)}.shadow-inner-top:before{top:-1.25rem}.shadow-bottom:after{bottom:0;z-index:-1}.translate-0{transform:translate(0)}.-translate-x-50{transform:translateX(-50%)}.rtl\:translate-x-100,.translate-x-100,body[dir=rtl] .rtl\:-translate-x-100{transform:translateX(100%)}.-translate-x-100,.rtl\:-translate-x-100,body[dir=rtl] .rtl\:translate-x-100{transform:translateX(-100%)}.-translate-y-50{transform:translateY(-50%)}.translate-y-50{transform:translateY(50%)}.translate-y-100{transform:translateY(100%)}.-translate-y-100{transform:translateY(-100%)}.-translate-50,.rtl\:-translate-50-x-reverse{transform:translate(-50%,-50%)}body[dir=rtl] .rtl\:-translate-50-x-reverse{transform:translate(50%,-50%)}.-translate-x-50.translate-y-50{transform:translate(-50%,50%)}.rtl\:translate-x-50.-translate-y-50,.translate-x-50.-translate-y-50{transform:translate(50%,-50%)}body[dir=rtl] .rtl\:translate-x-50.-translate-y-50{transform:translate(-50%,-50%)}.rotate-45{transform:rotate(45deg)}.-rotate-45{transform:rotate(-45deg)}.rotate-360{transform:rotate(1turn)}.-scale-x-1,body[dir=rtl] .rtl\:-scale-x-1{transform:scaleX(-1)}.-scale-y-1{transform:scaleY(-1)}.-scale-1{transform:scale(-1)}.focus\:scale-1025:focus,.hover\:scale-1025:hover,.scale-1025{transform:scale(1.025)}.focus\:scale-105:focus,.hover\:scale-105:hover,.scale-105{transform:scale(1.05)}.transition-none{transition:none}.transition-all{transition:all ease-in var(--Global-transition-duration)}.transition-bg-color{transition:background-color ease-in var(--Global-transition-duration)}.transition-color{transition:color ease-in var(--Global-transition-duration)}.transition-colors{transition:background-color var(--Global-transition-duration) ease-in,border-color var(--Global-transition-duration) ease-in,color var(--Global-transition-duration) ease-in}.transition-opacity{transition:opacity ease-in var(--Global-transition-duration)}.transition-transform{transition:transform ease-in var(--Global-transition-duration)}.-z-1{z-index:-1}.-z-2{z-index:-2} + +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:Source Sans Pro,sans-serif;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #d4d1d1}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}@media (min-width:50.01em){.init:after{content:"";background-image:radial-gradient(#eef2f5 0,#f4f7f8 40%,transparent 75%);position:absolute;top:0;right:0;width:60%;height:100%;z-index:1}.init>*{position:relative;z-index:2}}button,button:focus,input,input:focus{outline:0}.space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px*(1 - var(--space-y-reverse)));margin-bottom:calc(0px*var(--space-y-reverse))}.space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px*var(--space-x-reverse));margin-left:calc(0px*(1 - var(--space-x-reverse)))}.space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.25rem*var(--space-y-reverse))}.space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.25rem*var(--space-x-reverse));margin-left:calc(0.25rem*(1 - var(--space-x-reverse)))}.space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.5rem*var(--space-y-reverse))}.space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.5rem*var(--space-x-reverse));margin-left:calc(0.5rem*(1 - var(--space-x-reverse)))}.space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.75rem*var(--space-y-reverse))}.space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.75rem*var(--space-x-reverse));margin-left:calc(0.75rem*(1 - var(--space-x-reverse)))}.space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1rem*var(--space-y-reverse))}.space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem*var(--space-x-reverse));margin-left:calc(1rem*(1 - var(--space-x-reverse)))}.space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem*var(--space-y-reverse))}.space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem*var(--space-x-reverse));margin-left:calc(1.25rem*(1 - var(--space-x-reverse)))}.space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem*var(--space-y-reverse))}.space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem*var(--space-x-reverse));margin-left:calc(1.5rem*(1 - var(--space-x-reverse)))}.space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.75rem*var(--space-y-reverse))}.space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.75rem*var(--space-x-reverse));margin-left:calc(1.75rem*(1 - var(--space-x-reverse)))}.space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2rem*var(--space-y-reverse))}.space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem*var(--space-x-reverse));margin-left:calc(2rem*(1 - var(--space-x-reverse)))}.space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.25rem*var(--space-y-reverse))}.space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.25rem*var(--space-x-reverse));margin-left:calc(2.25rem*(1 - var(--space-x-reverse)))}.space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem*var(--space-y-reverse))}.space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem*var(--space-x-reverse));margin-left:calc(2.5rem*(1 - var(--space-x-reverse)))}.space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.75rem*var(--space-y-reverse))}.space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.75rem*var(--space-x-reverse));margin-left:calc(2.75rem*(1 - var(--space-x-reverse)))}.space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3rem*var(--space-y-reverse))}.space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem*var(--space-x-reverse));margin-left:calc(3rem*(1 - var(--space-x-reverse)))}.space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3.75rem*var(--space-y-reverse))}.space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3.75rem*var(--space-x-reverse));margin-left:calc(3.75rem*(1 - var(--space-x-reverse)))}.space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(4rem*var(--space-y-reverse))}.space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem*var(--space-x-reverse));margin-left:calc(4rem*(1 - var(--space-x-reverse)))}.space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5rem*var(--space-y-reverse))}.space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem*var(--space-x-reverse));margin-left:calc(5rem*(1 - var(--space-x-reverse)))}.space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5.5rem*var(--space-y-reverse))}.space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5.5rem*var(--space-x-reverse));margin-left:calc(5.5rem*(1 - var(--space-x-reverse)))}.space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6rem*var(--space-y-reverse))}.space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem*var(--space-x-reverse));margin-left:calc(6rem*(1 - var(--space-x-reverse)))}.space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.25rem*var(--space-y-reverse))}.space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.25rem*var(--space-x-reverse));margin-left:calc(6.25rem*(1 - var(--space-x-reverse)))}.space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.5rem*var(--space-y-reverse))}.space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.5rem*var(--space-x-reverse));margin-left:calc(6.5rem*(1 - var(--space-x-reverse)))}.space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8rem*var(--space-y-reverse))}.space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem*var(--space-x-reverse));margin-left:calc(8rem*(1 - var(--space-x-reverse)))}.space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8.5rem*var(--space-y-reverse))}.space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8.5rem*var(--space-x-reverse));margin-left:calc(8.5rem*(1 - var(--space-x-reverse)))}.space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(9rem*var(--space-y-reverse))}.space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(9rem*var(--space-x-reverse));margin-left:calc(9rem*(1 - var(--space-x-reverse)))}.space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(10rem*var(--space-y-reverse))}.space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem*var(--space-x-reverse));margin-left:calc(10rem*(1 - var(--space-x-reverse)))}.space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(12rem*var(--space-y-reverse))}.space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem*var(--space-x-reverse));margin-left:calc(12rem*(1 - var(--space-x-reverse)))}.space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(13rem*var(--space-y-reverse))}.space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(13rem*var(--space-x-reverse));margin-left:calc(13rem*(1 - var(--space-x-reverse)))}.space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(14rem*var(--space-y-reverse))}.space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem*var(--space-x-reverse));margin-left:calc(14rem*(1 - var(--space-x-reverse)))}.space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(15rem*var(--space-y-reverse))}.space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(15rem*var(--space-x-reverse));margin-left:calc(15rem*(1 - var(--space-x-reverse)))}.space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(16rem*var(--space-y-reverse))}.space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem*var(--space-x-reverse));margin-left:calc(16rem*(1 - var(--space-x-reverse)))}.space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(17rem*var(--space-y-reverse))}.space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(17rem*var(--space-x-reverse));margin-left:calc(17rem*(1 - var(--space-x-reverse)))}.space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px*(1 - var(--space-y-reverse)));margin-bottom:calc(1px*var(--space-y-reverse))}.space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px*var(--space-x-reverse));margin-left:calc(1px*(1 - var(--space-x-reverse)))}.space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.125rem*var(--space-y-reverse))}.space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.125rem*var(--space-x-reverse));margin-left:calc(0.125rem*(1 - var(--space-x-reverse)))}.space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.375rem*var(--space-y-reverse))}.space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.375rem*var(--space-x-reverse));margin-left:calc(0.375rem*(1 - var(--space-x-reverse)))}.space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.625rem*var(--space-y-reverse))}.space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.625rem*var(--space-x-reverse));margin-left:calc(0.625rem*(1 - var(--space-x-reverse)))}.space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.875rem*var(--space-y-reverse))}.space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.875rem*var(--space-x-reverse));margin-left:calc(1.875rem*(1 - var(--space-x-reverse)))}.-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.25rem*var(--space-y-reverse))}.-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.25rem*var(--space-x-reverse));margin-left:calc(-0.25rem*(1 - var(--space-x-reverse)))}.-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.5rem*var(--space-y-reverse))}.-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.5rem*var(--space-x-reverse));margin-left:calc(-0.5rem*(1 - var(--space-x-reverse)))}.-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.75rem*var(--space-y-reverse))}.-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.75rem*var(--space-x-reverse));margin-left:calc(-0.75rem*(1 - var(--space-x-reverse)))}.-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem*var(--space-y-reverse))}.-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem*var(--space-x-reverse));margin-left:calc(-1rem*(1 - var(--space-x-reverse)))}.-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem*var(--space-y-reverse))}.-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem*var(--space-x-reverse));margin-left:calc(-1.25rem*(1 - var(--space-x-reverse)))}.-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem*var(--space-y-reverse))}.-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem*var(--space-x-reverse));margin-left:calc(-1.5rem*(1 - var(--space-x-reverse)))}.-space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.75rem*var(--space-y-reverse))}.-space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.75rem*var(--space-x-reverse));margin-left:calc(-1.75rem*(1 - var(--space-x-reverse)))}.-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem*var(--space-y-reverse))}.-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem*var(--space-x-reverse));margin-left:calc(-2rem*(1 - var(--space-x-reverse)))}.-space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.25rem*var(--space-y-reverse))}.-space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.25rem*var(--space-x-reverse));margin-left:calc(-2.25rem*(1 - var(--space-x-reverse)))}.-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem*var(--space-y-reverse))}.-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem*var(--space-x-reverse));margin-left:calc(-2.5rem*(1 - var(--space-x-reverse)))}.-space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.75rem*var(--space-y-reverse))}.-space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.75rem*var(--space-x-reverse));margin-left:calc(-2.75rem*(1 - var(--space-x-reverse)))}.-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem*var(--space-y-reverse))}.-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem*var(--space-x-reverse));margin-left:calc(-3rem*(1 - var(--space-x-reverse)))}.-space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3.75rem*var(--space-y-reverse))}.-space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3.75rem*var(--space-x-reverse));margin-left:calc(-3.75rem*(1 - var(--space-x-reverse)))}.-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem*var(--space-y-reverse))}.-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem*var(--space-x-reverse));margin-left:calc(-4rem*(1 - var(--space-x-reverse)))}.-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem*var(--space-y-reverse))}.-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem*var(--space-x-reverse));margin-left:calc(-5rem*(1 - var(--space-x-reverse)))}.-space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5.5rem*var(--space-y-reverse))}.-space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5.5rem*var(--space-x-reverse));margin-left:calc(-5.5rem*(1 - var(--space-x-reverse)))}.-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem*var(--space-y-reverse))}.-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem*var(--space-x-reverse));margin-left:calc(-6rem*(1 - var(--space-x-reverse)))}.-space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.25rem*var(--space-y-reverse))}.-space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.25rem*var(--space-x-reverse));margin-left:calc(-6.25rem*(1 - var(--space-x-reverse)))}.-space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.5rem*var(--space-y-reverse))}.-space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.5rem*var(--space-x-reverse));margin-left:calc(-6.5rem*(1 - var(--space-x-reverse)))}.-space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem*var(--space-y-reverse))}.-space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem*var(--space-x-reverse));margin-left:calc(-8rem*(1 - var(--space-x-reverse)))}.-space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8.5rem*var(--space-y-reverse))}.-space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8.5rem*var(--space-x-reverse));margin-left:calc(-8.5rem*(1 - var(--space-x-reverse)))}.-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-9rem*var(--space-y-reverse))}.-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-9rem*var(--space-x-reverse));margin-left:calc(-9rem*(1 - var(--space-x-reverse)))}.-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem*var(--space-y-reverse))}.-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem*var(--space-x-reverse));margin-left:calc(-10rem*(1 - var(--space-x-reverse)))}.-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem*var(--space-y-reverse))}.-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem*var(--space-x-reverse));margin-left:calc(-12rem*(1 - var(--space-x-reverse)))}.-space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-13rem*var(--space-y-reverse))}.-space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-13rem*var(--space-x-reverse));margin-left:calc(-13rem*(1 - var(--space-x-reverse)))}.-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem*var(--space-y-reverse))}.-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem*var(--space-x-reverse));margin-left:calc(-14rem*(1 - var(--space-x-reverse)))}.-space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-15rem*var(--space-y-reverse))}.-space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-15rem*var(--space-x-reverse));margin-left:calc(-15rem*(1 - var(--space-x-reverse)))}.-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem*var(--space-y-reverse))}.-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem*var(--space-x-reverse));margin-left:calc(-16rem*(1 - var(--space-x-reverse)))}.-space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-17rem*var(--space-y-reverse))}.-space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-17rem*var(--space-x-reverse));margin-left:calc(-17rem*(1 - var(--space-x-reverse)))}.-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px*(1 - var(--space-y-reverse)));margin-bottom:calc(-1px*var(--space-y-reverse))}.-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px*var(--space-x-reverse));margin-left:calc(-1px*(1 - var(--space-x-reverse)))}.-space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.125rem*var(--space-y-reverse))}.-space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.125rem*var(--space-x-reverse));margin-left:calc(-0.125rem*(1 - var(--space-x-reverse)))}.-space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.375rem*var(--space-y-reverse))}.-space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.375rem*var(--space-x-reverse));margin-left:calc(-0.375rem*(1 - var(--space-x-reverse)))}.-space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.625rem*var(--space-y-reverse))}.-space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.625rem*var(--space-x-reverse));margin-left:calc(-0.625rem*(1 - var(--space-x-reverse)))}.-space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.875rem*var(--space-y-reverse))}.-space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.875rem*var(--space-x-reverse));margin-left:calc(-1.875rem*(1 - var(--space-x-reverse)))}.space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px*var(--divide-y-reverse))}.divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px*var(--divide-x-reverse));border-left-width:calc(0px*(1 - var(--divide-x-reverse)))}.divide-y-1>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.divide-x-1>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px*var(--divide-y-reverse))}.divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px*var(--divide-x-reverse));border-left-width:calc(2px*(1 - var(--divide-x-reverse)))}.divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px*var(--divide-y-reverse))}.divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px*var(--divide-x-reverse));border-left-width:calc(4px*(1 - var(--divide-x-reverse)))}.divide-y-5>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(5px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(5px*var(--divide-y-reverse))}.divide-x-5>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(5px*var(--divide-x-reverse));border-left-width:calc(5px*(1 - var(--divide-x-reverse)))}.divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px*var(--divide-y-reverse))}.divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px*var(--divide-x-reverse));border-left-width:calc(8px*(1 - var(--divide-x-reverse)))}.divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.divide-y-DEFAULT>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.divide-x-DEFAULT>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.divide-transparent>:not(template)~:not(template){border-color:transparent}.divide-current>:not(template)~:not(template){border-color:currentColor}.divide-black>:not(template)~:not(template){border-color:#000}.divide-white>:not(template)~:not(template){border-color:#fff}.divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.divide-gray-DEFAULT>:not(template)~:not(template),.divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.divide-red>:not(template)~:not(template){border-color:#d64343}.divide-orange>:not(template)~:not(template){border-color:#eb6437}.divide-yellow>:not(template)~:not(template){border-color:#f8da30}.divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.divide-green-DEFAULT>:not(template)~:not(template),.divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.divide-teal-DEFAULT>:not(template)~:not(template),.divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.divide-blue-500>:not(template)~:not(template){border-color:#058aff}.divide-blue-600>:not(template)~:not(template){border-color:#0075db}.divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.divide-blue-800>:not(template)~:not(template){border-color:#00498a}.divide-blue-900>:not(template)~:not(template){border-color:#003461}.divide-blue-DEFAULT>:not(template)~:not(template),.divide-blue>:not(template)~:not(template){border-color:#0075db}.divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.divide-indigo-DEFAULT>:not(template)~:not(template),.divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.divide-purple-DEFAULT>:not(template)~:not(template),.divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.divide-inherit>:not(template)~:not(template){border-color:inherit}.divide-amber>:not(template)~:not(template){border-color:#d78737}.divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.divide-ardoise>:not(template)~:not(template){border-color:#596a82}.divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.divide-lightBlue-active>:not(template)~:not(template),.divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.divide-gold>:not(template)~:not(template){border-color:#bd9e56}.divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.divide-grenadine>:not(template)~:not(template){border-color:#c35078}.divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.divide-mahogany>:not(template)~:not(template){border-color:#57142e}.divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.divide-ocher>:not(template)~:not(template){border-color:#c29614}.divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.divide-pine>:not(template)~:not(template){border-color:#144d52}.divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.divide-platinum-active>:not(template)~:not(template),.divide-platinum>:not(template)~:not(template){border-color:#000}.divide-prune>:not(template)~:not(template){border-color:#661456}.divide-prune-active>:not(template)~:not(template){border-color:#72085d}.divide-sand>:not(template)~:not(template){border-color:#d7be88}.divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.divide-waterGreen>:not(template)~:not(template){border-color:#007571}.divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.divide-deepRed>:not(template)~:not(template){border-color:#c32222}.divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.divide-emerald>:not(template)~:not(template){border-color:#14a33a}.divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.divide-red-active>:not(template)~:not(template){border-color:#e13737}.divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.divide-white-button-active>:not(template)~:not(template),.divide-white-button>:not(template)~:not(template){border-color:#fff}.divide-code>:not(template)~:not(template){border-color:#3f3d57}.divide-code-active>:not(template)~:not(template){border-color:#37354b}.divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .group-hover\:divide-transparent>:not(template)~:not(template){border-color:transparent}.group:hover .group-hover\:divide-current>:not(template)~:not(template){border-color:currentColor}.group:hover .group-hover\:divide-black>:not(template)~:not(template){border-color:#000}.group:hover .group-hover\:divide-white>:not(template)~:not(template){border-color:#fff}.group:hover .group-hover\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-DEFAULT>:not(template)~:not(template),.group:hover .group-hover\:divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .group-hover\:divide-red>:not(template)~:not(template){border-color:#d64343}.group:hover .group-hover\:divide-orange>:not(template)~:not(template){border-color:#eb6437}.group:hover .group-hover\:divide-yellow>:not(template)~:not(template){border-color:#f8da30}.group:hover .group-hover\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.group:hover .group-hover\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.group:hover .group-hover\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.group:hover .group-hover\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.group:hover .group-hover\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.group:hover .group-hover\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .group-hover\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.group:hover .group-hover\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.group:hover .group-hover\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.group:hover .group-hover\:divide-green-DEFAULT>:not(template)~:not(template),.group:hover .group-hover\:divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.group:hover .group-hover\:divide-teal-DEFAULT>:not(template)~:not(template),.group:hover .group-hover\:divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .group-hover\:divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.group:hover .group-hover\:divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.group:hover .group-hover\:divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.group:hover .group-hover\:divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.group:hover .group-hover\:divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.group:hover .group-hover\:divide-blue-500>:not(template)~:not(template){border-color:#058aff}.group:hover .group-hover\:divide-blue-600>:not(template)~:not(template){border-color:#0075db}.group:hover .group-hover\:divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.group:hover .group-hover\:divide-blue-800>:not(template)~:not(template){border-color:#00498a}.group:hover .group-hover\:divide-blue-900>:not(template)~:not(template){border-color:#003461}.group:hover .group-hover\:divide-blue-DEFAULT>:not(template)~:not(template),.group:hover .group-hover\:divide-blue>:not(template)~:not(template){border-color:#0075db}.group:hover .group-hover\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.group:hover .group-hover\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.group:hover .group-hover\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.group:hover .group-hover\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.group:hover .group-hover\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.group:hover .group-hover\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .group-hover\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.group:hover .group-hover\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.group:hover .group-hover\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.group:hover .group-hover\:divide-indigo-DEFAULT>:not(template)~:not(template),.group:hover .group-hover\:divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.group:hover .group-hover\:divide-purple-DEFAULT>:not(template)~:not(template),.group:hover .group-hover\:divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .group-hover\:divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.group:hover .group-hover\:divide-inherit>:not(template)~:not(template){border-color:inherit}.group:hover .group-hover\:divide-amber>:not(template)~:not(template){border-color:#d78737}.group:hover .group-hover\:divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.group:hover .group-hover\:divide-ardoise>:not(template)~:not(template){border-color:#596a82}.group:hover .group-hover\:divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.group:hover .group-hover\:divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .group-hover\:divide-lightBlue-active>:not(template)~:not(template),.group:hover .group-hover\:divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.group:hover .group-hover\:divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.group:hover .group-hover\:divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.group:hover .group-hover\:divide-gold>:not(template)~:not(template){border-color:#bd9e56}.group:hover .group-hover\:divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.group:hover .group-hover\:divide-grenadine>:not(template)~:not(template){border-color:#c35078}.group:hover .group-hover\:divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.group:hover .group-hover\:divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.group:hover .group-hover\:divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.group:hover .group-hover\:divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.group:hover .group-hover\:divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.group:hover .group-hover\:divide-mahogany>:not(template)~:not(template){border-color:#57142e}.group:hover .group-hover\:divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.group:hover .group-hover\:divide-ocher>:not(template)~:not(template){border-color:#c29614}.group:hover .group-hover\:divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.group:hover .group-hover\:divide-pine>:not(template)~:not(template){border-color:#144d52}.group:hover .group-hover\:divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.group:hover .group-hover\:divide-platinum-active>:not(template)~:not(template),.group:hover .group-hover\:divide-platinum>:not(template)~:not(template){border-color:#000}.group:hover .group-hover\:divide-prune>:not(template)~:not(template){border-color:#661456}.group:hover .group-hover\:divide-prune-active>:not(template)~:not(template){border-color:#72085d}.group:hover .group-hover\:divide-sand>:not(template)~:not(template){border-color:#d7be88}.group:hover .group-hover\:divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.group:hover .group-hover\:divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.group:hover .group-hover\:divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.group:hover .group-hover\:divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.group:hover .group-hover\:divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.group:hover .group-hover\:divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.group:hover .group-hover\:divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.group:hover .group-hover\:divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.group:hover .group-hover\:divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.group:hover .group-hover\:divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.group:hover .group-hover\:divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.group:hover .group-hover\:divide-waterGreen>:not(template)~:not(template){border-color:#007571}.group:hover .group-hover\:divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.group:hover .group-hover\:divide-deepRed>:not(template)~:not(template){border-color:#c32222}.group:hover .group-hover\:divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.group:hover .group-hover\:divide-emerald>:not(template)~:not(template){border-color:#14a33a}.group:hover .group-hover\:divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.group:hover .group-hover\:divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.group:hover .group-hover\:divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.group:hover .group-hover\:divide-red-active>:not(template)~:not(template){border-color:#e13737}.group:hover .group-hover\:divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .group-hover\:divide-white-button-active>:not(template)~:not(template),.group:hover .group-hover\:divide-white-button>:not(template)~:not(template){border-color:#fff}.group:hover .group-hover\:divide-code>:not(template)~:not(template){border-color:#3f3d57}.group:hover .group-hover\:divide-code-active>:not(template)~:not(template){border-color:#37354b}.group:hover .group-hover\:divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.group:hover .group-hover\:divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .group-hover\:divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.group:hover .group-hover\:divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.group:hover .group-hover\:divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.group:hover .group-hover\:divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.divide-solid>:not(template)~:not(template){border-style:solid}.divide-dashed>:not(template)~:not(template){border-style:dashed}.divide-dotted>:not(template)~:not(template){border-style:dotted}.divide-double>:not(template)~:not(template){border-style:double}.divide-none>:not(template)~:not(template){border-style:none}.divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.group:hover .group-hover\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.group:hover .group-hover\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.group:hover .group-hover\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.group:hover .group-hover\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.group:hover .group-hover\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.bg-clip-border{background-clip:border-box}.bg-clip-padding{background-clip:padding-box}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-transparent{background-color:transparent}.bg-current{background-color:currentColor}.bg-black{background-color:#000}.bg-white{background-color:#fff}.bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.bg-gray,.bg-gray-DEFAULT{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.bg-red{background-color:#d64343}.bg-orange{background-color:#eb6437}.bg-yellow{background-color:#f8da30}.bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.bg-green,.bg-green-DEFAULT{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.bg-teal,.bg-teal-DEFAULT{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.bg-blue-50{background-color:#d1eaff}.bg-blue-100{background-color:#a8d7ff}.bg-blue-200{background-color:#80c4ff}.bg-blue-300{background-color:#57b0ff}.bg-blue-400{background-color:#2e9dff}.bg-blue-500{background-color:#058aff}.bg-blue-600{background-color:#0075db}.bg-blue-700{background-color:#005fb3}.bg-blue-800{background-color:#00498a}.bg-blue-900{background-color:#003461}.bg-blue,.bg-blue-DEFAULT{background-color:#0075db}.bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.bg-indigo,.bg-indigo-DEFAULT{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.bg-purple,.bg-purple-DEFAULT{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.bg-pink{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.bg-inherit{background-color:inherit}.bg-amber{background-color:#d78737}.bg-amber-active{background-color:#e3872b}.bg-ardoise{background-color:#596a82}.bg-ardoise-active{background-color:#476794}.bg-blue-active{background-color:#14a5c2}.bg-lightBlue,.bg-lightBlue-active{background-color:rgba(0,85,138,.1)}.bg-deepBlue{background-color:#0e346c}.bg-deepBlue-active{background-color:#0a3f8f}.bg-gold{background-color:#bd9e56}.bg-gold-active{background-color:#c9a34a}.bg-grenadine{background-color:#c35078}.bg-grenadine-active{background-color:#cf4475}.bg-kiwi{background-color:#9a9f1e}.bg-kiwi-active{background-color:#a3a815}.bg-lilas{background-color:#7ea1d3}.bg-lilas-active{background-color:#75a0db}.bg-mahogany{background-color:#57142e}.bg-mahogany-active{background-color:#610a2b}.bg-ocher{background-color:#c29614}.bg-ocher-active{background-color:#cd9c0a}.bg-pine{background-color:#144d52}.bg-pine-active{background-color:#0a555c}.bg-platinum,.bg-platinum-active{background-color:#000}.bg-prune{background-color:#661456}.bg-prune-active{background-color:#72085d}.bg-sand{background-color:#d7be88}.bg-sand-active{background-color:#dfc181}.bg-sandPearl{background-color:#f0e5d6}.bg-sandPearl-active{background-color:#f2e6d4}.bg-silver{background-color:#b1b2b4}.bg-silver-active{background-color:#a9afbc}.bg-skyBlue{background-color:#98d2d7}.bg-skyBlue-active{background-color:#91d8de}.bg-southSea{background-color:#9dc9cd}.bg-southSea-active{background-color:#95ced5}.bg-turquoise{background-color:#14a5c2}.bg-turquoise-active{background-color:#0aaccd}.bg-waterGreen{background-color:#007571}.bg-waterGreen-active{background-color:#00a8a3}.bg-deepRed{background-color:#c32222}.bg-deepRed-active{background-color:#cf1717}.bg-emerald{background-color:#14a33a}.bg-emerald-active{background-color:#0bad36}.bg-greenLight{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.bg-orange-active{background-color:#f65f2c}.bg-red-active{background-color:#e13737}.bg-white-active{background-color:#14a5c2}.bg-white-button,.bg-white-button-active{background-color:#fff}.bg-code{background-color:#3f3d57}.bg-code-active{background-color:#37354b}.bg-gray-lighter{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.bg-gray-lighter-active{background-color:#ebebeb}.bg-gray-light{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.bg-gray-medium{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.bg-gray-darker{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.bg-gray-darker-active{background-color:#14a5c2}.bg-api-default{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.bg-gray-xxl{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.bg-line-even{background-color:#f3f6f7}.hover\:bg-transparent:hover{background-color:transparent}.hover\:bg-current:hover{background-color:currentColor}.hover\:bg-black:hover{background-color:#000}.hover\:bg-white:hover{background-color:#fff}.hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.hover\:bg-gray-DEFAULT:hover,.hover\:bg-gray:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.hover\:bg-red:hover{background-color:#d64343}.hover\:bg-orange:hover{background-color:#eb6437}.hover\:bg-yellow:hover{background-color:#f8da30}.hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.hover\:bg-green-DEFAULT:hover,.hover\:bg-green:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.hover\:bg-teal-DEFAULT:hover,.hover\:bg-teal:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.hover\:bg-blue-50:hover{background-color:#d1eaff}.hover\:bg-blue-100:hover{background-color:#a8d7ff}.hover\:bg-blue-200:hover{background-color:#80c4ff}.hover\:bg-blue-300:hover{background-color:#57b0ff}.hover\:bg-blue-400:hover{background-color:#2e9dff}.hover\:bg-blue-500:hover{background-color:#058aff}.hover\:bg-blue-600:hover{background-color:#0075db}.hover\:bg-blue-700:hover{background-color:#005fb3}.hover\:bg-blue-800:hover{background-color:#00498a}.hover\:bg-blue-900:hover{background-color:#003461}.hover\:bg-blue-DEFAULT:hover,.hover\:bg-blue:hover{background-color:#0075db}.hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.hover\:bg-indigo-DEFAULT:hover,.hover\:bg-indigo:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.hover\:bg-purple-DEFAULT:hover,.hover\:bg-purple:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.hover\:bg-pink:hover{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.hover\:bg-inherit:hover{background-color:inherit}.hover\:bg-amber:hover{background-color:#d78737}.hover\:bg-amber-active:hover{background-color:#e3872b}.hover\:bg-ardoise:hover{background-color:#596a82}.hover\:bg-ardoise-active:hover{background-color:#476794}.hover\:bg-blue-active:hover{background-color:#14a5c2}.hover\:bg-lightBlue-active:hover,.hover\:bg-lightBlue:hover{background-color:rgba(0,85,138,.1)}.hover\:bg-deepBlue:hover{background-color:#0e346c}.hover\:bg-deepBlue-active:hover{background-color:#0a3f8f}.hover\:bg-gold:hover{background-color:#bd9e56}.hover\:bg-gold-active:hover{background-color:#c9a34a}.hover\:bg-grenadine:hover{background-color:#c35078}.hover\:bg-grenadine-active:hover{background-color:#cf4475}.hover\:bg-kiwi:hover{background-color:#9a9f1e}.hover\:bg-kiwi-active:hover{background-color:#a3a815}.hover\:bg-lilas:hover{background-color:#7ea1d3}.hover\:bg-lilas-active:hover{background-color:#75a0db}.hover\:bg-mahogany:hover{background-color:#57142e}.hover\:bg-mahogany-active:hover{background-color:#610a2b}.hover\:bg-ocher:hover{background-color:#c29614}.hover\:bg-ocher-active:hover{background-color:#cd9c0a}.hover\:bg-pine:hover{background-color:#144d52}.hover\:bg-pine-active:hover{background-color:#0a555c}.hover\:bg-platinum-active:hover,.hover\:bg-platinum:hover{background-color:#000}.hover\:bg-prune:hover{background-color:#661456}.hover\:bg-prune-active:hover{background-color:#72085d}.hover\:bg-sand:hover{background-color:#d7be88}.hover\:bg-sand-active:hover{background-color:#dfc181}.hover\:bg-sandPearl:hover{background-color:#f0e5d6}.hover\:bg-sandPearl-active:hover{background-color:#f2e6d4}.hover\:bg-silver:hover{background-color:#b1b2b4}.hover\:bg-silver-active:hover{background-color:#a9afbc}.hover\:bg-skyBlue:hover{background-color:#98d2d7}.hover\:bg-skyBlue-active:hover{background-color:#91d8de}.hover\:bg-southSea:hover{background-color:#9dc9cd}.hover\:bg-southSea-active:hover{background-color:#95ced5}.hover\:bg-turquoise:hover{background-color:#14a5c2}.hover\:bg-turquoise-active:hover{background-color:#0aaccd}.hover\:bg-waterGreen:hover{background-color:#007571}.hover\:bg-waterGreen-active:hover{background-color:#00a8a3}.hover\:bg-deepRed:hover{background-color:#c32222}.hover\:bg-deepRed-active:hover{background-color:#cf1717}.hover\:bg-emerald:hover{background-color:#14a33a}.hover\:bg-emerald-active:hover{background-color:#0bad36}.hover\:bg-greenLight:hover{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.hover\:bg-orange-active:hover{background-color:#f65f2c}.hover\:bg-red-active:hover{background-color:#e13737}.hover\:bg-white-active:hover{background-color:#14a5c2}.hover\:bg-white-button-active:hover,.hover\:bg-white-button:hover{background-color:#fff}.hover\:bg-code:hover{background-color:#3f3d57}.hover\:bg-code-active:hover{background-color:#37354b}.hover\:bg-gray-lighter:hover{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.hover\:bg-gray-lighter-active:hover{background-color:#ebebeb}.hover\:bg-gray-light:hover{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.hover\:bg-gray-medium:hover{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.hover\:bg-gray-darker:hover{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.hover\:bg-gray-darker-active:hover{background-color:#14a5c2}.hover\:bg-api-default:hover{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.hover\:bg-gray-xxl:hover{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.hover\:bg-line-even:hover{background-color:#f3f6f7}.focus\:bg-transparent:focus{background-color:transparent}.focus\:bg-current:focus{background-color:currentColor}.focus\:bg-black:focus{background-color:#000}.focus\:bg-white:focus{background-color:#fff}.focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.focus\:bg-gray-DEFAULT:focus,.focus\:bg-gray:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.focus\:bg-red:focus{background-color:#d64343}.focus\:bg-orange:focus{background-color:#eb6437}.focus\:bg-yellow:focus{background-color:#f8da30}.focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.focus\:bg-green-DEFAULT:focus,.focus\:bg-green:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.focus\:bg-teal-DEFAULT:focus,.focus\:bg-teal:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.focus\:bg-blue-50:focus{background-color:#d1eaff}.focus\:bg-blue-100:focus{background-color:#a8d7ff}.focus\:bg-blue-200:focus{background-color:#80c4ff}.focus\:bg-blue-300:focus{background-color:#57b0ff}.focus\:bg-blue-400:focus{background-color:#2e9dff}.focus\:bg-blue-500:focus{background-color:#058aff}.focus\:bg-blue-600:focus{background-color:#0075db}.focus\:bg-blue-700:focus{background-color:#005fb3}.focus\:bg-blue-800:focus{background-color:#00498a}.focus\:bg-blue-900:focus{background-color:#003461}.focus\:bg-blue-DEFAULT:focus,.focus\:bg-blue:focus{background-color:#0075db}.focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.focus\:bg-indigo-DEFAULT:focus,.focus\:bg-indigo:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.focus\:bg-purple-DEFAULT:focus,.focus\:bg-purple:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.focus\:bg-pink:focus{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.focus\:bg-inherit:focus{background-color:inherit}.focus\:bg-amber:focus{background-color:#d78737}.focus\:bg-amber-active:focus{background-color:#e3872b}.focus\:bg-ardoise:focus{background-color:#596a82}.focus\:bg-ardoise-active:focus{background-color:#476794}.focus\:bg-blue-active:focus{background-color:#14a5c2}.focus\:bg-lightBlue-active:focus,.focus\:bg-lightBlue:focus{background-color:rgba(0,85,138,.1)}.focus\:bg-deepBlue:focus{background-color:#0e346c}.focus\:bg-deepBlue-active:focus{background-color:#0a3f8f}.focus\:bg-gold:focus{background-color:#bd9e56}.focus\:bg-gold-active:focus{background-color:#c9a34a}.focus\:bg-grenadine:focus{background-color:#c35078}.focus\:bg-grenadine-active:focus{background-color:#cf4475}.focus\:bg-kiwi:focus{background-color:#9a9f1e}.focus\:bg-kiwi-active:focus{background-color:#a3a815}.focus\:bg-lilas:focus{background-color:#7ea1d3}.focus\:bg-lilas-active:focus{background-color:#75a0db}.focus\:bg-mahogany:focus{background-color:#57142e}.focus\:bg-mahogany-active:focus{background-color:#610a2b}.focus\:bg-ocher:focus{background-color:#c29614}.focus\:bg-ocher-active:focus{background-color:#cd9c0a}.focus\:bg-pine:focus{background-color:#144d52}.focus\:bg-pine-active:focus{background-color:#0a555c}.focus\:bg-platinum-active:focus,.focus\:bg-platinum:focus{background-color:#000}.focus\:bg-prune:focus{background-color:#661456}.focus\:bg-prune-active:focus{background-color:#72085d}.focus\:bg-sand:focus{background-color:#d7be88}.focus\:bg-sand-active:focus{background-color:#dfc181}.focus\:bg-sandPearl:focus{background-color:#f0e5d6}.focus\:bg-sandPearl-active:focus{background-color:#f2e6d4}.focus\:bg-silver:focus{background-color:#b1b2b4}.focus\:bg-silver-active:focus{background-color:#a9afbc}.focus\:bg-skyBlue:focus{background-color:#98d2d7}.focus\:bg-skyBlue-active:focus{background-color:#91d8de}.focus\:bg-southSea:focus{background-color:#9dc9cd}.focus\:bg-southSea-active:focus{background-color:#95ced5}.focus\:bg-turquoise:focus{background-color:#14a5c2}.focus\:bg-turquoise-active:focus{background-color:#0aaccd}.focus\:bg-waterGreen:focus{background-color:#007571}.focus\:bg-waterGreen-active:focus{background-color:#00a8a3}.focus\:bg-deepRed:focus{background-color:#c32222}.focus\:bg-deepRed-active:focus{background-color:#cf1717}.focus\:bg-emerald:focus{background-color:#14a33a}.focus\:bg-emerald-active:focus{background-color:#0bad36}.focus\:bg-greenLight:focus{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.focus\:bg-orange-active:focus{background-color:#f65f2c}.focus\:bg-red-active:focus{background-color:#e13737}.focus\:bg-white-active:focus{background-color:#14a5c2}.focus\:bg-white-button-active:focus,.focus\:bg-white-button:focus{background-color:#fff}.focus\:bg-code:focus{background-color:#3f3d57}.focus\:bg-code-active:focus{background-color:#37354b}.focus\:bg-gray-lighter:focus{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.focus\:bg-gray-lighter-active:focus{background-color:#ebebeb}.focus\:bg-gray-light:focus{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.focus\:bg-gray-medium:focus{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.focus\:bg-gray-darker:focus{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.focus\:bg-gray-darker-active:focus{background-color:#14a5c2}.focus\:bg-api-default:focus{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.focus\:bg-gray-xxl:focus{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.focus\:bg-line-even:focus{background-color:#f3f6f7}.bg-none{background-image:none}.bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))}.bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.from-gray,.from-gray-DEFAULT{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.from-red{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.from-orange{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.from-yellow{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.from-green,.from-green-DEFAULT{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.from-teal,.from-teal-DEFAULT{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.from-blue-50{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.from-blue-100{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.from-blue-200{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.from-blue-300{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.from-blue-400{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.from-blue-500{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.from-blue-600{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.from-blue-700{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.from-blue-800{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.from-blue-900{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.from-blue,.from-blue-DEFAULT{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.from-indigo,.from-indigo-DEFAULT{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.from-purple,.from-purple-DEFAULT{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.from-pink{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.from-inherit{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.from-amber{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.from-amber-active{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.from-ardoise{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.from-ardoise-active{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.from-blue-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.from-lightBlue,.from-lightBlue-active{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.from-deepBlue{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.from-deepBlue-active{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.from-gold{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.from-gold-active{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.from-grenadine{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.from-grenadine-active{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.from-kiwi{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.from-kiwi-active{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.from-lilas{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.from-lilas-active{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.from-mahogany{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.from-mahogany-active{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.from-ocher{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.from-ocher-active{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.from-pine{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.from-pine-active{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.from-platinum,.from-platinum-active{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.from-prune{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.from-prune-active{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.from-sand{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.from-sand-active{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.from-sandPearl{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.from-sandPearl-active{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.from-silver{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.from-silver-active{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.from-skyBlue{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.from-skyBlue-active{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.from-southSea{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.from-southSea-active{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.from-turquoise{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.from-turquoise-active{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.from-waterGreen{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.from-waterGreen-active{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.from-deepRed{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.from-deepRed-active{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.from-emerald{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.from-emerald-active{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.from-greenLight{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.from-orange-active{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.from-red-active{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.from-white-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.from-white-button,.from-white-button-active{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.from-code{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.from-code-active{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.from-gray-lighter{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.from-gray-lighter-active{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.from-gray-light{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.from-gray-medium{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.from-gray-darker{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.from-gray-darker-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.from-api-default{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.from-gray-xxl{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.from-line-even{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.via-gray,.via-gray-DEFAULT{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.via-red{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.via-orange{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.via-yellow{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.via-green,.via-green-DEFAULT{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.via-teal,.via-teal-DEFAULT{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.via-blue-50{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.via-blue-100{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.via-blue-200{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.via-blue-300{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.via-blue-400{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.via-blue-500{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.via-blue-600{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.via-blue-700{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.via-blue-800{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.via-blue-900{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.via-blue,.via-blue-DEFAULT{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.via-indigo,.via-indigo-DEFAULT{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.via-purple,.via-purple-DEFAULT{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.via-pink{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.via-inherit{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.via-amber{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.via-amber-active{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.via-ardoise{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.via-ardoise-active{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.via-blue-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.via-lightBlue,.via-lightBlue-active{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.via-deepBlue{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.via-deepBlue-active{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.via-gold{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.via-gold-active{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.via-grenadine{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.via-grenadine-active{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.via-kiwi{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.via-kiwi-active{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.via-lilas{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.via-lilas-active{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.via-mahogany{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.via-mahogany-active{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.via-ocher{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.via-ocher-active{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.via-pine{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.via-pine-active{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.via-platinum,.via-platinum-active{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.via-prune{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.via-prune-active{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.via-sand{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.via-sand-active{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.via-sandPearl{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.via-sandPearl-active{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.via-silver{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.via-silver-active{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.via-skyBlue{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.via-skyBlue-active{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.via-southSea{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.via-southSea-active{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.via-turquoise{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.via-turquoise-active{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.via-waterGreen{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.via-waterGreen-active{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.via-deepRed{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.via-deepRed-active{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.via-emerald{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.via-emerald-active{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.via-greenLight{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.via-orange-active{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.via-red-active{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.via-white-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.via-white-button,.via-white-button-active{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.via-code{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.via-code-active{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.via-gray-lighter{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.via-gray-lighter-active{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.via-gray-light{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.via-gray-medium{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.via-gray-darker{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.via-gray-darker-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.via-api-default{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.via-gray-xxl{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.via-line-even{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.to-transparent{--gradient-to-color:transparent}.to-current{--gradient-to-color:currentColor}.to-black{--gradient-to-color:#000}.to-white{--gradient-to-color:#fff}.to-gray-100{--gradient-to-color:#f7fafc}.to-gray-200{--gradient-to-color:#edf2f7}.to-gray-300{--gradient-to-color:#e2e8f0}.to-gray-400{--gradient-to-color:#cbd5e0}.to-gray-500{--gradient-to-color:#a0aec0}.to-gray-600{--gradient-to-color:#718096}.to-gray-700{--gradient-to-color:#4a5568}.to-gray-800{--gradient-to-color:#2d3748}.to-gray-900{--gradient-to-color:#1a202c}.to-gray,.to-gray-DEFAULT{--gradient-to-color:#718096}.to-red{--gradient-to-color:#d64343}.to-orange{--gradient-to-color:#eb6437}.to-yellow{--gradient-to-color:#f8da30}.to-green-100{--gradient-to-color:#f0fff4}.to-green-200{--gradient-to-color:#c6f6d5}.to-green-300{--gradient-to-color:#9ae6b4}.to-green-400{--gradient-to-color:#68d391}.to-green-500{--gradient-to-color:#48bb78}.to-green-600{--gradient-to-color:#38a169}.to-green-700{--gradient-to-color:#2f855a}.to-green-800{--gradient-to-color:#276749}.to-green-900{--gradient-to-color:#22543d}.to-green,.to-green-DEFAULT{--gradient-to-color:#38a169}.to-teal-100{--gradient-to-color:#e6fffa}.to-teal-200{--gradient-to-color:#b2f5ea}.to-teal-300{--gradient-to-color:#81e6d9}.to-teal-400{--gradient-to-color:#4fd1c5}.to-teal-500{--gradient-to-color:#38b2ac}.to-teal-600{--gradient-to-color:#319795}.to-teal-700{--gradient-to-color:#2c7a7b}.to-teal-800{--gradient-to-color:#285e61}.to-teal-900{--gradient-to-color:#234e52}.to-teal,.to-teal-DEFAULT{--gradient-to-color:#319795}.to-blue-50{--gradient-to-color:#d1eaff}.to-blue-100{--gradient-to-color:#a8d7ff}.to-blue-200{--gradient-to-color:#80c4ff}.to-blue-300{--gradient-to-color:#57b0ff}.to-blue-400{--gradient-to-color:#2e9dff}.to-blue-500{--gradient-to-color:#058aff}.to-blue-600{--gradient-to-color:#0075db}.to-blue-700{--gradient-to-color:#005fb3}.to-blue-800{--gradient-to-color:#00498a}.to-blue-900{--gradient-to-color:#003461}.to-blue,.to-blue-DEFAULT{--gradient-to-color:#0075db}.to-indigo-100{--gradient-to-color:#ebf4ff}.to-indigo-200{--gradient-to-color:#c3dafe}.to-indigo-300{--gradient-to-color:#a3bffa}.to-indigo-400{--gradient-to-color:#7f9cf5}.to-indigo-500{--gradient-to-color:#667eea}.to-indigo-600{--gradient-to-color:#5a67d8}.to-indigo-700{--gradient-to-color:#4c51bf}.to-indigo-800{--gradient-to-color:#434190}.to-indigo-900{--gradient-to-color:#3c366b}.to-indigo,.to-indigo-DEFAULT{--gradient-to-color:#5a67d8}.to-purple-100{--gradient-to-color:#faf5ff}.to-purple-200{--gradient-to-color:#e9d8fd}.to-purple-300{--gradient-to-color:#d6bcfa}.to-purple-400{--gradient-to-color:#b794f4}.to-purple-500{--gradient-to-color:#9f7aea}.to-purple-600{--gradient-to-color:#805ad5}.to-purple-700{--gradient-to-color:#6b46c1}.to-purple-800{--gradient-to-color:#553c9a}.to-purple-900{--gradient-to-color:#44337a}.to-purple,.to-purple-DEFAULT{--gradient-to-color:#805ad5}.to-pink{--gradient-to-color:#d81b60}.to-inherit{--gradient-to-color:inherit}.to-amber{--gradient-to-color:#d78737}.to-amber-active{--gradient-to-color:#e3872b}.to-ardoise{--gradient-to-color:#596a82}.to-ardoise-active{--gradient-to-color:#476794}.to-blue-active{--gradient-to-color:#14a5c2}.to-lightBlue,.to-lightBlue-active{--gradient-to-color:rgba(0,85,138,0.1)}.to-deepBlue{--gradient-to-color:#0e346c}.to-deepBlue-active{--gradient-to-color:#0a3f8f}.to-gold{--gradient-to-color:#bd9e56}.to-gold-active{--gradient-to-color:#c9a34a}.to-grenadine{--gradient-to-color:#c35078}.to-grenadine-active{--gradient-to-color:#cf4475}.to-kiwi{--gradient-to-color:#9a9f1e}.to-kiwi-active{--gradient-to-color:#a3a815}.to-lilas{--gradient-to-color:#7ea1d3}.to-lilas-active{--gradient-to-color:#75a0db}.to-mahogany{--gradient-to-color:#57142e}.to-mahogany-active{--gradient-to-color:#610a2b}.to-ocher{--gradient-to-color:#c29614}.to-ocher-active{--gradient-to-color:#cd9c0a}.to-pine{--gradient-to-color:#144d52}.to-pine-active{--gradient-to-color:#0a555c}.to-platinum,.to-platinum-active{--gradient-to-color:#000}.to-prune{--gradient-to-color:#661456}.to-prune-active{--gradient-to-color:#72085d}.to-sand{--gradient-to-color:#d7be88}.to-sand-active{--gradient-to-color:#dfc181}.to-sandPearl{--gradient-to-color:#f0e5d6}.to-sandPearl-active{--gradient-to-color:#f2e6d4}.to-silver{--gradient-to-color:#b1b2b4}.to-silver-active{--gradient-to-color:#a9afbc}.to-skyBlue{--gradient-to-color:#98d2d7}.to-skyBlue-active{--gradient-to-color:#91d8de}.to-southSea{--gradient-to-color:#9dc9cd}.to-southSea-active{--gradient-to-color:#95ced5}.to-turquoise{--gradient-to-color:#14a5c2}.to-turquoise-active{--gradient-to-color:#0aaccd}.to-waterGreen{--gradient-to-color:#007571}.to-waterGreen-active{--gradient-to-color:#00a8a3}.to-deepRed{--gradient-to-color:#c32222}.to-deepRed-active{--gradient-to-color:#cf1717}.to-emerald{--gradient-to-color:#14a33a}.to-emerald-active{--gradient-to-color:#0bad36}.to-greenLight{--gradient-to-color:#7cb342}.to-orange-active{--gradient-to-color:#f65f2c}.to-red-active{--gradient-to-color:#e13737}.to-white-active{--gradient-to-color:#14a5c2}.to-white-button,.to-white-button-active{--gradient-to-color:#fff}.to-code{--gradient-to-color:#3f3d57}.to-code-active{--gradient-to-color:#37354b}.to-gray-lighter{--gradient-to-color:#f7f7f7}.to-gray-lighter-active{--gradient-to-color:#ebebeb}.to-gray-light{--gradient-to-color:#d4d1d1}.to-gray-medium{--gradient-to-color:#a8a0a0}.to-gray-darker{--gradient-to-color:#504747}.to-gray-darker-active{--gradient-to-color:#14a5c2}.to-api-default{--gradient-to-color:#507192}.to-gray-xxl{--gradient-to-color:#2c3e50}.to-line-even{--gradient-to-color:#f3f6f7}.hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.hover\:from-gray-DEFAULT:hover,.hover\:from-gray:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.hover\:from-red:hover{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.hover\:from-orange:hover{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.hover\:from-yellow:hover{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.hover\:from-green-DEFAULT:hover,.hover\:from-green:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.hover\:from-teal-DEFAULT:hover,.hover\:from-teal:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.hover\:from-blue-50:hover{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.hover\:from-blue-100:hover{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.hover\:from-blue-200:hover{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.hover\:from-blue-300:hover{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.hover\:from-blue-400:hover{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.hover\:from-blue-500:hover{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.hover\:from-blue-600:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.hover\:from-blue-700:hover{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.hover\:from-blue-800:hover{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.hover\:from-blue-900:hover{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.hover\:from-blue-DEFAULT:hover,.hover\:from-blue:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.hover\:from-indigo-DEFAULT:hover,.hover\:from-indigo:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.hover\:from-purple-DEFAULT:hover,.hover\:from-purple:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.hover\:from-pink:hover{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.hover\:from-inherit:hover{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.hover\:from-amber:hover{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.hover\:from-amber-active:hover{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.hover\:from-ardoise:hover{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.hover\:from-ardoise-active:hover{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.hover\:from-blue-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.hover\:from-lightBlue-active:hover,.hover\:from-lightBlue:hover{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.hover\:from-deepBlue:hover{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.hover\:from-deepBlue-active:hover{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.hover\:from-gold:hover{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.hover\:from-gold-active:hover{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.hover\:from-grenadine:hover{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.hover\:from-grenadine-active:hover{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.hover\:from-kiwi:hover{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.hover\:from-kiwi-active:hover{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.hover\:from-lilas:hover{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.hover\:from-lilas-active:hover{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.hover\:from-mahogany:hover{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.hover\:from-mahogany-active:hover{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.hover\:from-ocher:hover{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.hover\:from-ocher-active:hover{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.hover\:from-pine:hover{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.hover\:from-pine-active:hover{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.hover\:from-platinum-active:hover,.hover\:from-platinum:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.hover\:from-prune:hover{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.hover\:from-prune-active:hover{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.hover\:from-sand:hover{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.hover\:from-sand-active:hover{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.hover\:from-sandPearl:hover{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.hover\:from-sandPearl-active:hover{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.hover\:from-silver:hover{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.hover\:from-silver-active:hover{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.hover\:from-skyBlue:hover{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.hover\:from-skyBlue-active:hover{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.hover\:from-southSea:hover{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.hover\:from-southSea-active:hover{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.hover\:from-turquoise:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.hover\:from-turquoise-active:hover{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.hover\:from-waterGreen:hover{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.hover\:from-waterGreen-active:hover{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.hover\:from-deepRed:hover{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.hover\:from-deepRed-active:hover{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.hover\:from-emerald:hover{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.hover\:from-emerald-active:hover{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.hover\:from-greenLight:hover{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.hover\:from-orange-active:hover{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.hover\:from-red-active:hover{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.hover\:from-white-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.hover\:from-white-button-active:hover,.hover\:from-white-button:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.hover\:from-code:hover{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.hover\:from-code-active:hover{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.hover\:from-gray-lighter:hover{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.hover\:from-gray-lighter-active:hover{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.hover\:from-gray-light:hover{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.hover\:from-gray-medium:hover{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.hover\:from-gray-darker:hover{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.hover\:from-gray-darker-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.hover\:from-api-default:hover{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.hover\:from-gray-xxl:hover{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.hover\:from-line-even:hover{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.hover\:via-gray-DEFAULT:hover,.hover\:via-gray:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.hover\:via-red:hover{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.hover\:via-orange:hover{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.hover\:via-yellow:hover{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.hover\:via-green-DEFAULT:hover,.hover\:via-green:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.hover\:via-teal-DEFAULT:hover,.hover\:via-teal:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.hover\:via-blue-50:hover{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.hover\:via-blue-100:hover{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.hover\:via-blue-200:hover{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.hover\:via-blue-300:hover{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.hover\:via-blue-400:hover{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.hover\:via-blue-500:hover{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.hover\:via-blue-600:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.hover\:via-blue-700:hover{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.hover\:via-blue-800:hover{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.hover\:via-blue-900:hover{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.hover\:via-blue-DEFAULT:hover,.hover\:via-blue:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.hover\:via-indigo-DEFAULT:hover,.hover\:via-indigo:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.hover\:via-purple-DEFAULT:hover,.hover\:via-purple:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.hover\:via-pink:hover{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.hover\:via-inherit:hover{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.hover\:via-amber:hover{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.hover\:via-amber-active:hover{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.hover\:via-ardoise:hover{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.hover\:via-ardoise-active:hover{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.hover\:via-blue-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.hover\:via-lightBlue-active:hover,.hover\:via-lightBlue:hover{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.hover\:via-deepBlue:hover{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.hover\:via-deepBlue-active:hover{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.hover\:via-gold:hover{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.hover\:via-gold-active:hover{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.hover\:via-grenadine:hover{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.hover\:via-grenadine-active:hover{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.hover\:via-kiwi:hover{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.hover\:via-kiwi-active:hover{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.hover\:via-lilas:hover{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.hover\:via-lilas-active:hover{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.hover\:via-mahogany:hover{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.hover\:via-mahogany-active:hover{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.hover\:via-ocher:hover{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.hover\:via-ocher-active:hover{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.hover\:via-pine:hover{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.hover\:via-pine-active:hover{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.hover\:via-platinum-active:hover,.hover\:via-platinum:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.hover\:via-prune:hover{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.hover\:via-prune-active:hover{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.hover\:via-sand:hover{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.hover\:via-sand-active:hover{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.hover\:via-sandPearl:hover{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.hover\:via-sandPearl-active:hover{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.hover\:via-silver:hover{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.hover\:via-silver-active:hover{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.hover\:via-skyBlue:hover{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.hover\:via-skyBlue-active:hover{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.hover\:via-southSea:hover{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.hover\:via-southSea-active:hover{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.hover\:via-turquoise:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.hover\:via-turquoise-active:hover{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.hover\:via-waterGreen:hover{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.hover\:via-waterGreen-active:hover{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.hover\:via-deepRed:hover{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.hover\:via-deepRed-active:hover{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.hover\:via-emerald:hover{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.hover\:via-emerald-active:hover{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.hover\:via-greenLight:hover{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.hover\:via-orange-active:hover{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.hover\:via-red-active:hover{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.hover\:via-white-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.hover\:via-white-button-active:hover,.hover\:via-white-button:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.hover\:via-code:hover{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.hover\:via-code-active:hover{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.hover\:via-gray-lighter:hover{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.hover\:via-gray-lighter-active:hover{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.hover\:via-gray-light:hover{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.hover\:via-gray-medium:hover{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.hover\:via-gray-darker:hover{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.hover\:via-gray-darker-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.hover\:via-api-default:hover{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.hover\:via-gray-xxl:hover{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.hover\:via-line-even:hover{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.hover\:to-transparent:hover{--gradient-to-color:transparent}.hover\:to-current:hover{--gradient-to-color:currentColor}.hover\:to-black:hover{--gradient-to-color:#000}.hover\:to-white:hover{--gradient-to-color:#fff}.hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.hover\:to-gray-600:hover{--gradient-to-color:#718096}.hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.hover\:to-gray-DEFAULT:hover,.hover\:to-gray:hover{--gradient-to-color:#718096}.hover\:to-red:hover{--gradient-to-color:#d64343}.hover\:to-orange:hover{--gradient-to-color:#eb6437}.hover\:to-yellow:hover{--gradient-to-color:#f8da30}.hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.hover\:to-green-400:hover{--gradient-to-color:#68d391}.hover\:to-green-500:hover{--gradient-to-color:#48bb78}.hover\:to-green-600:hover{--gradient-to-color:#38a169}.hover\:to-green-700:hover{--gradient-to-color:#2f855a}.hover\:to-green-800:hover{--gradient-to-color:#276749}.hover\:to-green-900:hover{--gradient-to-color:#22543d}.hover\:to-green-DEFAULT:hover,.hover\:to-green:hover{--gradient-to-color:#38a169}.hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.hover\:to-teal-600:hover{--gradient-to-color:#319795}.hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.hover\:to-teal-800:hover{--gradient-to-color:#285e61}.hover\:to-teal-900:hover{--gradient-to-color:#234e52}.hover\:to-teal-DEFAULT:hover,.hover\:to-teal:hover{--gradient-to-color:#319795}.hover\:to-blue-50:hover{--gradient-to-color:#d1eaff}.hover\:to-blue-100:hover{--gradient-to-color:#a8d7ff}.hover\:to-blue-200:hover{--gradient-to-color:#80c4ff}.hover\:to-blue-300:hover{--gradient-to-color:#57b0ff}.hover\:to-blue-400:hover{--gradient-to-color:#2e9dff}.hover\:to-blue-500:hover{--gradient-to-color:#058aff}.hover\:to-blue-600:hover{--gradient-to-color:#0075db}.hover\:to-blue-700:hover{--gradient-to-color:#005fb3}.hover\:to-blue-800:hover{--gradient-to-color:#00498a}.hover\:to-blue-900:hover{--gradient-to-color:#003461}.hover\:to-blue-DEFAULT:hover,.hover\:to-blue:hover{--gradient-to-color:#0075db}.hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.hover\:to-indigo-800:hover{--gradient-to-color:#434190}.hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.hover\:to-indigo-DEFAULT:hover,.hover\:to-indigo:hover{--gradient-to-color:#5a67d8}.hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.hover\:to-purple-900:hover{--gradient-to-color:#44337a}.hover\:to-purple-DEFAULT:hover,.hover\:to-purple:hover{--gradient-to-color:#805ad5}.hover\:to-pink:hover{--gradient-to-color:#d81b60}.hover\:to-inherit:hover{--gradient-to-color:inherit}.hover\:to-amber:hover{--gradient-to-color:#d78737}.hover\:to-amber-active:hover{--gradient-to-color:#e3872b}.hover\:to-ardoise:hover{--gradient-to-color:#596a82}.hover\:to-ardoise-active:hover{--gradient-to-color:#476794}.hover\:to-blue-active:hover{--gradient-to-color:#14a5c2}.hover\:to-lightBlue-active:hover,.hover\:to-lightBlue:hover{--gradient-to-color:rgba(0,85,138,0.1)}.hover\:to-deepBlue:hover{--gradient-to-color:#0e346c}.hover\:to-deepBlue-active:hover{--gradient-to-color:#0a3f8f}.hover\:to-gold:hover{--gradient-to-color:#bd9e56}.hover\:to-gold-active:hover{--gradient-to-color:#c9a34a}.hover\:to-grenadine:hover{--gradient-to-color:#c35078}.hover\:to-grenadine-active:hover{--gradient-to-color:#cf4475}.hover\:to-kiwi:hover{--gradient-to-color:#9a9f1e}.hover\:to-kiwi-active:hover{--gradient-to-color:#a3a815}.hover\:to-lilas:hover{--gradient-to-color:#7ea1d3}.hover\:to-lilas-active:hover{--gradient-to-color:#75a0db}.hover\:to-mahogany:hover{--gradient-to-color:#57142e}.hover\:to-mahogany-active:hover{--gradient-to-color:#610a2b}.hover\:to-ocher:hover{--gradient-to-color:#c29614}.hover\:to-ocher-active:hover{--gradient-to-color:#cd9c0a}.hover\:to-pine:hover{--gradient-to-color:#144d52}.hover\:to-pine-active:hover{--gradient-to-color:#0a555c}.hover\:to-platinum-active:hover,.hover\:to-platinum:hover{--gradient-to-color:#000}.hover\:to-prune:hover{--gradient-to-color:#661456}.hover\:to-prune-active:hover{--gradient-to-color:#72085d}.hover\:to-sand:hover{--gradient-to-color:#d7be88}.hover\:to-sand-active:hover{--gradient-to-color:#dfc181}.hover\:to-sandPearl:hover{--gradient-to-color:#f0e5d6}.hover\:to-sandPearl-active:hover{--gradient-to-color:#f2e6d4}.hover\:to-silver:hover{--gradient-to-color:#b1b2b4}.hover\:to-silver-active:hover{--gradient-to-color:#a9afbc}.hover\:to-skyBlue:hover{--gradient-to-color:#98d2d7}.hover\:to-skyBlue-active:hover{--gradient-to-color:#91d8de}.hover\:to-southSea:hover{--gradient-to-color:#9dc9cd}.hover\:to-southSea-active:hover{--gradient-to-color:#95ced5}.hover\:to-turquoise:hover{--gradient-to-color:#14a5c2}.hover\:to-turquoise-active:hover{--gradient-to-color:#0aaccd}.hover\:to-waterGreen:hover{--gradient-to-color:#007571}.hover\:to-waterGreen-active:hover{--gradient-to-color:#00a8a3}.hover\:to-deepRed:hover{--gradient-to-color:#c32222}.hover\:to-deepRed-active:hover{--gradient-to-color:#cf1717}.hover\:to-emerald:hover{--gradient-to-color:#14a33a}.hover\:to-emerald-active:hover{--gradient-to-color:#0bad36}.hover\:to-greenLight:hover{--gradient-to-color:#7cb342}.hover\:to-orange-active:hover{--gradient-to-color:#f65f2c}.hover\:to-red-active:hover{--gradient-to-color:#e13737}.hover\:to-white-active:hover{--gradient-to-color:#14a5c2}.hover\:to-white-button-active:hover,.hover\:to-white-button:hover{--gradient-to-color:#fff}.hover\:to-code:hover{--gradient-to-color:#3f3d57}.hover\:to-code-active:hover{--gradient-to-color:#37354b}.hover\:to-gray-lighter:hover{--gradient-to-color:#f7f7f7}.hover\:to-gray-lighter-active:hover{--gradient-to-color:#ebebeb}.hover\:to-gray-light:hover{--gradient-to-color:#d4d1d1}.hover\:to-gray-medium:hover{--gradient-to-color:#a8a0a0}.hover\:to-gray-darker:hover{--gradient-to-color:#504747}.hover\:to-gray-darker-active:hover{--gradient-to-color:#14a5c2}.hover\:to-api-default:hover{--gradient-to-color:#507192}.hover\:to-gray-xxl:hover{--gradient-to-color:#2c3e50}.hover\:to-line-even:hover{--gradient-to-color:#f3f6f7}.focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.focus\:from-gray-DEFAULT:focus,.focus\:from-gray:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.focus\:from-red:focus{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.focus\:from-orange:focus{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.focus\:from-yellow:focus{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.focus\:from-green-DEFAULT:focus,.focus\:from-green:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.focus\:from-teal-DEFAULT:focus,.focus\:from-teal:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.focus\:from-blue-50:focus{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.focus\:from-blue-100:focus{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.focus\:from-blue-200:focus{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.focus\:from-blue-300:focus{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.focus\:from-blue-400:focus{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.focus\:from-blue-500:focus{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.focus\:from-blue-600:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.focus\:from-blue-700:focus{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.focus\:from-blue-800:focus{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.focus\:from-blue-900:focus{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.focus\:from-blue-DEFAULT:focus,.focus\:from-blue:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.focus\:from-indigo-DEFAULT:focus,.focus\:from-indigo:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.focus\:from-purple-DEFAULT:focus,.focus\:from-purple:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.focus\:from-pink:focus{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.focus\:from-inherit:focus{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.focus\:from-amber:focus{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.focus\:from-amber-active:focus{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.focus\:from-ardoise:focus{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.focus\:from-ardoise-active:focus{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.focus\:from-blue-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.focus\:from-lightBlue-active:focus,.focus\:from-lightBlue:focus{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.focus\:from-deepBlue:focus{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.focus\:from-deepBlue-active:focus{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.focus\:from-gold:focus{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.focus\:from-gold-active:focus{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.focus\:from-grenadine:focus{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.focus\:from-grenadine-active:focus{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.focus\:from-kiwi:focus{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.focus\:from-kiwi-active:focus{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.focus\:from-lilas:focus{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.focus\:from-lilas-active:focus{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.focus\:from-mahogany:focus{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.focus\:from-mahogany-active:focus{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.focus\:from-ocher:focus{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.focus\:from-ocher-active:focus{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.focus\:from-pine:focus{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.focus\:from-pine-active:focus{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.focus\:from-platinum-active:focus,.focus\:from-platinum:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.focus\:from-prune:focus{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.focus\:from-prune-active:focus{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.focus\:from-sand:focus{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.focus\:from-sand-active:focus{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.focus\:from-sandPearl:focus{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.focus\:from-sandPearl-active:focus{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.focus\:from-silver:focus{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.focus\:from-silver-active:focus{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.focus\:from-skyBlue:focus{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.focus\:from-skyBlue-active:focus{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.focus\:from-southSea:focus{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.focus\:from-southSea-active:focus{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.focus\:from-turquoise:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.focus\:from-turquoise-active:focus{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.focus\:from-waterGreen:focus{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.focus\:from-waterGreen-active:focus{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.focus\:from-deepRed:focus{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.focus\:from-deepRed-active:focus{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.focus\:from-emerald:focus{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.focus\:from-emerald-active:focus{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.focus\:from-greenLight:focus{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.focus\:from-orange-active:focus{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.focus\:from-red-active:focus{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.focus\:from-white-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.focus\:from-white-button-active:focus,.focus\:from-white-button:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.focus\:from-code:focus{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.focus\:from-code-active:focus{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.focus\:from-gray-lighter:focus{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.focus\:from-gray-lighter-active:focus{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.focus\:from-gray-light:focus{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.focus\:from-gray-medium:focus{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.focus\:from-gray-darker:focus{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.focus\:from-gray-darker-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.focus\:from-api-default:focus{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.focus\:from-gray-xxl:focus{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.focus\:from-line-even:focus{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.focus\:via-gray-DEFAULT:focus,.focus\:via-gray:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.focus\:via-red:focus{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.focus\:via-orange:focus{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.focus\:via-yellow:focus{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.focus\:via-green-DEFAULT:focus,.focus\:via-green:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.focus\:via-teal-DEFAULT:focus,.focus\:via-teal:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.focus\:via-blue-50:focus{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.focus\:via-blue-100:focus{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.focus\:via-blue-200:focus{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.focus\:via-blue-300:focus{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.focus\:via-blue-400:focus{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.focus\:via-blue-500:focus{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.focus\:via-blue-600:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.focus\:via-blue-700:focus{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.focus\:via-blue-800:focus{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.focus\:via-blue-900:focus{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.focus\:via-blue-DEFAULT:focus,.focus\:via-blue:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.focus\:via-indigo-DEFAULT:focus,.focus\:via-indigo:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.focus\:via-purple-DEFAULT:focus,.focus\:via-purple:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.focus\:via-pink:focus{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.focus\:via-inherit:focus{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.focus\:via-amber:focus{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.focus\:via-amber-active:focus{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.focus\:via-ardoise:focus{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.focus\:via-ardoise-active:focus{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.focus\:via-blue-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.focus\:via-lightBlue-active:focus,.focus\:via-lightBlue:focus{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.focus\:via-deepBlue:focus{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.focus\:via-deepBlue-active:focus{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.focus\:via-gold:focus{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.focus\:via-gold-active:focus{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.focus\:via-grenadine:focus{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.focus\:via-grenadine-active:focus{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.focus\:via-kiwi:focus{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.focus\:via-kiwi-active:focus{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.focus\:via-lilas:focus{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.focus\:via-lilas-active:focus{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.focus\:via-mahogany:focus{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.focus\:via-mahogany-active:focus{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.focus\:via-ocher:focus{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.focus\:via-ocher-active:focus{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.focus\:via-pine:focus{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.focus\:via-pine-active:focus{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.focus\:via-platinum-active:focus,.focus\:via-platinum:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.focus\:via-prune:focus{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.focus\:via-prune-active:focus{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.focus\:via-sand:focus{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.focus\:via-sand-active:focus{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.focus\:via-sandPearl:focus{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.focus\:via-sandPearl-active:focus{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.focus\:via-silver:focus{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.focus\:via-silver-active:focus{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.focus\:via-skyBlue:focus{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.focus\:via-skyBlue-active:focus{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.focus\:via-southSea:focus{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.focus\:via-southSea-active:focus{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.focus\:via-turquoise:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.focus\:via-turquoise-active:focus{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.focus\:via-waterGreen:focus{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.focus\:via-waterGreen-active:focus{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.focus\:via-deepRed:focus{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.focus\:via-deepRed-active:focus{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.focus\:via-emerald:focus{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.focus\:via-emerald-active:focus{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.focus\:via-greenLight:focus{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.focus\:via-orange-active:focus{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.focus\:via-red-active:focus{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.focus\:via-white-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.focus\:via-white-button-active:focus,.focus\:via-white-button:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.focus\:via-code:focus{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.focus\:via-code-active:focus{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.focus\:via-gray-lighter:focus{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.focus\:via-gray-lighter-active:focus{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.focus\:via-gray-light:focus{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.focus\:via-gray-medium:focus{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.focus\:via-gray-darker:focus{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.focus\:via-gray-darker-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.focus\:via-api-default:focus{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.focus\:via-gray-xxl:focus{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.focus\:via-line-even:focus{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.focus\:to-transparent:focus{--gradient-to-color:transparent}.focus\:to-current:focus{--gradient-to-color:currentColor}.focus\:to-black:focus{--gradient-to-color:#000}.focus\:to-white:focus{--gradient-to-color:#fff}.focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.focus\:to-gray-600:focus{--gradient-to-color:#718096}.focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.focus\:to-gray-DEFAULT:focus,.focus\:to-gray:focus{--gradient-to-color:#718096}.focus\:to-red:focus{--gradient-to-color:#d64343}.focus\:to-orange:focus{--gradient-to-color:#eb6437}.focus\:to-yellow:focus{--gradient-to-color:#f8da30}.focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.focus\:to-green-400:focus{--gradient-to-color:#68d391}.focus\:to-green-500:focus{--gradient-to-color:#48bb78}.focus\:to-green-600:focus{--gradient-to-color:#38a169}.focus\:to-green-700:focus{--gradient-to-color:#2f855a}.focus\:to-green-800:focus{--gradient-to-color:#276749}.focus\:to-green-900:focus{--gradient-to-color:#22543d}.focus\:to-green-DEFAULT:focus,.focus\:to-green:focus{--gradient-to-color:#38a169}.focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.focus\:to-teal-600:focus{--gradient-to-color:#319795}.focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.focus\:to-teal-800:focus{--gradient-to-color:#285e61}.focus\:to-teal-900:focus{--gradient-to-color:#234e52}.focus\:to-teal-DEFAULT:focus,.focus\:to-teal:focus{--gradient-to-color:#319795}.focus\:to-blue-50:focus{--gradient-to-color:#d1eaff}.focus\:to-blue-100:focus{--gradient-to-color:#a8d7ff}.focus\:to-blue-200:focus{--gradient-to-color:#80c4ff}.focus\:to-blue-300:focus{--gradient-to-color:#57b0ff}.focus\:to-blue-400:focus{--gradient-to-color:#2e9dff}.focus\:to-blue-500:focus{--gradient-to-color:#058aff}.focus\:to-blue-600:focus{--gradient-to-color:#0075db}.focus\:to-blue-700:focus{--gradient-to-color:#005fb3}.focus\:to-blue-800:focus{--gradient-to-color:#00498a}.focus\:to-blue-900:focus{--gradient-to-color:#003461}.focus\:to-blue-DEFAULT:focus,.focus\:to-blue:focus{--gradient-to-color:#0075db}.focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.focus\:to-indigo-800:focus{--gradient-to-color:#434190}.focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.focus\:to-indigo-DEFAULT:focus,.focus\:to-indigo:focus{--gradient-to-color:#5a67d8}.focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.focus\:to-purple-900:focus{--gradient-to-color:#44337a}.focus\:to-purple-DEFAULT:focus,.focus\:to-purple:focus{--gradient-to-color:#805ad5}.focus\:to-pink:focus{--gradient-to-color:#d81b60}.focus\:to-inherit:focus{--gradient-to-color:inherit}.focus\:to-amber:focus{--gradient-to-color:#d78737}.focus\:to-amber-active:focus{--gradient-to-color:#e3872b}.focus\:to-ardoise:focus{--gradient-to-color:#596a82}.focus\:to-ardoise-active:focus{--gradient-to-color:#476794}.focus\:to-blue-active:focus{--gradient-to-color:#14a5c2}.focus\:to-lightBlue-active:focus,.focus\:to-lightBlue:focus{--gradient-to-color:rgba(0,85,138,0.1)}.focus\:to-deepBlue:focus{--gradient-to-color:#0e346c}.focus\:to-deepBlue-active:focus{--gradient-to-color:#0a3f8f}.focus\:to-gold:focus{--gradient-to-color:#bd9e56}.focus\:to-gold-active:focus{--gradient-to-color:#c9a34a}.focus\:to-grenadine:focus{--gradient-to-color:#c35078}.focus\:to-grenadine-active:focus{--gradient-to-color:#cf4475}.focus\:to-kiwi:focus{--gradient-to-color:#9a9f1e}.focus\:to-kiwi-active:focus{--gradient-to-color:#a3a815}.focus\:to-lilas:focus{--gradient-to-color:#7ea1d3}.focus\:to-lilas-active:focus{--gradient-to-color:#75a0db}.focus\:to-mahogany:focus{--gradient-to-color:#57142e}.focus\:to-mahogany-active:focus{--gradient-to-color:#610a2b}.focus\:to-ocher:focus{--gradient-to-color:#c29614}.focus\:to-ocher-active:focus{--gradient-to-color:#cd9c0a}.focus\:to-pine:focus{--gradient-to-color:#144d52}.focus\:to-pine-active:focus{--gradient-to-color:#0a555c}.focus\:to-platinum-active:focus,.focus\:to-platinum:focus{--gradient-to-color:#000}.focus\:to-prune:focus{--gradient-to-color:#661456}.focus\:to-prune-active:focus{--gradient-to-color:#72085d}.focus\:to-sand:focus{--gradient-to-color:#d7be88}.focus\:to-sand-active:focus{--gradient-to-color:#dfc181}.focus\:to-sandPearl:focus{--gradient-to-color:#f0e5d6}.focus\:to-sandPearl-active:focus{--gradient-to-color:#f2e6d4}.focus\:to-silver:focus{--gradient-to-color:#b1b2b4}.focus\:to-silver-active:focus{--gradient-to-color:#a9afbc}.focus\:to-skyBlue:focus{--gradient-to-color:#98d2d7}.focus\:to-skyBlue-active:focus{--gradient-to-color:#91d8de}.focus\:to-southSea:focus{--gradient-to-color:#9dc9cd}.focus\:to-southSea-active:focus{--gradient-to-color:#95ced5}.focus\:to-turquoise:focus{--gradient-to-color:#14a5c2}.focus\:to-turquoise-active:focus{--gradient-to-color:#0aaccd}.focus\:to-waterGreen:focus{--gradient-to-color:#007571}.focus\:to-waterGreen-active:focus{--gradient-to-color:#00a8a3}.focus\:to-deepRed:focus{--gradient-to-color:#c32222}.focus\:to-deepRed-active:focus{--gradient-to-color:#cf1717}.focus\:to-emerald:focus{--gradient-to-color:#14a33a}.focus\:to-emerald-active:focus{--gradient-to-color:#0bad36}.focus\:to-greenLight:focus{--gradient-to-color:#7cb342}.focus\:to-orange-active:focus{--gradient-to-color:#f65f2c}.focus\:to-red-active:focus{--gradient-to-color:#e13737}.focus\:to-white-active:focus{--gradient-to-color:#14a5c2}.focus\:to-white-button-active:focus,.focus\:to-white-button:focus{--gradient-to-color:#fff}.focus\:to-code:focus{--gradient-to-color:#3f3d57}.focus\:to-code-active:focus{--gradient-to-color:#37354b}.focus\:to-gray-lighter:focus{--gradient-to-color:#f7f7f7}.focus\:to-gray-lighter-active:focus{--gradient-to-color:#ebebeb}.focus\:to-gray-light:focus{--gradient-to-color:#d4d1d1}.focus\:to-gray-medium:focus{--gradient-to-color:#a8a0a0}.focus\:to-gray-darker:focus{--gradient-to-color:#504747}.focus\:to-gray-darker-active:focus{--gradient-to-color:#14a5c2}.focus\:to-api-default:focus{--gradient-to-color:#507192}.focus\:to-gray-xxl:focus{--gradient-to-color:#2c3e50}.focus\:to-line-even:focus{--gradient-to-color:#f3f6f7}.bg-opacity-0{--bg-opacity:0}.bg-opacity-25{--bg-opacity:0.25}.bg-opacity-50{--bg-opacity:0.5}.bg-opacity-75{--bg-opacity:0.75}.bg-opacity-100{--bg-opacity:1}.hover\:bg-opacity-0:hover{--bg-opacity:0}.hover\:bg-opacity-25:hover{--bg-opacity:0.25}.hover\:bg-opacity-50:hover{--bg-opacity:0.5}.hover\:bg-opacity-75:hover{--bg-opacity:0.75}.hover\:bg-opacity-100:hover{--bg-opacity:1}.focus\:bg-opacity-0:focus{--bg-opacity:0}.focus\:bg-opacity-25:focus{--bg-opacity:0.25}.focus\:bg-opacity-50:focus{--bg-opacity:0.5}.focus\:bg-opacity-75:focus{--bg-opacity:0.75}.focus\:bg-opacity-100:focus{--bg-opacity:1}.bg-bottom{background-position:bottom}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-left-bottom{background-position:0 100%}.bg-left-top{background-position:0 0}.bg-right{background-position:100%}.bg-right-bottom{background-position:100% 100%}.bg-right-top{background-position:100% 0}.bg-top{background-position:top}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-repeat-round{background-repeat:round}.bg-repeat-space{background-repeat:space}.bg-auto{background-size:auto}.bg-cover{background-size:cover}.bg-contain{background-size:contain}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-transparent{border-color:transparent}.border-current{border-color:currentColor}.border-black{border-color:#000}.border-white{border-color:#fff}.border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.border-gray,.border-gray-DEFAULT{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.border-red{border-color:#d64343}.border-orange{border-color:#eb6437}.border-yellow{border-color:#f8da30}.border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.border-green,.border-green-DEFAULT{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.border-teal,.border-teal-DEFAULT{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.border-blue-50{border-color:#d1eaff}.border-blue-100{border-color:#a8d7ff}.border-blue-200{border-color:#80c4ff}.border-blue-300{border-color:#57b0ff}.border-blue-400{border-color:#2e9dff}.border-blue-500{border-color:#058aff}.border-blue-600{border-color:#0075db}.border-blue-700{border-color:#005fb3}.border-blue-800{border-color:#00498a}.border-blue-900{border-color:#003461}.border-blue,.border-blue-DEFAULT{border-color:#0075db}.border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.border-indigo,.border-indigo-DEFAULT{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.border-purple,.border-purple-DEFAULT{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.border-pink{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.border-inherit{border-color:inherit}.border-amber{border-color:#d78737}.border-amber-active{border-color:#e3872b}.border-ardoise{border-color:#596a82}.border-ardoise-active{border-color:#476794}.border-blue-active{border-color:#14a5c2}.border-lightBlue,.border-lightBlue-active{border-color:rgba(0,85,138,.1)}.border-deepBlue{border-color:#0e346c}.border-deepBlue-active{border-color:#0a3f8f}.border-gold{border-color:#bd9e56}.border-gold-active{border-color:#c9a34a}.border-grenadine{border-color:#c35078}.border-grenadine-active{border-color:#cf4475}.border-kiwi{border-color:#9a9f1e}.border-kiwi-active{border-color:#a3a815}.border-lilas{border-color:#7ea1d3}.border-lilas-active{border-color:#75a0db}.border-mahogany{border-color:#57142e}.border-mahogany-active{border-color:#610a2b}.border-ocher{border-color:#c29614}.border-ocher-active{border-color:#cd9c0a}.border-pine{border-color:#144d52}.border-pine-active{border-color:#0a555c}.border-platinum,.border-platinum-active{border-color:#000}.border-prune{border-color:#661456}.border-prune-active{border-color:#72085d}.border-sand{border-color:#d7be88}.border-sand-active{border-color:#dfc181}.border-sandPearl{border-color:#f0e5d6}.border-sandPearl-active{border-color:#f2e6d4}.border-silver{border-color:#b1b2b4}.border-silver-active{border-color:#a9afbc}.border-skyBlue{border-color:#98d2d7}.border-skyBlue-active{border-color:#91d8de}.border-southSea{border-color:#9dc9cd}.border-southSea-active{border-color:#95ced5}.border-turquoise{border-color:#14a5c2}.border-turquoise-active{border-color:#0aaccd}.border-waterGreen{border-color:#007571}.border-waterGreen-active{border-color:#00a8a3}.border-deepRed{border-color:#c32222}.border-deepRed-active{border-color:#cf1717}.border-emerald{border-color:#14a33a}.border-emerald-active{border-color:#0bad36}.border-greenLight{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.border-orange-active{border-color:#f65f2c}.border-red-active{border-color:#e13737}.border-white-active{border-color:#14a5c2}.border-white-button,.border-white-button-active{border-color:#fff}.border-code{border-color:#3f3d57}.border-code-active{border-color:#37354b}.border-gray-lighter{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.border-gray-lighter-active{border-color:#ebebeb}.border-gray-light{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.border-gray-medium{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.border-gray-darker{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.border-gray-darker-active{border-color:#14a5c2}.border-api-default{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.border-gray-xxl{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.border-line-even{border-color:#f3f6f7}.border-DEFAULT{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.hover\:border-transparent:hover{border-color:transparent}.hover\:border-current:hover{border-color:currentColor}.hover\:border-black:hover{border-color:#000}.hover\:border-white:hover{border-color:#fff}.hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.hover\:border-gray-DEFAULT:hover,.hover\:border-gray:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.hover\:border-red:hover{border-color:#d64343}.hover\:border-orange:hover{border-color:#eb6437}.hover\:border-yellow:hover{border-color:#f8da30}.hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.hover\:border-green-DEFAULT:hover,.hover\:border-green:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.hover\:border-teal-DEFAULT:hover,.hover\:border-teal:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.hover\:border-blue-50:hover{border-color:#d1eaff}.hover\:border-blue-100:hover{border-color:#a8d7ff}.hover\:border-blue-200:hover{border-color:#80c4ff}.hover\:border-blue-300:hover{border-color:#57b0ff}.hover\:border-blue-400:hover{border-color:#2e9dff}.hover\:border-blue-500:hover{border-color:#058aff}.hover\:border-blue-600:hover{border-color:#0075db}.hover\:border-blue-700:hover{border-color:#005fb3}.hover\:border-blue-800:hover{border-color:#00498a}.hover\:border-blue-900:hover{border-color:#003461}.hover\:border-blue-DEFAULT:hover,.hover\:border-blue:hover{border-color:#0075db}.hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.hover\:border-indigo-DEFAULT:hover,.hover\:border-indigo:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.hover\:border-purple-DEFAULT:hover,.hover\:border-purple:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.hover\:border-pink:hover{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.hover\:border-inherit:hover{border-color:inherit}.hover\:border-amber:hover{border-color:#d78737}.hover\:border-amber-active:hover{border-color:#e3872b}.hover\:border-ardoise:hover{border-color:#596a82}.hover\:border-ardoise-active:hover{border-color:#476794}.hover\:border-blue-active:hover{border-color:#14a5c2}.hover\:border-lightBlue-active:hover,.hover\:border-lightBlue:hover{border-color:rgba(0,85,138,.1)}.hover\:border-deepBlue:hover{border-color:#0e346c}.hover\:border-deepBlue-active:hover{border-color:#0a3f8f}.hover\:border-gold:hover{border-color:#bd9e56}.hover\:border-gold-active:hover{border-color:#c9a34a}.hover\:border-grenadine:hover{border-color:#c35078}.hover\:border-grenadine-active:hover{border-color:#cf4475}.hover\:border-kiwi:hover{border-color:#9a9f1e}.hover\:border-kiwi-active:hover{border-color:#a3a815}.hover\:border-lilas:hover{border-color:#7ea1d3}.hover\:border-lilas-active:hover{border-color:#75a0db}.hover\:border-mahogany:hover{border-color:#57142e}.hover\:border-mahogany-active:hover{border-color:#610a2b}.hover\:border-ocher:hover{border-color:#c29614}.hover\:border-ocher-active:hover{border-color:#cd9c0a}.hover\:border-pine:hover{border-color:#144d52}.hover\:border-pine-active:hover{border-color:#0a555c}.hover\:border-platinum-active:hover,.hover\:border-platinum:hover{border-color:#000}.hover\:border-prune:hover{border-color:#661456}.hover\:border-prune-active:hover{border-color:#72085d}.hover\:border-sand:hover{border-color:#d7be88}.hover\:border-sand-active:hover{border-color:#dfc181}.hover\:border-sandPearl:hover{border-color:#f0e5d6}.hover\:border-sandPearl-active:hover{border-color:#f2e6d4}.hover\:border-silver:hover{border-color:#b1b2b4}.hover\:border-silver-active:hover{border-color:#a9afbc}.hover\:border-skyBlue:hover{border-color:#98d2d7}.hover\:border-skyBlue-active:hover{border-color:#91d8de}.hover\:border-southSea:hover{border-color:#9dc9cd}.hover\:border-southSea-active:hover{border-color:#95ced5}.hover\:border-turquoise:hover{border-color:#14a5c2}.hover\:border-turquoise-active:hover{border-color:#0aaccd}.hover\:border-waterGreen:hover{border-color:#007571}.hover\:border-waterGreen-active:hover{border-color:#00a8a3}.hover\:border-deepRed:hover{border-color:#c32222}.hover\:border-deepRed-active:hover{border-color:#cf1717}.hover\:border-emerald:hover{border-color:#14a33a}.hover\:border-emerald-active:hover{border-color:#0bad36}.hover\:border-greenLight:hover{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.hover\:border-orange-active:hover{border-color:#f65f2c}.hover\:border-red-active:hover{border-color:#e13737}.hover\:border-white-active:hover{border-color:#14a5c2}.hover\:border-white-button-active:hover,.hover\:border-white-button:hover{border-color:#fff}.hover\:border-code:hover{border-color:#3f3d57}.hover\:border-code-active:hover{border-color:#37354b}.hover\:border-gray-lighter:hover{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.hover\:border-gray-lighter-active:hover{border-color:#ebebeb}.hover\:border-gray-light:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.hover\:border-gray-medium:hover{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.hover\:border-gray-darker:hover{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.hover\:border-gray-darker-active:hover{border-color:#14a5c2}.hover\:border-api-default:hover{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.hover\:border-gray-xxl:hover{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.hover\:border-line-even:hover{border-color:#f3f6f7}.hover\:border-DEFAULT:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.focus\:border-transparent:focus{border-color:transparent}.focus\:border-current:focus{border-color:currentColor}.focus\:border-black:focus{border-color:#000}.focus\:border-white:focus{border-color:#fff}.focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.focus\:border-gray-DEFAULT:focus,.focus\:border-gray:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.focus\:border-red:focus{border-color:#d64343}.focus\:border-orange:focus{border-color:#eb6437}.focus\:border-yellow:focus{border-color:#f8da30}.focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.focus\:border-green-DEFAULT:focus,.focus\:border-green:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.focus\:border-teal-DEFAULT:focus,.focus\:border-teal:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.focus\:border-blue-50:focus{border-color:#d1eaff}.focus\:border-blue-100:focus{border-color:#a8d7ff}.focus\:border-blue-200:focus{border-color:#80c4ff}.focus\:border-blue-300:focus{border-color:#57b0ff}.focus\:border-blue-400:focus{border-color:#2e9dff}.focus\:border-blue-500:focus{border-color:#058aff}.focus\:border-blue-600:focus{border-color:#0075db}.focus\:border-blue-700:focus{border-color:#005fb3}.focus\:border-blue-800:focus{border-color:#00498a}.focus\:border-blue-900:focus{border-color:#003461}.focus\:border-blue-DEFAULT:focus,.focus\:border-blue:focus{border-color:#0075db}.focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.focus\:border-indigo-DEFAULT:focus,.focus\:border-indigo:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.focus\:border-purple-DEFAULT:focus,.focus\:border-purple:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.focus\:border-pink:focus{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.focus\:border-inherit:focus{border-color:inherit}.focus\:border-amber:focus{border-color:#d78737}.focus\:border-amber-active:focus{border-color:#e3872b}.focus\:border-ardoise:focus{border-color:#596a82}.focus\:border-ardoise-active:focus{border-color:#476794}.focus\:border-blue-active:focus{border-color:#14a5c2}.focus\:border-lightBlue-active:focus,.focus\:border-lightBlue:focus{border-color:rgba(0,85,138,.1)}.focus\:border-deepBlue:focus{border-color:#0e346c}.focus\:border-deepBlue-active:focus{border-color:#0a3f8f}.focus\:border-gold:focus{border-color:#bd9e56}.focus\:border-gold-active:focus{border-color:#c9a34a}.focus\:border-grenadine:focus{border-color:#c35078}.focus\:border-grenadine-active:focus{border-color:#cf4475}.focus\:border-kiwi:focus{border-color:#9a9f1e}.focus\:border-kiwi-active:focus{border-color:#a3a815}.focus\:border-lilas:focus{border-color:#7ea1d3}.focus\:border-lilas-active:focus{border-color:#75a0db}.focus\:border-mahogany:focus{border-color:#57142e}.focus\:border-mahogany-active:focus{border-color:#610a2b}.focus\:border-ocher:focus{border-color:#c29614}.focus\:border-ocher-active:focus{border-color:#cd9c0a}.focus\:border-pine:focus{border-color:#144d52}.focus\:border-pine-active:focus{border-color:#0a555c}.focus\:border-platinum-active:focus,.focus\:border-platinum:focus{border-color:#000}.focus\:border-prune:focus{border-color:#661456}.focus\:border-prune-active:focus{border-color:#72085d}.focus\:border-sand:focus{border-color:#d7be88}.focus\:border-sand-active:focus{border-color:#dfc181}.focus\:border-sandPearl:focus{border-color:#f0e5d6}.focus\:border-sandPearl-active:focus{border-color:#f2e6d4}.focus\:border-silver:focus{border-color:#b1b2b4}.focus\:border-silver-active:focus{border-color:#a9afbc}.focus\:border-skyBlue:focus{border-color:#98d2d7}.focus\:border-skyBlue-active:focus{border-color:#91d8de}.focus\:border-southSea:focus{border-color:#9dc9cd}.focus\:border-southSea-active:focus{border-color:#95ced5}.focus\:border-turquoise:focus{border-color:#14a5c2}.focus\:border-turquoise-active:focus{border-color:#0aaccd}.focus\:border-waterGreen:focus{border-color:#007571}.focus\:border-waterGreen-active:focus{border-color:#00a8a3}.focus\:border-deepRed:focus{border-color:#c32222}.focus\:border-deepRed-active:focus{border-color:#cf1717}.focus\:border-emerald:focus{border-color:#14a33a}.focus\:border-emerald-active:focus{border-color:#0bad36}.focus\:border-greenLight:focus{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.focus\:border-orange-active:focus{border-color:#f65f2c}.focus\:border-red-active:focus{border-color:#e13737}.focus\:border-white-active:focus{border-color:#14a5c2}.focus\:border-white-button-active:focus,.focus\:border-white-button:focus{border-color:#fff}.focus\:border-code:focus{border-color:#3f3d57}.focus\:border-code-active:focus{border-color:#37354b}.focus\:border-gray-lighter:focus{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.focus\:border-gray-lighter-active:focus{border-color:#ebebeb}.focus\:border-gray-light:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.focus\:border-gray-medium:focus{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.focus\:border-gray-darker:focus{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.focus\:border-gray-darker-active:focus{border-color:#14a5c2}.focus\:border-api-default:focus{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.focus\:border-gray-xxl:focus{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.focus\:border-line-even:focus{border-color:#f3f6f7}.focus\:border-DEFAULT:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.border-opacity-0{--border-opacity:0}.border-opacity-25{--border-opacity:0.25}.border-opacity-50{--border-opacity:0.5}.border-opacity-75{--border-opacity:0.75}.border-opacity-100{--border-opacity:1}.hover\:border-opacity-0:hover{--border-opacity:0}.hover\:border-opacity-25:hover{--border-opacity:0.25}.hover\:border-opacity-50:hover{--border-opacity:0.5}.hover\:border-opacity-75:hover{--border-opacity:0.75}.hover\:border-opacity-100:hover{--border-opacity:1}.focus\:border-opacity-0:focus{--border-opacity:0}.focus\:border-opacity-25:focus{--border-opacity:0.25}.focus\:border-opacity-50:focus{--border-opacity:0.5}.focus\:border-opacity-75:focus{--border-opacity:0.75}.focus\:border-opacity-100:focus{--border-opacity:1}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:100%}.rounded-xs{border-radius:.15rem}.rounded-small{border-radius:.3125rem}.rounded-DEFAULT{border-radius:.5rem}.rounded-medium{border-radius:1rem}.rounded-large{border-radius:2rem}.rounded-half{border-radius:50%}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-t-sm{border-top-left-radius:.125rem}.rounded-r-sm,.rounded-t-sm{border-top-right-radius:.125rem}.rounded-b-sm,.rounded-r-sm{border-bottom-right-radius:.125rem}.rounded-b-sm,.rounded-l-sm{border-bottom-left-radius:.125rem}.rounded-l-sm{border-top-left-radius:.125rem}.rounded-t{border-top-left-radius:.25rem}.rounded-r,.rounded-t{border-top-right-radius:.25rem}.rounded-b,.rounded-r{border-bottom-right-radius:.25rem}.rounded-b,.rounded-l{border-bottom-left-radius:.25rem}.rounded-l{border-top-left-radius:.25rem}.rounded-t-md{border-top-left-radius:.375rem}.rounded-r-md,.rounded-t-md{border-top-right-radius:.375rem}.rounded-b-md,.rounded-r-md{border-bottom-right-radius:.375rem}.rounded-b-md,.rounded-l-md{border-bottom-left-radius:.375rem}.rounded-l-md{border-top-left-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem}.rounded-r-lg,.rounded-t-lg{border-top-right-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-b-lg,.rounded-l-lg{border-bottom-left-radius:.5rem}.rounded-l-lg{border-top-left-radius:.5rem}.rounded-t-xl{border-top-left-radius:.75rem}.rounded-r-xl,.rounded-t-xl{border-top-right-radius:.75rem}.rounded-b-xl,.rounded-r-xl{border-bottom-right-radius:.75rem}.rounded-b-xl,.rounded-l-xl{border-bottom-left-radius:.75rem}.rounded-l-xl{border-top-left-radius:.75rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-r-2xl{border-top-right-radius:1rem}.rounded-b-2xl,.rounded-r-2xl{border-bottom-right-radius:1rem}.rounded-b-2xl,.rounded-l-2xl{border-bottom-left-radius:1rem}.rounded-l-2xl{border-top-left-radius:1rem}.rounded-t-3xl{border-top-left-radius:1.5rem}.rounded-r-3xl,.rounded-t-3xl{border-top-right-radius:1.5rem}.rounded-b-3xl,.rounded-r-3xl{border-bottom-right-radius:1.5rem}.rounded-b-3xl,.rounded-l-3xl{border-bottom-left-radius:1.5rem}.rounded-l-3xl{border-top-left-radius:1.5rem}.rounded-t-full{border-top-left-radius:100%;border-top-right-radius:100%}.rounded-r-full{border-top-right-radius:100%;border-bottom-right-radius:100%}.rounded-b-full{border-bottom-right-radius:100%;border-bottom-left-radius:100%}.rounded-l-full{border-top-left-radius:100%;border-bottom-left-radius:100%}.rounded-t-xs{border-top-left-radius:.15rem}.rounded-r-xs,.rounded-t-xs{border-top-right-radius:.15rem}.rounded-b-xs,.rounded-r-xs{border-bottom-right-radius:.15rem}.rounded-b-xs,.rounded-l-xs{border-bottom-left-radius:.15rem}.rounded-l-xs{border-top-left-radius:.15rem}.rounded-t-small{border-top-left-radius:.3125rem;border-top-right-radius:.3125rem}.rounded-r-small{border-top-right-radius:.3125rem}.rounded-b-small,.rounded-r-small{border-bottom-right-radius:.3125rem}.rounded-b-small,.rounded-l-small{border-bottom-left-radius:.3125rem}.rounded-l-small{border-top-left-radius:.3125rem}.rounded-t-DEFAULT{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-r-DEFAULT{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-b-DEFAULT{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-DEFAULT{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-t-medium{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-r-medium{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.rounded-b-medium{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.rounded-l-medium{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.rounded-t-large{border-top-left-radius:2rem;border-top-right-radius:2rem}.rounded-r-large{border-top-right-radius:2rem;border-bottom-right-radius:2rem}.rounded-b-large{border-bottom-right-radius:2rem;border-bottom-left-radius:2rem}.rounded-l-large{border-top-left-radius:2rem;border-bottom-left-radius:2rem}.rounded-t-half{border-top-left-radius:50%;border-top-right-radius:50%}.rounded-r-half{border-top-right-radius:50%;border-bottom-right-radius:50%}.rounded-b-half{border-bottom-right-radius:50%;border-bottom-left-radius:50%}.rounded-l-half{border-top-left-radius:50%;border-bottom-left-radius:50%}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.rounded-bl-none{border-bottom-left-radius:0}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.rounded-br-sm{border-bottom-right-radius:.125rem}.rounded-bl-sm{border-bottom-left-radius:.125rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.rounded-tl-md{border-top-left-radius:.375rem}.rounded-tr-md{border-top-right-radius:.375rem}.rounded-br-md{border-bottom-right-radius:.375rem}.rounded-bl-md{border-bottom-left-radius:.375rem}.rounded-tl-lg{border-top-left-radius:.5rem}.rounded-tr-lg{border-top-right-radius:.5rem}.rounded-br-lg{border-bottom-right-radius:.5rem}.rounded-bl-lg{border-bottom-left-radius:.5rem}.rounded-tl-xl{border-top-left-radius:.75rem}.rounded-tr-xl{border-top-right-radius:.75rem}.rounded-br-xl{border-bottom-right-radius:.75rem}.rounded-bl-xl{border-bottom-left-radius:.75rem}.rounded-tl-2xl{border-top-left-radius:1rem}.rounded-tr-2xl{border-top-right-radius:1rem}.rounded-br-2xl{border-bottom-right-radius:1rem}.rounded-bl-2xl{border-bottom-left-radius:1rem}.rounded-tl-3xl{border-top-left-radius:1.5rem}.rounded-tr-3xl{border-top-right-radius:1.5rem}.rounded-br-3xl{border-bottom-right-radius:1.5rem}.rounded-bl-3xl{border-bottom-left-radius:1.5rem}.rounded-tl-full{border-top-left-radius:100%}.rounded-tr-full{border-top-right-radius:100%}.rounded-br-full{border-bottom-right-radius:100%}.rounded-bl-full{border-bottom-left-radius:100%}.rounded-tl-xs{border-top-left-radius:.15rem}.rounded-tr-xs{border-top-right-radius:.15rem}.rounded-br-xs{border-bottom-right-radius:.15rem}.rounded-bl-xs{border-bottom-left-radius:.15rem}.rounded-tl-small{border-top-left-radius:.3125rem}.rounded-tr-small{border-top-right-radius:.3125rem}.rounded-br-small{border-bottom-right-radius:.3125rem}.rounded-bl-small{border-bottom-left-radius:.3125rem}.rounded-tl-DEFAULT{border-top-left-radius:.5rem}.rounded-tr-DEFAULT{border-top-right-radius:.5rem}.rounded-br-DEFAULT{border-bottom-right-radius:.5rem}.rounded-bl-DEFAULT{border-bottom-left-radius:.5rem}.rounded-tl-medium{border-top-left-radius:1rem}.rounded-tr-medium{border-top-right-radius:1rem}.rounded-br-medium{border-bottom-right-radius:1rem}.rounded-bl-medium{border-bottom-left-radius:1rem}.rounded-tl-large{border-top-left-radius:2rem}.rounded-tr-large{border-top-right-radius:2rem}.rounded-br-large{border-bottom-right-radius:2rem}.rounded-bl-large{border-bottom-left-radius:2rem}.rounded-tl-half{border-top-left-radius:50%}.rounded-tr-half{border-top-right-radius:50%}.rounded-br-half{border-bottom-right-radius:50%}.rounded-bl-half{border-bottom-left-radius:50%}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-double{border-style:double}.border-none{border-style:none}.border-0{border-width:0}.border-1{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-5{border-width:5px}.border-8{border-width:8px}.border,.border-DEFAULT{border-width:1px}.border-t-0{border-top-width:0}.border-r-0{border-right-width:0}.border-b-0{border-bottom-width:0}.border-l-0{border-left-width:0}.border-t-1{border-top-width:1px}.border-r-1{border-right-width:1px}.border-b-1{border-bottom-width:1px}.border-l-1{border-left-width:1px}.border-t-2{border-top-width:2px}.border-r-2{border-right-width:2px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-t-4{border-top-width:4px}.border-r-4{border-right-width:4px}.border-b-4{border-bottom-width:4px}.border-l-4{border-left-width:4px}.border-t-5{border-top-width:5px}.border-r-5{border-right-width:5px}.border-b-5{border-bottom-width:5px}.border-l-5{border-left-width:5px}.border-t-8{border-top-width:8px}.border-r-8{border-right-width:8px}.border-b-8{border-bottom-width:8px}.border-l-8{border-left-width:8px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-t-DEFAULT{border-top-width:1px}.border-r-DEFAULT{border-right-width:1px}.border-b-DEFAULT{border-bottom-width:1px}.border-l-DEFAULT{border-left-width:1px}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.cursor-text{cursor:text}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row-group{display:table-row-group}.table-row{display:table-row}.flow-root{display:flow-root}.grid{display:grid}.inline-grid{display:inline-grid}.contents{display:contents}.hidden{display:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-no-wrap{flex-wrap:nowrap}.place-items-auto{place-items:auto}.place-items-start{place-items:start}.place-items-end{place-items:end}.place-items-center{place-items:center}.place-items-stretch{place-items:stretch}.place-content-center{place-content:center}.place-content-start{place-content:start}.place-content-end{place-content:end}.place-content-between{place-content:space-between}.place-content-around{place-content:space-around}.place-content-evenly{place-content:space-evenly}.place-content-stretch{place-content:stretch}.place-self-auto{place-self:auto}.place-self-start{place-self:start}.place-self-end{place-self:end}.place-self-center{place-self:center}.place-self-stretch{place-self:stretch}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.content-center{align-content:center}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-evenly{align-content:space-evenly}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-items-auto{justify-items:auto}.justify-items-start{justify-items:start}.justify-items-end{justify-items:end}.justify-items-center{justify-items:center}.justify-items-stretch{justify-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.justify-self-auto{justify-self:auto}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.justify-self-stretch{justify-self:stretch}.flex-1{flex:1 1 0%}.flex-2{flex:2 2 0%}.flex-3{flex:3 3 0%}.flex-auto{flex:1 1 auto}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.flex-grow-0{flex-grow:0}.flex-grow{flex-grow:1}.flex-shrink-0{flex-shrink:0}.flex-shrink{flex-shrink:1}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-first{order:-9999}.order-last{order:9999}.order-none{order:0}.float-right{float:right}.float-left{float:left}.float-none{float:none}.clearfix:after{content:"";display:table;clear:both}.clear-left{clear:left}.clear-right{clear:right}.clear-both{clear:both}.clear-none{clear:none}.font-brand,.font-sans,.font-serif{font-family:Source Sans Pro,sans-serif}.font-inconsolata{font-family:Inconsolata}.font-source{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.font-hairline{font-weight:100}.font-thin{font-weight:200}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-black{font-weight:900}.hover\:font-hairline:hover{font-weight:100}.hover\:font-thin:hover{font-weight:200}.hover\:font-light:hover{font-weight:300}.hover\:font-normal:hover{font-weight:400}.hover\:font-medium:hover{font-weight:500}.hover\:font-semibold:hover{font-weight:600}.hover\:font-bold:hover{font-weight:700}.hover\:font-extrabold:hover{font-weight:800}.hover\:font-black:hover{font-weight:900}.focus\:font-hairline:focus{font-weight:100}.focus\:font-thin:focus{font-weight:200}.focus\:font-light:focus{font-weight:300}.focus\:font-normal:focus{font-weight:400}.focus\:font-medium:focus{font-weight:500}.focus\:font-semibold:focus{font-weight:600}.focus\:font-bold:focus{font-weight:700}.focus\:font-extrabold:focus{font-weight:800}.focus\:font-black:focus{font-weight:900}.h-0{height:0}.h-1{height:.25rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-15{height:3.75rem}.h-16{height:4rem}.h-20{height:5rem}.h-22{height:5.5rem}.h-24{height:6rem}.h-25{height:6.25rem}.h-26{height:6.5rem}.h-28{height:8rem}.h-30{height:8.5rem}.h-32{height:9rem}.h-40{height:10rem}.h-48{height:12rem}.h-52{height:13rem}.h-56{height:14rem}.h-60{height:15rem}.h-64{height:16rem}.h-68{height:17rem}.h-auto{height:auto}.h-px{height:1px}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-2\.5{height:.625rem}.h-7\.5{height:1.875rem}.h-full{height:100%}.h-screen{height:100vh}.text-micro{font-size:.5rem}.text-xxs{font-size:.625rem}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-md{font-size:1.125rem}.text-lg{font-size:1.25rem}.text-xl{font-size:1.5rem}.text-2xl{font-size:1.75rem}.text-3xl{font-size:2rem}.text-4xl{font-size:2.25rem}.text-5xl{font-size:2.75rem}.text-7xl{font-size:3.75rem}.text-11xl{font-size:4.75rem}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.leading-10{line-height:2.5rem}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-loose{line-height:2}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.m-4{margin:1rem}.m-5{margin:1.25rem}.m-6{margin:1.5rem}.m-7{margin:1.75rem}.m-8{margin:2rem}.m-9{margin:2.25rem}.m-10{margin:2.5rem}.m-11{margin:2.75rem}.m-12{margin:3rem}.m-15{margin:3.75rem}.m-16{margin:4rem}.m-20{margin:5rem}.m-22{margin:5.5rem}.m-24{margin:6rem}.m-25{margin:6.25rem}.m-26{margin:6.5rem}.m-28{margin:8rem}.m-30{margin:8.5rem}.m-32{margin:9rem}.m-40{margin:10rem}.m-48{margin:12rem}.m-52{margin:13rem}.m-56{margin:14rem}.m-60{margin:15rem}.m-64{margin:16rem}.m-68{margin:17rem}.m-px{margin:1px}.-m-px{margin:-1px}.-m-2px{margin:-2px}.m-auto{margin:auto}.m-0\.5{margin:.125rem}.m-1\.5{margin:.375rem}.m-2\.5{margin:.625rem}.m-7\.5{margin:1.875rem}.-m-1{margin:-.25rem}.-m-2{margin:-.5rem}.-m-3{margin:-.75rem}.-m-4{margin:-1rem}.-m-5{margin:-1.25rem}.-m-6{margin:-1.5rem}.-m-7{margin:-1.75rem}.-m-8{margin:-2rem}.-m-9{margin:-2.25rem}.-m-10{margin:-2.5rem}.-m-11{margin:-2.75rem}.-m-12{margin:-3rem}.-m-15{margin:-3.75rem}.-m-16{margin:-4rem}.-m-20{margin:-5rem}.-m-22{margin:-5.5rem}.-m-24{margin:-6rem}.-m-25{margin:-6.25rem}.-m-26{margin:-6.5rem}.-m-28{margin:-8rem}.-m-30{margin:-8.5rem}.-m-32{margin:-9rem}.-m-40{margin:-10rem}.-m-48{margin:-12rem}.-m-52{margin:-13rem}.-m-56{margin:-14rem}.-m-60{margin:-15rem}.-m-64{margin:-16rem}.-m-68{margin:-17rem}.-m-0\.5{margin:-.125rem}.-m-1\.5{margin:-.375rem}.-m-2\.5{margin:-.625rem}.-m-7\.5{margin:-1.875rem}.my-0{margin-top:0;margin-bottom:0}.mx-0{margin-left:0;margin-right:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-5{margin-top:1.25rem;margin-bottom:1.25rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-7{margin-top:1.75rem;margin-bottom:1.75rem}.mx-7{margin-left:1.75rem;margin-right:1.75rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.my-9{margin-top:2.25rem;margin-bottom:2.25rem}.mx-9{margin-left:2.25rem;margin-right:2.25rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}.my-11{margin-top:2.75rem;margin-bottom:2.75rem}.mx-11{margin-left:2.75rem;margin-right:2.75rem}.my-12{margin-top:3rem;margin-bottom:3rem}.mx-12{margin-left:3rem;margin-right:3rem}.my-15{margin-top:3.75rem;margin-bottom:3.75rem}.mx-15{margin-left:3.75rem;margin-right:3.75rem}.my-16{margin-top:4rem;margin-bottom:4rem}.mx-16{margin-left:4rem;margin-right:4rem}.my-20{margin-top:5rem;margin-bottom:5rem}.mx-20{margin-left:5rem;margin-right:5rem}.my-22{margin-top:5.5rem;margin-bottom:5.5rem}.mx-22{margin-left:5.5rem;margin-right:5.5rem}.my-24{margin-top:6rem;margin-bottom:6rem}.mx-24{margin-left:6rem;margin-right:6rem}.my-25{margin-top:6.25rem;margin-bottom:6.25rem}.mx-25{margin-left:6.25rem;margin-right:6.25rem}.my-26{margin-top:6.5rem;margin-bottom:6.5rem}.mx-26{margin-left:6.5rem;margin-right:6.5rem}.my-28{margin-top:8rem;margin-bottom:8rem}.mx-28{margin-left:8rem;margin-right:8rem}.my-30{margin-top:8.5rem;margin-bottom:8.5rem}.mx-30{margin-left:8.5rem;margin-right:8.5rem}.my-32{margin-top:9rem;margin-bottom:9rem}.mx-32{margin-left:9rem;margin-right:9rem}.my-40{margin-top:10rem;margin-bottom:10rem}.mx-40{margin-left:10rem;margin-right:10rem}.my-48{margin-top:12rem;margin-bottom:12rem}.mx-48{margin-left:12rem;margin-right:12rem}.my-52{margin-top:13rem;margin-bottom:13rem}.mx-52{margin-left:13rem;margin-right:13rem}.my-56{margin-top:14rem;margin-bottom:14rem}.mx-56{margin-left:14rem;margin-right:14rem}.my-60{margin-top:15rem;margin-bottom:15rem}.mx-60{margin-left:15rem;margin-right:15rem}.my-64{margin-top:16rem;margin-bottom:16rem}.mx-64{margin-left:16rem;margin-right:16rem}.my-68{margin-top:17rem;margin-bottom:17rem}.mx-68{margin-left:17rem;margin-right:17rem}.my-px{margin-top:1px;margin-bottom:1px}.mx-px{margin-left:1px;margin-right:1px}.-my-px{margin-top:-1px;margin-bottom:-1px}.-mx-px{margin-left:-1px;margin-right:-1px}.-my-2px{margin-top:-2px;margin-bottom:-2px}.-mx-2px{margin-left:-2px;margin-right:-2px}.my-auto{margin-top:auto;margin-bottom:auto}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.mx-1\.5{margin-left:.375rem;margin-right:.375rem}.my-2\.5{margin-top:.625rem;margin-bottom:.625rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.my-7\.5{margin-top:1.875rem;margin-bottom:1.875rem}.mx-7\.5{margin-left:1.875rem;margin-right:1.875rem}.-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.-my-4{margin-top:-1rem;margin-bottom:-1rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-7{margin-top:-1.75rem;margin-bottom:-1.75rem}.-mx-7{margin-left:-1.75rem;margin-right:-1.75rem}.-my-8{margin-top:-2rem;margin-bottom:-2rem}.-mx-8{margin-left:-2rem;margin-right:-2rem}.-my-9{margin-top:-2.25rem;margin-bottom:-2.25rem}.-mx-9{margin-left:-2.25rem;margin-right:-2.25rem}.-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.-my-11{margin-top:-2.75rem;margin-bottom:-2.75rem}.-mx-11{margin-left:-2.75rem;margin-right:-2.75rem}.-my-12{margin-top:-3rem;margin-bottom:-3rem}.-mx-12{margin-left:-3rem;margin-right:-3rem}.-my-15{margin-top:-3.75rem;margin-bottom:-3.75rem}.-mx-15{margin-left:-3.75rem;margin-right:-3.75rem}.-my-16{margin-top:-4rem;margin-bottom:-4rem}.-mx-16{margin-left:-4rem;margin-right:-4rem}.-my-20{margin-top:-5rem;margin-bottom:-5rem}.-mx-20{margin-left:-5rem;margin-right:-5rem}.-my-22{margin-top:-5.5rem;margin-bottom:-5.5rem}.-mx-22{margin-left:-5.5rem;margin-right:-5.5rem}.-my-24{margin-top:-6rem;margin-bottom:-6rem}.-mx-24{margin-left:-6rem;margin-right:-6rem}.-my-25{margin-top:-6.25rem;margin-bottom:-6.25rem}.-mx-25{margin-left:-6.25rem;margin-right:-6.25rem}.-my-26{margin-top:-6.5rem;margin-bottom:-6.5rem}.-mx-26{margin-left:-6.5rem;margin-right:-6.5rem}.-my-28{margin-top:-8rem;margin-bottom:-8rem}.-mx-28{margin-left:-8rem;margin-right:-8rem}.-my-30{margin-top:-8.5rem;margin-bottom:-8.5rem}.-mx-30{margin-left:-8.5rem;margin-right:-8.5rem}.-my-32{margin-top:-9rem;margin-bottom:-9rem}.-mx-32{margin-left:-9rem;margin-right:-9rem}.-my-40{margin-top:-10rem;margin-bottom:-10rem}.-mx-40{margin-left:-10rem;margin-right:-10rem}.-my-48{margin-top:-12rem;margin-bottom:-12rem}.-mx-48{margin-left:-12rem;margin-right:-12rem}.-my-52{margin-top:-13rem;margin-bottom:-13rem}.-mx-52{margin-left:-13rem;margin-right:-13rem}.-my-56{margin-top:-14rem;margin-bottom:-14rem}.-mx-56{margin-left:-14rem;margin-right:-14rem}.-my-60{margin-top:-15rem;margin-bottom:-15rem}.-mx-60{margin-left:-15rem;margin-right:-15rem}.-my-64{margin-top:-16rem;margin-bottom:-16rem}.-mx-64{margin-left:-16rem;margin-right:-16rem}.-my-68{margin-top:-17rem;margin-bottom:-17rem}.-mx-68{margin-left:-17rem;margin-right:-17rem}.-my-0\.5{margin-top:-.125rem;margin-bottom:-.125rem}.-mx-0\.5{margin-left:-.125rem;margin-right:-.125rem}.-my-1\.5{margin-top:-.375rem;margin-bottom:-.375rem}.-mx-1\.5{margin-left:-.375rem;margin-right:-.375rem}.-my-2\.5{margin-top:-.625rem;margin-bottom:-.625rem}.-mx-2\.5{margin-left:-.625rem;margin-right:-.625rem}.-my-7\.5{margin-top:-1.875rem;margin-bottom:-1.875rem}.-mx-7\.5{margin-left:-1.875rem;margin-right:-1.875rem}.mt-0{margin-top:0}.mr-0{margin-right:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.mt-5{margin-top:1.25rem}.mr-5{margin-right:1.25rem}.mb-5{margin-bottom:1.25rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-7{margin-top:1.75rem}.mr-7{margin-right:1.75rem}.mb-7{margin-bottom:1.75rem}.ml-7{margin-left:1.75rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mb-8{margin-bottom:2rem}.ml-8{margin-left:2rem}.mt-9{margin-top:2.25rem}.mr-9{margin-right:2.25rem}.mb-9{margin-bottom:2.25rem}.ml-9{margin-left:2.25rem}.mt-10{margin-top:2.5rem}.mr-10{margin-right:2.5rem}.mb-10{margin-bottom:2.5rem}.ml-10{margin-left:2.5rem}.mt-11{margin-top:2.75rem}.mr-11{margin-right:2.75rem}.mb-11{margin-bottom:2.75rem}.ml-11{margin-left:2.75rem}.mt-12{margin-top:3rem}.mr-12{margin-right:3rem}.mb-12{margin-bottom:3rem}.ml-12{margin-left:3rem}.mt-15{margin-top:3.75rem}.mr-15{margin-right:3.75rem}.mb-15{margin-bottom:3.75rem}.ml-15{margin-left:3.75rem}.mt-16{margin-top:4rem}.mr-16{margin-right:4rem}.mb-16{margin-bottom:4rem}.ml-16{margin-left:4rem}.mt-20{margin-top:5rem}.mr-20{margin-right:5rem}.mb-20{margin-bottom:5rem}.ml-20{margin-left:5rem}.mt-22{margin-top:5.5rem}.mr-22{margin-right:5.5rem}.mb-22{margin-bottom:5.5rem}.ml-22{margin-left:5.5rem}.mt-24{margin-top:6rem}.mr-24{margin-right:6rem}.mb-24{margin-bottom:6rem}.ml-24{margin-left:6rem}.mt-25{margin-top:6.25rem}.mr-25{margin-right:6.25rem}.mb-25{margin-bottom:6.25rem}.ml-25{margin-left:6.25rem}.mt-26{margin-top:6.5rem}.mr-26{margin-right:6.5rem}.mb-26{margin-bottom:6.5rem}.ml-26{margin-left:6.5rem}.mt-28{margin-top:8rem}.mr-28{margin-right:8rem}.mb-28{margin-bottom:8rem}.ml-28{margin-left:8rem}.mt-30{margin-top:8.5rem}.mr-30{margin-right:8.5rem}.mb-30{margin-bottom:8.5rem}.ml-30{margin-left:8.5rem}.mt-32{margin-top:9rem}.mr-32{margin-right:9rem}.mb-32{margin-bottom:9rem}.ml-32{margin-left:9rem}.mt-40{margin-top:10rem}.mr-40{margin-right:10rem}.mb-40{margin-bottom:10rem}.ml-40{margin-left:10rem}.mt-48{margin-top:12rem}.mr-48{margin-right:12rem}.mb-48{margin-bottom:12rem}.ml-48{margin-left:12rem}.mt-52{margin-top:13rem}.mr-52{margin-right:13rem}.mb-52{margin-bottom:13rem}.ml-52{margin-left:13rem}.mt-56{margin-top:14rem}.mr-56{margin-right:14rem}.mb-56{margin-bottom:14rem}.ml-56{margin-left:14rem}.mt-60{margin-top:15rem}.mr-60{margin-right:15rem}.mb-60{margin-bottom:15rem}.ml-60{margin-left:15rem}.mt-64{margin-top:16rem}.mr-64{margin-right:16rem}.mb-64{margin-bottom:16rem}.ml-64{margin-left:16rem}.mt-68{margin-top:17rem}.mr-68{margin-right:17rem}.mb-68{margin-bottom:17rem}.ml-68{margin-left:17rem}.mt-px{margin-top:1px}.mr-px{margin-right:1px}.mb-px{margin-bottom:1px}.ml-px{margin-left:1px}.-mt-px{margin-top:-1px}.-mr-px{margin-right:-1px}.-mb-px{margin-bottom:-1px}.-ml-px{margin-left:-1px}.-mt-2px{margin-top:-2px}.-mr-2px{margin-right:-2px}.-mb-2px{margin-bottom:-2px}.-ml-2px{margin-left:-2px}.mt-auto{margin-top:auto}.mr-auto{margin-right:auto}.mb-auto{margin-bottom:auto}.ml-auto{margin-left:auto}.mt-0\.5{margin-top:.125rem}.mr-0\.5{margin-right:.125rem}.mb-0\.5{margin-bottom:.125rem}.ml-0\.5{margin-left:.125rem}.mt-1\.5{margin-top:.375rem}.mr-1\.5{margin-right:.375rem}.mb-1\.5{margin-bottom:.375rem}.ml-1\.5{margin-left:.375rem}.mt-2\.5{margin-top:.625rem}.mr-2\.5{margin-right:.625rem}.mb-2\.5{margin-bottom:.625rem}.ml-2\.5{margin-left:.625rem}.mt-7\.5{margin-top:1.875rem}.mr-7\.5{margin-right:1.875rem}.mb-7\.5{margin-bottom:1.875rem}.ml-7\.5{margin-left:1.875rem}.-mt-1{margin-top:-.25rem}.-mr-1{margin-right:-.25rem}.-mb-1{margin-bottom:-.25rem}.-ml-1{margin-left:-.25rem}.-mt-2{margin-top:-.5rem}.-mr-2{margin-right:-.5rem}.-mb-2{margin-bottom:-.5rem}.-ml-2{margin-left:-.5rem}.-mt-3{margin-top:-.75rem}.-mr-3{margin-right:-.75rem}.-mb-3{margin-bottom:-.75rem}.-ml-3{margin-left:-.75rem}.-mt-4{margin-top:-1rem}.-mr-4{margin-right:-1rem}.-mb-4{margin-bottom:-1rem}.-ml-4{margin-left:-1rem}.-mt-5{margin-top:-1.25rem}.-mr-5{margin-right:-1.25rem}.-mb-5{margin-bottom:-1.25rem}.-ml-5{margin-left:-1.25rem}.-mt-6{margin-top:-1.5rem}.-mr-6{margin-right:-1.5rem}.-mb-6{margin-bottom:-1.5rem}.-ml-6{margin-left:-1.5rem}.-mt-7{margin-top:-1.75rem}.-mr-7{margin-right:-1.75rem}.-mb-7{margin-bottom:-1.75rem}.-ml-7{margin-left:-1.75rem}.-mt-8{margin-top:-2rem}.-mr-8{margin-right:-2rem}.-mb-8{margin-bottom:-2rem}.-ml-8{margin-left:-2rem}.-mt-9{margin-top:-2.25rem}.-mr-9{margin-right:-2.25rem}.-mb-9{margin-bottom:-2.25rem}.-ml-9{margin-left:-2.25rem}.-mt-10{margin-top:-2.5rem}.-mr-10{margin-right:-2.5rem}.-mb-10{margin-bottom:-2.5rem}.-ml-10{margin-left:-2.5rem}.-mt-11{margin-top:-2.75rem}.-mr-11{margin-right:-2.75rem}.-mb-11{margin-bottom:-2.75rem}.-ml-11{margin-left:-2.75rem}.-mt-12{margin-top:-3rem}.-mr-12{margin-right:-3rem}.-mb-12{margin-bottom:-3rem}.-ml-12{margin-left:-3rem}.-mt-15{margin-top:-3.75rem}.-mr-15{margin-right:-3.75rem}.-mb-15{margin-bottom:-3.75rem}.-ml-15{margin-left:-3.75rem}.-mt-16{margin-top:-4rem}.-mr-16{margin-right:-4rem}.-mb-16{margin-bottom:-4rem}.-ml-16{margin-left:-4rem}.-mt-20{margin-top:-5rem}.-mr-20{margin-right:-5rem}.-mb-20{margin-bottom:-5rem}.-ml-20{margin-left:-5rem}.-mt-22{margin-top:-5.5rem}.-mr-22{margin-right:-5.5rem}.-mb-22{margin-bottom:-5.5rem}.-ml-22{margin-left:-5.5rem}.-mt-24{margin-top:-6rem}.-mr-24{margin-right:-6rem}.-mb-24{margin-bottom:-6rem}.-ml-24{margin-left:-6rem}.-mt-25{margin-top:-6.25rem}.-mr-25{margin-right:-6.25rem}.-mb-25{margin-bottom:-6.25rem}.-ml-25{margin-left:-6.25rem}.-mt-26{margin-top:-6.5rem}.-mr-26{margin-right:-6.5rem}.-mb-26{margin-bottom:-6.5rem}.-ml-26{margin-left:-6.5rem}.-mt-28{margin-top:-8rem}.-mr-28{margin-right:-8rem}.-mb-28{margin-bottom:-8rem}.-ml-28{margin-left:-8rem}.-mt-30{margin-top:-8.5rem}.-mr-30{margin-right:-8.5rem}.-mb-30{margin-bottom:-8.5rem}.-ml-30{margin-left:-8.5rem}.-mt-32{margin-top:-9rem}.-mr-32{margin-right:-9rem}.-mb-32{margin-bottom:-9rem}.-ml-32{margin-left:-9rem}.-mt-40{margin-top:-10rem}.-mr-40{margin-right:-10rem}.-mb-40{margin-bottom:-10rem}.-ml-40{margin-left:-10rem}.-mt-48{margin-top:-12rem}.-mr-48{margin-right:-12rem}.-mb-48{margin-bottom:-12rem}.-ml-48{margin-left:-12rem}.-mt-52{margin-top:-13rem}.-mr-52{margin-right:-13rem}.-mb-52{margin-bottom:-13rem}.-ml-52{margin-left:-13rem}.-mt-56{margin-top:-14rem}.-mr-56{margin-right:-14rem}.-mb-56{margin-bottom:-14rem}.-ml-56{margin-left:-14rem}.-mt-60{margin-top:-15rem}.-mr-60{margin-right:-15rem}.-mb-60{margin-bottom:-15rem}.-ml-60{margin-left:-15rem}.-mt-64{margin-top:-16rem}.-mr-64{margin-right:-16rem}.-mb-64{margin-bottom:-16rem}.-ml-64{margin-left:-16rem}.-mt-68{margin-top:-17rem}.-mr-68{margin-right:-17rem}.-mb-68{margin-bottom:-17rem}.-ml-68{margin-left:-17rem}.-mt-0\.5{margin-top:-.125rem}.-mr-0\.5{margin-right:-.125rem}.-mb-0\.5{margin-bottom:-.125rem}.-ml-0\.5{margin-left:-.125rem}.-mt-1\.5{margin-top:-.375rem}.-mr-1\.5{margin-right:-.375rem}.-mb-1\.5{margin-bottom:-.375rem}.-ml-1\.5{margin-left:-.375rem}.-mt-2\.5{margin-top:-.625rem}.-mr-2\.5{margin-right:-.625rem}.-mb-2\.5{margin-bottom:-.625rem}.-ml-2\.5{margin-left:-.625rem}.-mt-7\.5{margin-top:-1.875rem}.-mr-7\.5{margin-right:-1.875rem}.-mb-7\.5{margin-bottom:-1.875rem}.-ml-7\.5{margin-left:-1.875rem}.max-h-0{max-height:0}.max-h-1{max-height:.25rem}.max-h-2{max-height:.5rem}.max-h-3{max-height:.75rem}.max-h-4{max-height:1rem}.max-h-5{max-height:1.25rem}.max-h-6{max-height:1.5rem}.max-h-7{max-height:1.75rem}.max-h-8{max-height:2rem}.max-h-9{max-height:2.25rem}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-15{max-height:3.75rem}.max-h-16{max-height:4rem}.max-h-20{max-height:5rem}.max-h-22{max-height:5.5rem}.max-h-24{max-height:6rem}.max-h-25{max-height:6.25rem}.max-h-26{max-height:6.5rem}.max-h-28{max-height:8rem}.max-h-30{max-height:8.5rem}.max-h-32{max-height:9rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-52{max-height:13rem}.max-h-56{max-height:14rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-68{max-height:17rem}.max-h-px{max-height:1px}.max-h-0\.5{max-height:.125rem}.max-h-1\.5{max-height:.375rem}.max-h-2\.5{max-height:.625rem}.max-h-7\.5{max-height:1.875rem}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.max-w-none{max-width:none}.max-w-xs{max-width:20rem}.max-w-sm{max-width:30rem}.max-w-md{max-width:40rem}.max-w-lg{max-width:50rem}.max-w-xl{max-width:60rem}.max-w-2xl{max-width:70rem}.max-w-3xl{max-width:80rem}.max-w-4xl{max-width:90rem}.max-w-5xl{max-width:100rem}.max-w-6xl{max-width:72rem}.max-w-full{max-width:100%}.max-w-screen-sm{max-width:40.01em}.max-w-screen-md{max-width:50.01em}.max-w-screen-lg{max-width:64.01em}.max-w-screen-xl{max-width:76.26em}.max-w-1\/4{max-width:25%}.max-w-1\/2{max-width:50%}.max-w-3\/5{max-width:60%}.max-w-4\/5{max-width:80%}.max-w-9\/10{max-width:90%}.max-w-site-mini{max-width:17.5rem}.max-w-site-small{max-width:31.25rem}.max-w-site-medium{max-width:43.75rem}.max-w-site-large{max-width:56.25rem}.max-w-site-xxl{max-width:90rem}.max-w-site{max-width:73.75rem}.max-w-screen{max-width:100vw}.min-h-0{min-height:0}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-w-0{min-width:0}.min-w-full{min-width:100%}.min-w-min{min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content}.min-w-max{min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content}.min-w-site{min-width:18.75rem}.min-w-input-mini{min-width:17.5rem}.min-w-input-small{min-width:31.25rem}.min-w-input-medium{min-width:36.3125rem}.min-w-input-large{min-width:61.45rem}.min-w-button-mini{min-width:5.5rem}.min-w-button-small{min-width:7rem}.min-w-button-medium{min-width:9.875rem}.min-w-button-large{min-width:10rem}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-fill{-o-object-fit:fill;object-fit:fill}.object-none{-o-object-fit:none;object-fit:none}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-bottom{-o-object-position:bottom;object-position:bottom}.object-center{-o-object-position:center;object-position:center}.object-left{-o-object-position:left;object-position:left}.object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.object-left-top{-o-object-position:left top;object-position:left top}.object-right{-o-object-position:right;object-position:right}.object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.object-right-top{-o-object-position:right top;object-position:right top}.object-top{-o-object-position:top;object-position:top}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-100{opacity:1}.hover\:opacity-0:hover{opacity:0}.hover\:opacity-25:hover{opacity:.25}.hover\:opacity-50:hover{opacity:.5}.hover\:opacity-75:hover{opacity:.75}.hover\:opacity-100:hover{opacity:1}.focus\:opacity-0:focus{opacity:0}.focus\:opacity-25:focus{opacity:.25}.focus\:opacity-50:focus{opacity:.5}.focus\:opacity-75:focus{opacity:.75}.focus\:opacity-100:focus{opacity:1}.group:hover .group-hover\:opacity-0{opacity:0}.group:hover .group-hover\:opacity-25{opacity:.25}.group:hover .group-hover\:opacity-50{opacity:.5}.group:hover .group-hover\:opacity-75{opacity:.75}.group:hover .group-hover\:opacity-100{opacity:1}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline-white{outline:2px dotted #fff;outline-offset:2px}.outline-black{outline:2px dotted #000;outline-offset:2px}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.scrolling-touch{-webkit-overflow-scrolling:touch}.scrolling-auto{-webkit-overflow-scrolling:auto}.overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.overscroll-y-auto{overscroll-behavior-y:auto}.overscroll-y-contain{overscroll-behavior-y:contain}.overscroll-y-none{overscroll-behavior-y:none}.overscroll-x-auto{overscroll-behavior-x:auto}.overscroll-x-contain{overscroll-behavior-x:contain}.overscroll-x-none{overscroll-behavior-x:none}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.p-9{padding:2.25rem}.p-10{padding:2.5rem}.p-11{padding:2.75rem}.p-12{padding:3rem}.p-15{padding:3.75rem}.p-16{padding:4rem}.p-20{padding:5rem}.p-22{padding:5.5rem}.p-24{padding:6rem}.p-25{padding:6.25rem}.p-26{padding:6.5rem}.p-28{padding:8rem}.p-30{padding:8.5rem}.p-32{padding:9rem}.p-40{padding:10rem}.p-48{padding:12rem}.p-52{padding:13rem}.p-56{padding:14rem}.p-60{padding:15rem}.p-64{padding:16rem}.p-68{padding:17rem}.p-px{padding:1px}.p-0\.5{padding:.125rem}.p-1\.5{padding:.375rem}.p-2\.5{padding:.625rem}.p-7\.5{padding:1.875rem}.py-0{padding-top:0;padding-bottom:0}.px-0{padding-left:0;padding-right:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-7{padding-top:1.75rem;padding-bottom:1.75rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-8{padding-left:2rem;padding-right:2rem}.py-9{padding-top:2.25rem;padding-bottom:2.25rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-11{padding-top:2.75rem;padding-bottom:2.75rem}.px-11{padding-left:2.75rem;padding-right:2.75rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-12{padding-left:3rem;padding-right:3rem}.py-15{padding-top:3.75rem;padding-bottom:3.75rem}.px-15{padding-left:3.75rem;padding-right:3.75rem}.py-16{padding-top:4rem;padding-bottom:4rem}.px-16{padding-left:4rem;padding-right:4rem}.py-20{padding-top:5rem;padding-bottom:5rem}.px-20{padding-left:5rem;padding-right:5rem}.py-22{padding-top:5.5rem;padding-bottom:5.5rem}.px-22{padding-left:5.5rem;padding-right:5.5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.px-24{padding-left:6rem;padding-right:6rem}.py-25{padding-top:6.25rem;padding-bottom:6.25rem}.px-25{padding-left:6.25rem;padding-right:6.25rem}.py-26{padding-top:6.5rem;padding-bottom:6.5rem}.px-26{padding-left:6.5rem;padding-right:6.5rem}.py-28{padding-top:8rem;padding-bottom:8rem}.px-28{padding-left:8rem;padding-right:8rem}.py-30{padding-top:8.5rem;padding-bottom:8.5rem}.px-30{padding-left:8.5rem;padding-right:8.5rem}.py-32{padding-top:9rem;padding-bottom:9rem}.px-32{padding-left:9rem;padding-right:9rem}.py-40{padding-top:10rem;padding-bottom:10rem}.px-40{padding-left:10rem;padding-right:10rem}.py-48{padding-top:12rem;padding-bottom:12rem}.px-48{padding-left:12rem;padding-right:12rem}.py-52{padding-top:13rem;padding-bottom:13rem}.px-52{padding-left:13rem;padding-right:13rem}.py-56{padding-top:14rem;padding-bottom:14rem}.px-56{padding-left:14rem;padding-right:14rem}.py-60{padding-top:15rem;padding-bottom:15rem}.px-60{padding-left:15rem;padding-right:15rem}.py-64{padding-top:16rem;padding-bottom:16rem}.px-64{padding-left:16rem;padding-right:16rem}.py-68{padding-top:17rem;padding-bottom:17rem}.px-68{padding-left:17rem;padding-right:17rem}.py-px{padding-top:1px;padding-bottom:1px}.px-px{padding-left:1px;padding-right:1px}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.py-7\.5{padding-top:1.875rem;padding-bottom:1.875rem}.px-7\.5{padding-left:1.875rem;padding-right:1.875rem}.pt-0{padding-top:0}.pr-0{padding-right:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pr-3{padding-right:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.pr-5{padding-right:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.pt-7{padding-top:1.75rem}.pr-7{padding-right:1.75rem}.pb-7{padding-bottom:1.75rem}.pl-7{padding-left:1.75rem}.pt-8{padding-top:2rem}.pr-8{padding-right:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.pt-9{padding-top:2.25rem}.pr-9{padding-right:2.25rem}.pb-9{padding-bottom:2.25rem}.pl-9{padding-left:2.25rem}.pt-10{padding-top:2.5rem}.pr-10{padding-right:2.5rem}.pb-10{padding-bottom:2.5rem}.pl-10{padding-left:2.5rem}.pt-11{padding-top:2.75rem}.pr-11{padding-right:2.75rem}.pb-11{padding-bottom:2.75rem}.pl-11{padding-left:2.75rem}.pt-12{padding-top:3rem}.pr-12{padding-right:3rem}.pb-12{padding-bottom:3rem}.pl-12{padding-left:3rem}.pt-15{padding-top:3.75rem}.pr-15{padding-right:3.75rem}.pb-15{padding-bottom:3.75rem}.pl-15{padding-left:3.75rem}.pt-16{padding-top:4rem}.pr-16{padding-right:4rem}.pb-16{padding-bottom:4rem}.pl-16{padding-left:4rem}.pt-20{padding-top:5rem}.pr-20{padding-right:5rem}.pb-20{padding-bottom:5rem}.pl-20{padding-left:5rem}.pt-22{padding-top:5.5rem}.pr-22{padding-right:5.5rem}.pb-22{padding-bottom:5.5rem}.pl-22{padding-left:5.5rem}.pt-24{padding-top:6rem}.pr-24{padding-right:6rem}.pb-24{padding-bottom:6rem}.pl-24{padding-left:6rem}.pt-25{padding-top:6.25rem}.pr-25{padding-right:6.25rem}.pb-25{padding-bottom:6.25rem}.pl-25{padding-left:6.25rem}.pt-26{padding-top:6.5rem}.pr-26{padding-right:6.5rem}.pb-26{padding-bottom:6.5rem}.pl-26{padding-left:6.5rem}.pt-28{padding-top:8rem}.pr-28{padding-right:8rem}.pb-28{padding-bottom:8rem}.pl-28{padding-left:8rem}.pt-30{padding-top:8.5rem}.pr-30{padding-right:8.5rem}.pb-30{padding-bottom:8.5rem}.pl-30{padding-left:8.5rem}.pt-32{padding-top:9rem}.pr-32{padding-right:9rem}.pb-32{padding-bottom:9rem}.pl-32{padding-left:9rem}.pt-40{padding-top:10rem}.pr-40{padding-right:10rem}.pb-40{padding-bottom:10rem}.pl-40{padding-left:10rem}.pt-48{padding-top:12rem}.pr-48{padding-right:12rem}.pb-48{padding-bottom:12rem}.pl-48{padding-left:12rem}.pt-52{padding-top:13rem}.pr-52{padding-right:13rem}.pb-52{padding-bottom:13rem}.pl-52{padding-left:13rem}.pt-56{padding-top:14rem}.pr-56{padding-right:14rem}.pb-56{padding-bottom:14rem}.pl-56{padding-left:14rem}.pt-60{padding-top:15rem}.pr-60{padding-right:15rem}.pb-60{padding-bottom:15rem}.pl-60{padding-left:15rem}.pt-64{padding-top:16rem}.pr-64{padding-right:16rem}.pb-64{padding-bottom:16rem}.pl-64{padding-left:16rem}.pt-68{padding-top:17rem}.pr-68{padding-right:17rem}.pb-68{padding-bottom:17rem}.pl-68{padding-left:17rem}.pt-px{padding-top:1px}.pr-px{padding-right:1px}.pb-px{padding-bottom:1px}.pl-px{padding-left:1px}.pt-0\.5{padding-top:.125rem}.pr-0\.5{padding-right:.125rem}.pb-0\.5{padding-bottom:.125rem}.pl-0\.5{padding-left:.125rem}.pt-1\.5{padding-top:.375rem}.pr-1\.5{padding-right:.375rem}.pb-1\.5{padding-bottom:.375rem}.pl-1\.5{padding-left:.375rem}.pt-2\.5{padding-top:.625rem}.pr-2\.5{padding-right:.625rem}.pb-2\.5{padding-bottom:.625rem}.pl-2\.5{padding-left:.625rem}.pt-7\.5{padding-top:1.875rem}.pr-7\.5{padding-right:1.875rem}.pb-7\.5{padding-bottom:1.875rem}.pl-7\.5{padding-left:1.875rem}.placeholder-transparent::-moz-placeholder{color:transparent}.placeholder-transparent:-ms-input-placeholder{color:transparent}.placeholder-transparent::placeholder{color:transparent}.placeholder-current::-moz-placeholder{color:currentColor}.placeholder-current:-ms-input-placeholder{color:currentColor}.placeholder-current::placeholder{color:currentColor}.placeholder-black::-moz-placeholder{color:#000}.placeholder-black:-ms-input-placeholder{color:#000}.placeholder-black::placeholder{color:#000}.placeholder-white::-moz-placeholder{color:#fff}.placeholder-white:-ms-input-placeholder{color:#fff}.placeholder-white::placeholder{color:#fff}.placeholder-gray-100::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.placeholder-gray-200::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.placeholder-gray-300::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.placeholder-gray-400::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.placeholder-gray-500::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.placeholder-gray-600::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-700::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.placeholder-gray-800::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.placeholder-gray-900::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-DEFAULT::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-red::-moz-placeholder{color:#d64343}.placeholder-red:-ms-input-placeholder{color:#d64343}.placeholder-red::placeholder{color:#d64343}.placeholder-orange::-moz-placeholder{color:#eb6437}.placeholder-orange:-ms-input-placeholder{color:#eb6437}.placeholder-orange::placeholder{color:#eb6437}.placeholder-yellow::-moz-placeholder{color:#f8da30}.placeholder-yellow:-ms-input-placeholder{color:#f8da30}.placeholder-yellow::placeholder{color:#f8da30}.placeholder-green-100::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.placeholder-green-200::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.placeholder-green-300::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.placeholder-green-400::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.placeholder-green-500::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.placeholder-green-600::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-700::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.placeholder-green-800::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.placeholder-green-900::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.placeholder-green-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-DEFAULT::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-teal-100::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.placeholder-teal-200::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.placeholder-teal-300::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.placeholder-teal-400::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.placeholder-teal-500::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.placeholder-teal-600::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-700::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.placeholder-teal-800::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.placeholder-teal-900::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.placeholder-teal-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-DEFAULT::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-blue-50::-moz-placeholder{color:#d1eaff}.placeholder-blue-50:-ms-input-placeholder{color:#d1eaff}.placeholder-blue-50::placeholder{color:#d1eaff}.placeholder-blue-100::-moz-placeholder{color:#a8d7ff}.placeholder-blue-100:-ms-input-placeholder{color:#a8d7ff}.placeholder-blue-100::placeholder{color:#a8d7ff}.placeholder-blue-200::-moz-placeholder{color:#80c4ff}.placeholder-blue-200:-ms-input-placeholder{color:#80c4ff}.placeholder-blue-200::placeholder{color:#80c4ff}.placeholder-blue-300::-moz-placeholder{color:#57b0ff}.placeholder-blue-300:-ms-input-placeholder{color:#57b0ff}.placeholder-blue-300::placeholder{color:#57b0ff}.placeholder-blue-400::-moz-placeholder{color:#2e9dff}.placeholder-blue-400:-ms-input-placeholder{color:#2e9dff}.placeholder-blue-400::placeholder{color:#2e9dff}.placeholder-blue-500::-moz-placeholder{color:#058aff}.placeholder-blue-500:-ms-input-placeholder{color:#058aff}.placeholder-blue-500::placeholder{color:#058aff}.placeholder-blue-600::-moz-placeholder{color:#0075db}.placeholder-blue-600:-ms-input-placeholder{color:#0075db}.placeholder-blue-600::placeholder{color:#0075db}.placeholder-blue-700::-moz-placeholder{color:#005fb3}.placeholder-blue-700:-ms-input-placeholder{color:#005fb3}.placeholder-blue-700::placeholder{color:#005fb3}.placeholder-blue-800::-moz-placeholder{color:#00498a}.placeholder-blue-800:-ms-input-placeholder{color:#00498a}.placeholder-blue-800::placeholder{color:#00498a}.placeholder-blue-900::-moz-placeholder{color:#003461}.placeholder-blue-900:-ms-input-placeholder{color:#003461}.placeholder-blue-900::placeholder{color:#003461}.placeholder-blue-DEFAULT::-moz-placeholder{color:#0075db}.placeholder-blue-DEFAULT:-ms-input-placeholder{color:#0075db}.placeholder-blue-DEFAULT::placeholder{color:#0075db}.placeholder-blue::-moz-placeholder{color:#0075db}.placeholder-blue:-ms-input-placeholder{color:#0075db}.placeholder-blue::placeholder{color:#0075db}.placeholder-indigo-100::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.placeholder-indigo-200::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.placeholder-indigo-300::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.placeholder-indigo-400::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.placeholder-indigo-500::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.placeholder-indigo-600::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-700::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.placeholder-indigo-800::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.placeholder-indigo-900::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.placeholder-indigo-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-DEFAULT::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-purple-100::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.placeholder-purple-200::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.placeholder-purple-300::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.placeholder-purple-400::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.placeholder-purple-500::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.placeholder-purple-600::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-700::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.placeholder-purple-800::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.placeholder-purple-900::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.placeholder-purple-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-DEFAULT::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-pink::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.placeholder-pink:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.placeholder-pink::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.placeholder-inherit::-moz-placeholder{color:inherit}.placeholder-inherit:-ms-input-placeholder{color:inherit}.placeholder-inherit::placeholder{color:inherit}.placeholder-amber::-moz-placeholder{color:#d78737}.placeholder-amber:-ms-input-placeholder{color:#d78737}.placeholder-amber::placeholder{color:#d78737}.placeholder-amber-active::-moz-placeholder{color:#e3872b}.placeholder-amber-active:-ms-input-placeholder{color:#e3872b}.placeholder-amber-active::placeholder{color:#e3872b}.placeholder-ardoise::-moz-placeholder{color:#596a82}.placeholder-ardoise:-ms-input-placeholder{color:#596a82}.placeholder-ardoise::placeholder{color:#596a82}.placeholder-ardoise-active::-moz-placeholder{color:#476794}.placeholder-ardoise-active:-ms-input-placeholder{color:#476794}.placeholder-ardoise-active::placeholder{color:#476794}.placeholder-blue-active::-moz-placeholder{color:#14a5c2}.placeholder-blue-active:-ms-input-placeholder{color:#14a5c2}.placeholder-blue-active::placeholder{color:#14a5c2}.placeholder-lightBlue::-moz-placeholder{color:rgba(0,85,138,.1)}.placeholder-lightBlue:-ms-input-placeholder{color:rgba(0,85,138,.1)}.placeholder-lightBlue::placeholder{color:rgba(0,85,138,.1)}.placeholder-lightBlue-active::-moz-placeholder{color:rgba(0,85,138,.1)}.placeholder-lightBlue-active:-ms-input-placeholder{color:rgba(0,85,138,.1)}.placeholder-lightBlue-active::placeholder{color:rgba(0,85,138,.1)}.placeholder-deepBlue::-moz-placeholder{color:#0e346c}.placeholder-deepBlue:-ms-input-placeholder{color:#0e346c}.placeholder-deepBlue::placeholder{color:#0e346c}.placeholder-deepBlue-active::-moz-placeholder{color:#0a3f8f}.placeholder-deepBlue-active:-ms-input-placeholder{color:#0a3f8f}.placeholder-deepBlue-active::placeholder{color:#0a3f8f}.placeholder-gold::-moz-placeholder{color:#bd9e56}.placeholder-gold:-ms-input-placeholder{color:#bd9e56}.placeholder-gold::placeholder{color:#bd9e56}.placeholder-gold-active::-moz-placeholder{color:#c9a34a}.placeholder-gold-active:-ms-input-placeholder{color:#c9a34a}.placeholder-gold-active::placeholder{color:#c9a34a}.placeholder-grenadine::-moz-placeholder{color:#c35078}.placeholder-grenadine:-ms-input-placeholder{color:#c35078}.placeholder-grenadine::placeholder{color:#c35078}.placeholder-grenadine-active::-moz-placeholder{color:#cf4475}.placeholder-grenadine-active:-ms-input-placeholder{color:#cf4475}.placeholder-grenadine-active::placeholder{color:#cf4475}.placeholder-kiwi::-moz-placeholder{color:#9a9f1e}.placeholder-kiwi:-ms-input-placeholder{color:#9a9f1e}.placeholder-kiwi::placeholder{color:#9a9f1e}.placeholder-kiwi-active::-moz-placeholder{color:#a3a815}.placeholder-kiwi-active:-ms-input-placeholder{color:#a3a815}.placeholder-kiwi-active::placeholder{color:#a3a815}.placeholder-lilas::-moz-placeholder{color:#7ea1d3}.placeholder-lilas:-ms-input-placeholder{color:#7ea1d3}.placeholder-lilas::placeholder{color:#7ea1d3}.placeholder-lilas-active::-moz-placeholder{color:#75a0db}.placeholder-lilas-active:-ms-input-placeholder{color:#75a0db}.placeholder-lilas-active::placeholder{color:#75a0db}.placeholder-mahogany::-moz-placeholder{color:#57142e}.placeholder-mahogany:-ms-input-placeholder{color:#57142e}.placeholder-mahogany::placeholder{color:#57142e}.placeholder-mahogany-active::-moz-placeholder{color:#610a2b}.placeholder-mahogany-active:-ms-input-placeholder{color:#610a2b}.placeholder-mahogany-active::placeholder{color:#610a2b}.placeholder-ocher::-moz-placeholder{color:#c29614}.placeholder-ocher:-ms-input-placeholder{color:#c29614}.placeholder-ocher::placeholder{color:#c29614}.placeholder-ocher-active::-moz-placeholder{color:#cd9c0a}.placeholder-ocher-active:-ms-input-placeholder{color:#cd9c0a}.placeholder-ocher-active::placeholder{color:#cd9c0a}.placeholder-pine::-moz-placeholder{color:#144d52}.placeholder-pine:-ms-input-placeholder{color:#144d52}.placeholder-pine::placeholder{color:#144d52}.placeholder-pine-active::-moz-placeholder{color:#0a555c}.placeholder-pine-active:-ms-input-placeholder{color:#0a555c}.placeholder-pine-active::placeholder{color:#0a555c}.placeholder-platinum::-moz-placeholder{color:#000}.placeholder-platinum:-ms-input-placeholder{color:#000}.placeholder-platinum::placeholder{color:#000}.placeholder-platinum-active::-moz-placeholder{color:#000}.placeholder-platinum-active:-ms-input-placeholder{color:#000}.placeholder-platinum-active::placeholder{color:#000}.placeholder-prune::-moz-placeholder{color:#661456}.placeholder-prune:-ms-input-placeholder{color:#661456}.placeholder-prune::placeholder{color:#661456}.placeholder-prune-active::-moz-placeholder{color:#72085d}.placeholder-prune-active:-ms-input-placeholder{color:#72085d}.placeholder-prune-active::placeholder{color:#72085d}.placeholder-sand::-moz-placeholder{color:#d7be88}.placeholder-sand:-ms-input-placeholder{color:#d7be88}.placeholder-sand::placeholder{color:#d7be88}.placeholder-sand-active::-moz-placeholder{color:#dfc181}.placeholder-sand-active:-ms-input-placeholder{color:#dfc181}.placeholder-sand-active::placeholder{color:#dfc181}.placeholder-sandPearl::-moz-placeholder{color:#f0e5d6}.placeholder-sandPearl:-ms-input-placeholder{color:#f0e5d6}.placeholder-sandPearl::placeholder{color:#f0e5d6}.placeholder-sandPearl-active::-moz-placeholder{color:#f2e6d4}.placeholder-sandPearl-active:-ms-input-placeholder{color:#f2e6d4}.placeholder-sandPearl-active::placeholder{color:#f2e6d4}.placeholder-silver::-moz-placeholder{color:#b1b2b4}.placeholder-silver:-ms-input-placeholder{color:#b1b2b4}.placeholder-silver::placeholder{color:#b1b2b4}.placeholder-silver-active::-moz-placeholder{color:#a9afbc}.placeholder-silver-active:-ms-input-placeholder{color:#a9afbc}.placeholder-silver-active::placeholder{color:#a9afbc}.placeholder-skyBlue::-moz-placeholder{color:#98d2d7}.placeholder-skyBlue:-ms-input-placeholder{color:#98d2d7}.placeholder-skyBlue::placeholder{color:#98d2d7}.placeholder-skyBlue-active::-moz-placeholder{color:#91d8de}.placeholder-skyBlue-active:-ms-input-placeholder{color:#91d8de}.placeholder-skyBlue-active::placeholder{color:#91d8de}.placeholder-southSea::-moz-placeholder{color:#9dc9cd}.placeholder-southSea:-ms-input-placeholder{color:#9dc9cd}.placeholder-southSea::placeholder{color:#9dc9cd}.placeholder-southSea-active::-moz-placeholder{color:#95ced5}.placeholder-southSea-active:-ms-input-placeholder{color:#95ced5}.placeholder-southSea-active::placeholder{color:#95ced5}.placeholder-turquoise::-moz-placeholder{color:#14a5c2}.placeholder-turquoise:-ms-input-placeholder{color:#14a5c2}.placeholder-turquoise::placeholder{color:#14a5c2}.placeholder-turquoise-active::-moz-placeholder{color:#0aaccd}.placeholder-turquoise-active:-ms-input-placeholder{color:#0aaccd}.placeholder-turquoise-active::placeholder{color:#0aaccd}.placeholder-waterGreen::-moz-placeholder{color:#007571}.placeholder-waterGreen:-ms-input-placeholder{color:#007571}.placeholder-waterGreen::placeholder{color:#007571}.placeholder-waterGreen-active::-moz-placeholder{color:#00a8a3}.placeholder-waterGreen-active:-ms-input-placeholder{color:#00a8a3}.placeholder-waterGreen-active::placeholder{color:#00a8a3}.placeholder-deepRed::-moz-placeholder{color:#c32222}.placeholder-deepRed:-ms-input-placeholder{color:#c32222}.placeholder-deepRed::placeholder{color:#c32222}.placeholder-deepRed-active::-moz-placeholder{color:#cf1717}.placeholder-deepRed-active:-ms-input-placeholder{color:#cf1717}.placeholder-deepRed-active::placeholder{color:#cf1717}.placeholder-emerald::-moz-placeholder{color:#14a33a}.placeholder-emerald:-ms-input-placeholder{color:#14a33a}.placeholder-emerald::placeholder{color:#14a33a}.placeholder-emerald-active::-moz-placeholder{color:#0bad36}.placeholder-emerald-active:-ms-input-placeholder{color:#0bad36}.placeholder-emerald-active::placeholder{color:#0bad36}.placeholder-greenLight::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.placeholder-greenLight:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.placeholder-greenLight::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.placeholder-orange-active::-moz-placeholder{color:#f65f2c}.placeholder-orange-active:-ms-input-placeholder{color:#f65f2c}.placeholder-orange-active::placeholder{color:#f65f2c}.placeholder-red-active::-moz-placeholder{color:#e13737}.placeholder-red-active:-ms-input-placeholder{color:#e13737}.placeholder-red-active::placeholder{color:#e13737}.placeholder-white-active::-moz-placeholder{color:#14a5c2}.placeholder-white-active:-ms-input-placeholder{color:#14a5c2}.placeholder-white-active::placeholder{color:#14a5c2}.placeholder-white-button::-moz-placeholder{color:#fff}.placeholder-white-button:-ms-input-placeholder{color:#fff}.placeholder-white-button::placeholder{color:#fff}.placeholder-white-button-active::-moz-placeholder{color:#fff}.placeholder-white-button-active:-ms-input-placeholder{color:#fff}.placeholder-white-button-active::placeholder{color:#fff}.placeholder-code::-moz-placeholder{color:#3f3d57}.placeholder-code:-ms-input-placeholder{color:#3f3d57}.placeholder-code::placeholder{color:#3f3d57}.placeholder-code-active::-moz-placeholder{color:#37354b}.placeholder-code-active:-ms-input-placeholder{color:#37354b}.placeholder-code-active::placeholder{color:#37354b}.placeholder-gray-lighter::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.placeholder-gray-lighter:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.placeholder-gray-lighter::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.placeholder-gray-lighter-active::-moz-placeholder{color:#ebebeb}.placeholder-gray-lighter-active:-ms-input-placeholder{color:#ebebeb}.placeholder-gray-lighter-active::placeholder{color:#ebebeb}.placeholder-gray-light::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.placeholder-gray-light:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.placeholder-gray-light::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.placeholder-gray-medium::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.placeholder-gray-medium:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.placeholder-gray-medium::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.placeholder-gray-darker::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.placeholder-gray-darker:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.placeholder-gray-darker::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.placeholder-gray-darker-active::-moz-placeholder{color:#14a5c2}.placeholder-gray-darker-active:-ms-input-placeholder{color:#14a5c2}.placeholder-gray-darker-active::placeholder{color:#14a5c2}.placeholder-api-default::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.placeholder-api-default:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.placeholder-api-default::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.placeholder-gray-xxl::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.placeholder-gray-xxl:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.placeholder-gray-xxl::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.placeholder-line-even::-moz-placeholder{color:#f3f6f7}.placeholder-line-even:-ms-input-placeholder{color:#f3f6f7}.placeholder-line-even::placeholder{color:#f3f6f7}.focus\:placeholder-transparent:focus::-moz-placeholder{color:transparent}.focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.focus\:placeholder-transparent:focus::placeholder{color:transparent}.focus\:placeholder-current:focus::-moz-placeholder{color:currentColor}.focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.focus\:placeholder-current:focus::placeholder{color:currentColor}.focus\:placeholder-black:focus::-moz-placeholder{color:#000}.focus\:placeholder-black:focus:-ms-input-placeholder{color:#000}.focus\:placeholder-black:focus::placeholder{color:#000}.focus\:placeholder-white:focus::-moz-placeholder{color:#fff}.focus\:placeholder-white:focus:-ms-input-placeholder{color:#fff}.focus\:placeholder-white:focus::placeholder{color:#fff}.focus\:placeholder-gray-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.focus\:placeholder-gray-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.focus\:placeholder-gray-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.focus\:placeholder-gray-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.focus\:placeholder-gray-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.focus\:placeholder-gray-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.focus\:placeholder-gray-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.focus\:placeholder-gray-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.focus\:placeholder-gray-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-red:focus::-moz-placeholder{color:#d64343}.focus\:placeholder-red:focus:-ms-input-placeholder{color:#d64343}.focus\:placeholder-red:focus::placeholder{color:#d64343}.focus\:placeholder-orange:focus::-moz-placeholder{color:#eb6437}.focus\:placeholder-orange:focus:-ms-input-placeholder{color:#eb6437}.focus\:placeholder-orange:focus::placeholder{color:#eb6437}.focus\:placeholder-yellow:focus::-moz-placeholder{color:#f8da30}.focus\:placeholder-yellow:focus:-ms-input-placeholder{color:#f8da30}.focus\:placeholder-yellow:focus::placeholder{color:#f8da30}.focus\:placeholder-green-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.focus\:placeholder-green-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.focus\:placeholder-green-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.focus\:placeholder-green-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.focus\:placeholder-green-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.focus\:placeholder-green-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.focus\:placeholder-green-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.focus\:placeholder-green-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.focus\:placeholder-green-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-teal-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.focus\:placeholder-teal-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.focus\:placeholder-teal-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.focus\:placeholder-teal-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.focus\:placeholder-teal-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.focus\:placeholder-teal-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.focus\:placeholder-teal-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.focus\:placeholder-teal-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.focus\:placeholder-teal-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-blue-50:focus::-moz-placeholder{color:#d1eaff}.focus\:placeholder-blue-50:focus:-ms-input-placeholder{color:#d1eaff}.focus\:placeholder-blue-50:focus::placeholder{color:#d1eaff}.focus\:placeholder-blue-100:focus::-moz-placeholder{color:#a8d7ff}.focus\:placeholder-blue-100:focus:-ms-input-placeholder{color:#a8d7ff}.focus\:placeholder-blue-100:focus::placeholder{color:#a8d7ff}.focus\:placeholder-blue-200:focus::-moz-placeholder{color:#80c4ff}.focus\:placeholder-blue-200:focus:-ms-input-placeholder{color:#80c4ff}.focus\:placeholder-blue-200:focus::placeholder{color:#80c4ff}.focus\:placeholder-blue-300:focus::-moz-placeholder{color:#57b0ff}.focus\:placeholder-blue-300:focus:-ms-input-placeholder{color:#57b0ff}.focus\:placeholder-blue-300:focus::placeholder{color:#57b0ff}.focus\:placeholder-blue-400:focus::-moz-placeholder{color:#2e9dff}.focus\:placeholder-blue-400:focus:-ms-input-placeholder{color:#2e9dff}.focus\:placeholder-blue-400:focus::placeholder{color:#2e9dff}.focus\:placeholder-blue-500:focus::-moz-placeholder{color:#058aff}.focus\:placeholder-blue-500:focus:-ms-input-placeholder{color:#058aff}.focus\:placeholder-blue-500:focus::placeholder{color:#058aff}.focus\:placeholder-blue-600:focus::-moz-placeholder{color:#0075db}.focus\:placeholder-blue-600:focus:-ms-input-placeholder{color:#0075db}.focus\:placeholder-blue-600:focus::placeholder{color:#0075db}.focus\:placeholder-blue-700:focus::-moz-placeholder{color:#005fb3}.focus\:placeholder-blue-700:focus:-ms-input-placeholder{color:#005fb3}.focus\:placeholder-blue-700:focus::placeholder{color:#005fb3}.focus\:placeholder-blue-800:focus::-moz-placeholder{color:#00498a}.focus\:placeholder-blue-800:focus:-ms-input-placeholder{color:#00498a}.focus\:placeholder-blue-800:focus::placeholder{color:#00498a}.focus\:placeholder-blue-900:focus::-moz-placeholder{color:#003461}.focus\:placeholder-blue-900:focus:-ms-input-placeholder{color:#003461}.focus\:placeholder-blue-900:focus::placeholder{color:#003461}.focus\:placeholder-blue-DEFAULT:focus::-moz-placeholder{color:#0075db}.focus\:placeholder-blue-DEFAULT:focus:-ms-input-placeholder{color:#0075db}.focus\:placeholder-blue-DEFAULT:focus::placeholder{color:#0075db}.focus\:placeholder-blue:focus::-moz-placeholder{color:#0075db}.focus\:placeholder-blue:focus:-ms-input-placeholder{color:#0075db}.focus\:placeholder-blue:focus::placeholder{color:#0075db}.focus\:placeholder-indigo-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.focus\:placeholder-indigo-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.focus\:placeholder-indigo-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.focus\:placeholder-indigo-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.focus\:placeholder-indigo-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.focus\:placeholder-indigo-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.focus\:placeholder-indigo-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.focus\:placeholder-indigo-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.focus\:placeholder-indigo-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-purple-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.focus\:placeholder-purple-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.focus\:placeholder-purple-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.focus\:placeholder-purple-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.focus\:placeholder-purple-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.focus\:placeholder-purple-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.focus\:placeholder-purple-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.focus\:placeholder-purple-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.focus\:placeholder-purple-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-pink:focus::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.focus\:placeholder-pink:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.focus\:placeholder-pink:focus::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.focus\:placeholder-inherit:focus::-moz-placeholder{color:inherit}.focus\:placeholder-inherit:focus:-ms-input-placeholder{color:inherit}.focus\:placeholder-inherit:focus::placeholder{color:inherit}.focus\:placeholder-amber:focus::-moz-placeholder{color:#d78737}.focus\:placeholder-amber:focus:-ms-input-placeholder{color:#d78737}.focus\:placeholder-amber:focus::placeholder{color:#d78737}.focus\:placeholder-amber-active:focus::-moz-placeholder{color:#e3872b}.focus\:placeholder-amber-active:focus:-ms-input-placeholder{color:#e3872b}.focus\:placeholder-amber-active:focus::placeholder{color:#e3872b}.focus\:placeholder-ardoise:focus::-moz-placeholder{color:#596a82}.focus\:placeholder-ardoise:focus:-ms-input-placeholder{color:#596a82}.focus\:placeholder-ardoise:focus::placeholder{color:#596a82}.focus\:placeholder-ardoise-active:focus::-moz-placeholder{color:#476794}.focus\:placeholder-ardoise-active:focus:-ms-input-placeholder{color:#476794}.focus\:placeholder-ardoise-active:focus::placeholder{color:#476794}.focus\:placeholder-blue-active:focus::-moz-placeholder{color:#14a5c2}.focus\:placeholder-blue-active:focus:-ms-input-placeholder{color:#14a5c2}.focus\:placeholder-blue-active:focus::placeholder{color:#14a5c2}.focus\:placeholder-lightBlue:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.focus\:placeholder-lightBlue:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.focus\:placeholder-lightBlue:focus::placeholder{color:rgba(0,85,138,.1)}.focus\:placeholder-lightBlue-active:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.focus\:placeholder-lightBlue-active:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.focus\:placeholder-lightBlue-active:focus::placeholder{color:rgba(0,85,138,.1)}.focus\:placeholder-deepBlue:focus::-moz-placeholder{color:#0e346c}.focus\:placeholder-deepBlue:focus:-ms-input-placeholder{color:#0e346c}.focus\:placeholder-deepBlue:focus::placeholder{color:#0e346c}.focus\:placeholder-deepBlue-active:focus::-moz-placeholder{color:#0a3f8f}.focus\:placeholder-deepBlue-active:focus:-ms-input-placeholder{color:#0a3f8f}.focus\:placeholder-deepBlue-active:focus::placeholder{color:#0a3f8f}.focus\:placeholder-gold:focus::-moz-placeholder{color:#bd9e56}.focus\:placeholder-gold:focus:-ms-input-placeholder{color:#bd9e56}.focus\:placeholder-gold:focus::placeholder{color:#bd9e56}.focus\:placeholder-gold-active:focus::-moz-placeholder{color:#c9a34a}.focus\:placeholder-gold-active:focus:-ms-input-placeholder{color:#c9a34a}.focus\:placeholder-gold-active:focus::placeholder{color:#c9a34a}.focus\:placeholder-grenadine:focus::-moz-placeholder{color:#c35078}.focus\:placeholder-grenadine:focus:-ms-input-placeholder{color:#c35078}.focus\:placeholder-grenadine:focus::placeholder{color:#c35078}.focus\:placeholder-grenadine-active:focus::-moz-placeholder{color:#cf4475}.focus\:placeholder-grenadine-active:focus:-ms-input-placeholder{color:#cf4475}.focus\:placeholder-grenadine-active:focus::placeholder{color:#cf4475}.focus\:placeholder-kiwi:focus::-moz-placeholder{color:#9a9f1e}.focus\:placeholder-kiwi:focus:-ms-input-placeholder{color:#9a9f1e}.focus\:placeholder-kiwi:focus::placeholder{color:#9a9f1e}.focus\:placeholder-kiwi-active:focus::-moz-placeholder{color:#a3a815}.focus\:placeholder-kiwi-active:focus:-ms-input-placeholder{color:#a3a815}.focus\:placeholder-kiwi-active:focus::placeholder{color:#a3a815}.focus\:placeholder-lilas:focus::-moz-placeholder{color:#7ea1d3}.focus\:placeholder-lilas:focus:-ms-input-placeholder{color:#7ea1d3}.focus\:placeholder-lilas:focus::placeholder{color:#7ea1d3}.focus\:placeholder-lilas-active:focus::-moz-placeholder{color:#75a0db}.focus\:placeholder-lilas-active:focus:-ms-input-placeholder{color:#75a0db}.focus\:placeholder-lilas-active:focus::placeholder{color:#75a0db}.focus\:placeholder-mahogany:focus::-moz-placeholder{color:#57142e}.focus\:placeholder-mahogany:focus:-ms-input-placeholder{color:#57142e}.focus\:placeholder-mahogany:focus::placeholder{color:#57142e}.focus\:placeholder-mahogany-active:focus::-moz-placeholder{color:#610a2b}.focus\:placeholder-mahogany-active:focus:-ms-input-placeholder{color:#610a2b}.focus\:placeholder-mahogany-active:focus::placeholder{color:#610a2b}.focus\:placeholder-ocher:focus::-moz-placeholder{color:#c29614}.focus\:placeholder-ocher:focus:-ms-input-placeholder{color:#c29614}.focus\:placeholder-ocher:focus::placeholder{color:#c29614}.focus\:placeholder-ocher-active:focus::-moz-placeholder{color:#cd9c0a}.focus\:placeholder-ocher-active:focus:-ms-input-placeholder{color:#cd9c0a}.focus\:placeholder-ocher-active:focus::placeholder{color:#cd9c0a}.focus\:placeholder-pine:focus::-moz-placeholder{color:#144d52}.focus\:placeholder-pine:focus:-ms-input-placeholder{color:#144d52}.focus\:placeholder-pine:focus::placeholder{color:#144d52}.focus\:placeholder-pine-active:focus::-moz-placeholder{color:#0a555c}.focus\:placeholder-pine-active:focus:-ms-input-placeholder{color:#0a555c}.focus\:placeholder-pine-active:focus::placeholder{color:#0a555c}.focus\:placeholder-platinum:focus::-moz-placeholder{color:#000}.focus\:placeholder-platinum:focus:-ms-input-placeholder{color:#000}.focus\:placeholder-platinum:focus::placeholder{color:#000}.focus\:placeholder-platinum-active:focus::-moz-placeholder{color:#000}.focus\:placeholder-platinum-active:focus:-ms-input-placeholder{color:#000}.focus\:placeholder-platinum-active:focus::placeholder{color:#000}.focus\:placeholder-prune:focus::-moz-placeholder{color:#661456}.focus\:placeholder-prune:focus:-ms-input-placeholder{color:#661456}.focus\:placeholder-prune:focus::placeholder{color:#661456}.focus\:placeholder-prune-active:focus::-moz-placeholder{color:#72085d}.focus\:placeholder-prune-active:focus:-ms-input-placeholder{color:#72085d}.focus\:placeholder-prune-active:focus::placeholder{color:#72085d}.focus\:placeholder-sand:focus::-moz-placeholder{color:#d7be88}.focus\:placeholder-sand:focus:-ms-input-placeholder{color:#d7be88}.focus\:placeholder-sand:focus::placeholder{color:#d7be88}.focus\:placeholder-sand-active:focus::-moz-placeholder{color:#dfc181}.focus\:placeholder-sand-active:focus:-ms-input-placeholder{color:#dfc181}.focus\:placeholder-sand-active:focus::placeholder{color:#dfc181}.focus\:placeholder-sandPearl:focus::-moz-placeholder{color:#f0e5d6}.focus\:placeholder-sandPearl:focus:-ms-input-placeholder{color:#f0e5d6}.focus\:placeholder-sandPearl:focus::placeholder{color:#f0e5d6}.focus\:placeholder-sandPearl-active:focus::-moz-placeholder{color:#f2e6d4}.focus\:placeholder-sandPearl-active:focus:-ms-input-placeholder{color:#f2e6d4}.focus\:placeholder-sandPearl-active:focus::placeholder{color:#f2e6d4}.focus\:placeholder-silver:focus::-moz-placeholder{color:#b1b2b4}.focus\:placeholder-silver:focus:-ms-input-placeholder{color:#b1b2b4}.focus\:placeholder-silver:focus::placeholder{color:#b1b2b4}.focus\:placeholder-silver-active:focus::-moz-placeholder{color:#a9afbc}.focus\:placeholder-silver-active:focus:-ms-input-placeholder{color:#a9afbc}.focus\:placeholder-silver-active:focus::placeholder{color:#a9afbc}.focus\:placeholder-skyBlue:focus::-moz-placeholder{color:#98d2d7}.focus\:placeholder-skyBlue:focus:-ms-input-placeholder{color:#98d2d7}.focus\:placeholder-skyBlue:focus::placeholder{color:#98d2d7}.focus\:placeholder-skyBlue-active:focus::-moz-placeholder{color:#91d8de}.focus\:placeholder-skyBlue-active:focus:-ms-input-placeholder{color:#91d8de}.focus\:placeholder-skyBlue-active:focus::placeholder{color:#91d8de}.focus\:placeholder-southSea:focus::-moz-placeholder{color:#9dc9cd}.focus\:placeholder-southSea:focus:-ms-input-placeholder{color:#9dc9cd}.focus\:placeholder-southSea:focus::placeholder{color:#9dc9cd}.focus\:placeholder-southSea-active:focus::-moz-placeholder{color:#95ced5}.focus\:placeholder-southSea-active:focus:-ms-input-placeholder{color:#95ced5}.focus\:placeholder-southSea-active:focus::placeholder{color:#95ced5}.focus\:placeholder-turquoise:focus::-moz-placeholder{color:#14a5c2}.focus\:placeholder-turquoise:focus:-ms-input-placeholder{color:#14a5c2}.focus\:placeholder-turquoise:focus::placeholder{color:#14a5c2}.focus\:placeholder-turquoise-active:focus::-moz-placeholder{color:#0aaccd}.focus\:placeholder-turquoise-active:focus:-ms-input-placeholder{color:#0aaccd}.focus\:placeholder-turquoise-active:focus::placeholder{color:#0aaccd}.focus\:placeholder-waterGreen:focus::-moz-placeholder{color:#007571}.focus\:placeholder-waterGreen:focus:-ms-input-placeholder{color:#007571}.focus\:placeholder-waterGreen:focus::placeholder{color:#007571}.focus\:placeholder-waterGreen-active:focus::-moz-placeholder{color:#00a8a3}.focus\:placeholder-waterGreen-active:focus:-ms-input-placeholder{color:#00a8a3}.focus\:placeholder-waterGreen-active:focus::placeholder{color:#00a8a3}.focus\:placeholder-deepRed:focus::-moz-placeholder{color:#c32222}.focus\:placeholder-deepRed:focus:-ms-input-placeholder{color:#c32222}.focus\:placeholder-deepRed:focus::placeholder{color:#c32222}.focus\:placeholder-deepRed-active:focus::-moz-placeholder{color:#cf1717}.focus\:placeholder-deepRed-active:focus:-ms-input-placeholder{color:#cf1717}.focus\:placeholder-deepRed-active:focus::placeholder{color:#cf1717}.focus\:placeholder-emerald:focus::-moz-placeholder{color:#14a33a}.focus\:placeholder-emerald:focus:-ms-input-placeholder{color:#14a33a}.focus\:placeholder-emerald:focus::placeholder{color:#14a33a}.focus\:placeholder-emerald-active:focus::-moz-placeholder{color:#0bad36}.focus\:placeholder-emerald-active:focus:-ms-input-placeholder{color:#0bad36}.focus\:placeholder-emerald-active:focus::placeholder{color:#0bad36}.focus\:placeholder-greenLight:focus::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.focus\:placeholder-greenLight:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.focus\:placeholder-greenLight:focus::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.focus\:placeholder-orange-active:focus::-moz-placeholder{color:#f65f2c}.focus\:placeholder-orange-active:focus:-ms-input-placeholder{color:#f65f2c}.focus\:placeholder-orange-active:focus::placeholder{color:#f65f2c}.focus\:placeholder-red-active:focus::-moz-placeholder{color:#e13737}.focus\:placeholder-red-active:focus:-ms-input-placeholder{color:#e13737}.focus\:placeholder-red-active:focus::placeholder{color:#e13737}.focus\:placeholder-white-active:focus::-moz-placeholder{color:#14a5c2}.focus\:placeholder-white-active:focus:-ms-input-placeholder{color:#14a5c2}.focus\:placeholder-white-active:focus::placeholder{color:#14a5c2}.focus\:placeholder-white-button:focus::-moz-placeholder{color:#fff}.focus\:placeholder-white-button:focus:-ms-input-placeholder{color:#fff}.focus\:placeholder-white-button:focus::placeholder{color:#fff}.focus\:placeholder-white-button-active:focus::-moz-placeholder{color:#fff}.focus\:placeholder-white-button-active:focus:-ms-input-placeholder{color:#fff}.focus\:placeholder-white-button-active:focus::placeholder{color:#fff}.focus\:placeholder-code:focus::-moz-placeholder{color:#3f3d57}.focus\:placeholder-code:focus:-ms-input-placeholder{color:#3f3d57}.focus\:placeholder-code:focus::placeholder{color:#3f3d57}.focus\:placeholder-code-active:focus::-moz-placeholder{color:#37354b}.focus\:placeholder-code-active:focus:-ms-input-placeholder{color:#37354b}.focus\:placeholder-code-active:focus::placeholder{color:#37354b}.focus\:placeholder-gray-lighter:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.focus\:placeholder-gray-lighter:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.focus\:placeholder-gray-lighter:focus::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.focus\:placeholder-gray-lighter-active:focus::-moz-placeholder{color:#ebebeb}.focus\:placeholder-gray-lighter-active:focus:-ms-input-placeholder{color:#ebebeb}.focus\:placeholder-gray-lighter-active:focus::placeholder{color:#ebebeb}.focus\:placeholder-gray-light:focus::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.focus\:placeholder-gray-light:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.focus\:placeholder-gray-light:focus::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.focus\:placeholder-gray-medium:focus::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.focus\:placeholder-gray-medium:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.focus\:placeholder-gray-medium:focus::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.focus\:placeholder-gray-darker:focus::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.focus\:placeholder-gray-darker:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.focus\:placeholder-gray-darker:focus::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.focus\:placeholder-gray-darker-active:focus::-moz-placeholder{color:#14a5c2}.focus\:placeholder-gray-darker-active:focus:-ms-input-placeholder{color:#14a5c2}.focus\:placeholder-gray-darker-active:focus::placeholder{color:#14a5c2}.focus\:placeholder-api-default:focus::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.focus\:placeholder-api-default:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.focus\:placeholder-api-default:focus::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.focus\:placeholder-gray-xxl:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.focus\:placeholder-gray-xxl:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.focus\:placeholder-gray-xxl:focus::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.focus\:placeholder-line-even:focus::-moz-placeholder{color:#f3f6f7}.focus\:placeholder-line-even:focus:-ms-input-placeholder{color:#f3f6f7}.focus\:placeholder-line-even:focus::placeholder{color:#f3f6f7}.placeholder-opacity-0::-moz-placeholder{--placeholder-opacity:0}.placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.placeholder-opacity-0::placeholder{--placeholder-opacity:0}.placeholder-opacity-25::-moz-placeholder{--placeholder-opacity:0.25}.placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.placeholder-opacity-50::-moz-placeholder{--placeholder-opacity:0.5}.placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.placeholder-opacity-75::-moz-placeholder{--placeholder-opacity:0.75}.placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.placeholder-opacity-100::-moz-placeholder{--placeholder-opacity:1}.placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.placeholder-opacity-100::placeholder{--placeholder-opacity:1}.focus\:placeholder-opacity-0:focus::-moz-placeholder{--placeholder-opacity:0}.focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.focus\:placeholder-opacity-25:focus::-moz-placeholder{--placeholder-opacity:0.25}.focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.focus\:placeholder-opacity-50:focus::-moz-placeholder{--placeholder-opacity:0.5}.focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.focus\:placeholder-opacity-75:focus::-moz-placeholder{--placeholder-opacity:0.75}.focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.focus\:placeholder-opacity-100:focus::-moz-placeholder{--placeholder-opacity:1}.focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-1{top:.25rem;right:.25rem;bottom:.25rem;left:.25rem}.inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.inset-3{top:.75rem;right:.75rem;bottom:.75rem;left:.75rem}.inset-4{top:1rem;right:1rem;bottom:1rem;left:1rem}.inset-5{top:1.25rem;right:1.25rem;bottom:1.25rem;left:1.25rem}.inset-6{top:1.5rem;right:1.5rem;bottom:1.5rem;left:1.5rem}.inset-7{top:1.75rem;right:1.75rem;bottom:1.75rem;left:1.75rem}.inset-8{top:2rem;right:2rem;bottom:2rem;left:2rem}.inset-9{top:2.25rem;right:2.25rem;bottom:2.25rem;left:2.25rem}.inset-10{top:2.5rem;right:2.5rem;bottom:2.5rem;left:2.5rem}.inset-11{top:2.75rem;right:2.75rem;bottom:2.75rem;left:2.75rem}.inset-12{top:3rem;right:3rem;bottom:3rem;left:3rem}.inset-15{top:3.75rem;right:3.75rem;bottom:3.75rem;left:3.75rem}.inset-16{top:4rem;right:4rem;bottom:4rem;left:4rem}.inset-20{top:5rem;right:5rem;bottom:5rem;left:5rem}.inset-22{top:5.5rem;right:5.5rem;bottom:5.5rem;left:5.5rem}.inset-24{top:6rem;right:6rem;bottom:6rem;left:6rem}.inset-25{top:6.25rem;right:6.25rem;bottom:6.25rem;left:6.25rem}.inset-26{top:6.5rem;right:6.5rem;bottom:6.5rem;left:6.5rem}.inset-28{top:8rem;right:8rem;bottom:8rem;left:8rem}.inset-30{top:8.5rem;right:8.5rem;bottom:8.5rem;left:8.5rem}.inset-32{top:9rem;right:9rem;bottom:9rem;left:9rem}.inset-40{top:10rem;right:10rem;bottom:10rem;left:10rem}.inset-48{top:12rem;right:12rem;bottom:12rem;left:12rem}.inset-52{top:13rem;right:13rem;bottom:13rem;left:13rem}.inset-56{top:14rem;right:14rem;bottom:14rem;left:14rem}.inset-60{top:15rem;right:15rem;bottom:15rem;left:15rem}.inset-64{top:16rem;right:16rem;bottom:16rem;left:16rem}.inset-68{top:17rem;right:17rem;bottom:17rem;left:17rem}.inset-auto{top:auto;right:auto;bottom:auto;left:auto}.inset-px{top:1px;right:1px;bottom:1px;left:1px}.inset-0\.5{top:.125rem;right:.125rem;bottom:.125rem;left:.125rem}.inset-1\.5{top:.375rem;right:.375rem;bottom:.375rem;left:.375rem}.inset-2\.5{top:.625rem;right:.625rem;bottom:.625rem;left:.625rem}.inset-7\.5{top:1.875rem;right:1.875rem;bottom:1.875rem;left:1.875rem}.inset-y-0{top:0;bottom:0}.inset-x-0{right:0;left:0}.inset-y-1{top:.25rem;bottom:.25rem}.inset-x-1{right:.25rem;left:.25rem}.inset-y-2{top:.5rem;bottom:.5rem}.inset-x-2{right:.5rem;left:.5rem}.inset-y-3{top:.75rem;bottom:.75rem}.inset-x-3{right:.75rem;left:.75rem}.inset-y-4{top:1rem;bottom:1rem}.inset-x-4{right:1rem;left:1rem}.inset-y-5{top:1.25rem;bottom:1.25rem}.inset-x-5{right:1.25rem;left:1.25rem}.inset-y-6{top:1.5rem;bottom:1.5rem}.inset-x-6{right:1.5rem;left:1.5rem}.inset-y-7{top:1.75rem;bottom:1.75rem}.inset-x-7{right:1.75rem;left:1.75rem}.inset-y-8{top:2rem;bottom:2rem}.inset-x-8{right:2rem;left:2rem}.inset-y-9{top:2.25rem;bottom:2.25rem}.inset-x-9{right:2.25rem;left:2.25rem}.inset-y-10{top:2.5rem;bottom:2.5rem}.inset-x-10{right:2.5rem;left:2.5rem}.inset-y-11{top:2.75rem;bottom:2.75rem}.inset-x-11{right:2.75rem;left:2.75rem}.inset-y-12{top:3rem;bottom:3rem}.inset-x-12{right:3rem;left:3rem}.inset-y-15{top:3.75rem;bottom:3.75rem}.inset-x-15{right:3.75rem;left:3.75rem}.inset-y-16{top:4rem;bottom:4rem}.inset-x-16{right:4rem;left:4rem}.inset-y-20{top:5rem;bottom:5rem}.inset-x-20{right:5rem;left:5rem}.inset-y-22{top:5.5rem;bottom:5.5rem}.inset-x-22{right:5.5rem;left:5.5rem}.inset-y-24{top:6rem;bottom:6rem}.inset-x-24{right:6rem;left:6rem}.inset-y-25{top:6.25rem;bottom:6.25rem}.inset-x-25{right:6.25rem;left:6.25rem}.inset-y-26{top:6.5rem;bottom:6.5rem}.inset-x-26{right:6.5rem;left:6.5rem}.inset-y-28{top:8rem;bottom:8rem}.inset-x-28{right:8rem;left:8rem}.inset-y-30{top:8.5rem;bottom:8.5rem}.inset-x-30{right:8.5rem;left:8.5rem}.inset-y-32{top:9rem;bottom:9rem}.inset-x-32{right:9rem;left:9rem}.inset-y-40{top:10rem;bottom:10rem}.inset-x-40{right:10rem;left:10rem}.inset-y-48{top:12rem;bottom:12rem}.inset-x-48{right:12rem;left:12rem}.inset-y-52{top:13rem;bottom:13rem}.inset-x-52{right:13rem;left:13rem}.inset-y-56{top:14rem;bottom:14rem}.inset-x-56{right:14rem;left:14rem}.inset-y-60{top:15rem;bottom:15rem}.inset-x-60{right:15rem;left:15rem}.inset-y-64{top:16rem;bottom:16rem}.inset-x-64{right:16rem;left:16rem}.inset-y-68{top:17rem;bottom:17rem}.inset-x-68{right:17rem;left:17rem}.inset-y-auto{top:auto;bottom:auto}.inset-x-auto{right:auto;left:auto}.inset-y-px{top:1px;bottom:1px}.inset-x-px{right:1px;left:1px}.inset-y-0\.5{top:.125rem;bottom:.125rem}.inset-x-0\.5{right:.125rem;left:.125rem}.inset-y-1\.5{top:.375rem;bottom:.375rem}.inset-x-1\.5{right:.375rem;left:.375rem}.inset-y-2\.5{top:.625rem;bottom:.625rem}.inset-x-2\.5{right:.625rem;left:.625rem}.inset-y-7\.5{top:1.875rem;bottom:1.875rem}.inset-x-7\.5{right:1.875rem;left:1.875rem}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-1{top:.25rem}.right-1{right:.25rem}.bottom-1{bottom:.25rem}.left-1{left:.25rem}.top-2{top:.5rem}.right-2{right:.5rem}.bottom-2{bottom:.5rem}.left-2{left:.5rem}.top-3{top:.75rem}.right-3{right:.75rem}.bottom-3{bottom:.75rem}.left-3{left:.75rem}.top-4{top:1rem}.right-4{right:1rem}.bottom-4{bottom:1rem}.left-4{left:1rem}.top-5{top:1.25rem}.right-5{right:1.25rem}.bottom-5{bottom:1.25rem}.left-5{left:1.25rem}.top-6{top:1.5rem}.right-6{right:1.5rem}.bottom-6{bottom:1.5rem}.left-6{left:1.5rem}.top-7{top:1.75rem}.right-7{right:1.75rem}.bottom-7{bottom:1.75rem}.left-7{left:1.75rem}.top-8{top:2rem}.right-8{right:2rem}.bottom-8{bottom:2rem}.left-8{left:2rem}.top-9{top:2.25rem}.right-9{right:2.25rem}.bottom-9{bottom:2.25rem}.left-9{left:2.25rem}.top-10{top:2.5rem}.right-10{right:2.5rem}.bottom-10{bottom:2.5rem}.left-10{left:2.5rem}.top-11{top:2.75rem}.right-11{right:2.75rem}.bottom-11{bottom:2.75rem}.left-11{left:2.75rem}.top-12{top:3rem}.right-12{right:3rem}.bottom-12{bottom:3rem}.left-12{left:3rem}.top-15{top:3.75rem}.right-15{right:3.75rem}.bottom-15{bottom:3.75rem}.left-15{left:3.75rem}.top-16{top:4rem}.right-16{right:4rem}.bottom-16{bottom:4rem}.left-16{left:4rem}.top-20{top:5rem}.right-20{right:5rem}.bottom-20{bottom:5rem}.left-20{left:5rem}.top-22{top:5.5rem}.right-22{right:5.5rem}.bottom-22{bottom:5.5rem}.left-22{left:5.5rem}.top-24{top:6rem}.right-24{right:6rem}.bottom-24{bottom:6rem}.left-24{left:6rem}.top-25{top:6.25rem}.right-25{right:6.25rem}.bottom-25{bottom:6.25rem}.left-25{left:6.25rem}.top-26{top:6.5rem}.right-26{right:6.5rem}.bottom-26{bottom:6.5rem}.left-26{left:6.5rem}.top-28{top:8rem}.right-28{right:8rem}.bottom-28{bottom:8rem}.left-28{left:8rem}.top-30{top:8.5rem}.right-30{right:8.5rem}.bottom-30{bottom:8.5rem}.left-30{left:8.5rem}.top-32{top:9rem}.right-32{right:9rem}.bottom-32{bottom:9rem}.left-32{left:9rem}.top-40{top:10rem}.right-40{right:10rem}.bottom-40{bottom:10rem}.left-40{left:10rem}.top-48{top:12rem}.right-48{right:12rem}.bottom-48{bottom:12rem}.left-48{left:12rem}.top-52{top:13rem}.right-52{right:13rem}.bottom-52{bottom:13rem}.left-52{left:13rem}.top-56{top:14rem}.right-56{right:14rem}.bottom-56{bottom:14rem}.left-56{left:14rem}.top-60{top:15rem}.right-60{right:15rem}.bottom-60{bottom:15rem}.left-60{left:15rem}.top-64{top:16rem}.right-64{right:16rem}.bottom-64{bottom:16rem}.left-64{left:16rem}.top-68{top:17rem}.right-68{right:17rem}.bottom-68{bottom:17rem}.left-68{left:17rem}.top-auto{top:auto}.right-auto{right:auto}.bottom-auto{bottom:auto}.left-auto{left:auto}.top-px{top:1px}.right-px{right:1px}.bottom-px{bottom:1px}.left-px{left:1px}.top-0\.5{top:.125rem}.right-0\.5{right:.125rem}.bottom-0\.5{bottom:.125rem}.left-0\.5{left:.125rem}.top-1\.5{top:.375rem}.right-1\.5{right:.375rem}.bottom-1\.5{bottom:.375rem}.left-1\.5{left:.375rem}.top-2\.5{top:.625rem}.right-2\.5{right:.625rem}.bottom-2\.5{bottom:.625rem}.left-2\.5{left:.625rem}.top-7\.5{top:1.875rem}.right-7\.5{right:1.875rem}.bottom-7\.5{bottom:1.875rem}.left-7\.5{left:1.875rem}.resize-none{resize:none}.resize-y{resize:vertical}.resize-x{resize:horizontal}.resize{resize:both}.shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.shadow-sm{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.shadow{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.shadow-md{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.shadow-lg{box-shadow:0 0 20px rgba(0,0,0,.15)}.shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.shadow-inner{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.shadow-outline{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.shadow-none{box-shadow:none}.shadow-strong{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.shadow-top{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.shadow-symbol{box-shadow:0 1px 2px rgba(10,16,20,.24)}.shadow-sidebar{box-shadow:0 0 25px rgba(0,0,0,.1)}.hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.hover\:shadow-sm:hover{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.hover\:shadow:hover{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.hover\:shadow-md:hover{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.hover\:shadow-lg:hover{box-shadow:0 0 20px rgba(0,0,0,.15)}.hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.hover\:shadow-inner:hover{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.hover\:shadow-none:hover{box-shadow:none}.hover\:shadow-strong:hover{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.hover\:shadow-top:hover{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.hover\:shadow-symbol:hover{box-shadow:0 1px 2px rgba(10,16,20,.24)}.hover\:shadow-sidebar:hover{box-shadow:0 0 25px rgba(0,0,0,.1)}.focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.focus\:shadow-sm:focus{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.focus\:shadow:focus{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.focus\:shadow-md:focus{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.focus\:shadow-lg:focus{box-shadow:0 0 20px rgba(0,0,0,.15)}.focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.focus\:shadow-inner:focus{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.focus\:shadow-none:focus{box-shadow:none}.focus\:shadow-strong:focus{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.focus\:shadow-top:focus{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.focus\:shadow-symbol:focus{box-shadow:0 1px 2px rgba(10,16,20,.24)}.focus\:shadow-sidebar:focus{box-shadow:0 0 25px rgba(0,0,0,.1)}.fill-current{fill:currentColor}.fill-transparent{fill:transparent}.stroke-current{stroke:currentColor}.stroke-0{stroke-width:0}.stroke-1{stroke-width:1}.stroke-2{stroke-width:2}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-transparent{color:transparent}.text-current{color:currentColor}.text-black{color:#000}.text-white{color:#fff}.text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.text-gray,.text-gray-DEFAULT{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-red{color:#d64343}.text-orange{color:#eb6437}.text-yellow{color:#f8da30}.text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.text-green,.text-green-DEFAULT{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.text-teal,.text-teal-DEFAULT{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.text-blue-50{color:#d1eaff}.text-blue-100{color:#a8d7ff}.text-blue-200{color:#80c4ff}.text-blue-300{color:#57b0ff}.text-blue-400{color:#2e9dff}.text-blue-500{color:#058aff}.text-blue-600{color:#0075db}.text-blue-700{color:#005fb3}.text-blue-800{color:#00498a}.text-blue-900{color:#003461}.text-blue,.text-blue-DEFAULT{color:#0075db}.text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.text-indigo,.text-indigo-DEFAULT{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.text-purple,.text-purple-DEFAULT{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.text-pink{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.text-inherit{color:inherit}.text-amber{color:#d78737}.text-amber-active{color:#e3872b}.text-ardoise{color:#596a82}.text-ardoise-active{color:#476794}.text-blue-active{color:#14a5c2}.text-lightBlue,.text-lightBlue-active{color:rgba(0,85,138,.1)}.text-deepBlue{color:#0e346c}.text-deepBlue-active{color:#0a3f8f}.text-gold{color:#bd9e56}.text-gold-active{color:#c9a34a}.text-grenadine{color:#c35078}.text-grenadine-active{color:#cf4475}.text-kiwi{color:#9a9f1e}.text-kiwi-active{color:#a3a815}.text-lilas{color:#7ea1d3}.text-lilas-active{color:#75a0db}.text-mahogany{color:#57142e}.text-mahogany-active{color:#610a2b}.text-ocher{color:#c29614}.text-ocher-active{color:#cd9c0a}.text-pine{color:#144d52}.text-pine-active{color:#0a555c}.text-platinum,.text-platinum-active{color:#000}.text-prune{color:#661456}.text-prune-active{color:#72085d}.text-sand{color:#d7be88}.text-sand-active{color:#dfc181}.text-sandPearl{color:#f0e5d6}.text-sandPearl-active{color:#f2e6d4}.text-silver{color:#b1b2b4}.text-silver-active{color:#a9afbc}.text-skyBlue{color:#98d2d7}.text-skyBlue-active{color:#91d8de}.text-southSea{color:#9dc9cd}.text-southSea-active{color:#95ced5}.text-turquoise{color:#14a5c2}.text-turquoise-active{color:#0aaccd}.text-waterGreen{color:#007571}.text-waterGreen-active{color:#00a8a3}.text-deepRed{color:#c32222}.text-deepRed-active{color:#cf1717}.text-emerald{color:#14a33a}.text-emerald-active{color:#0bad36}.text-greenLight{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.text-orange-active{color:#f65f2c}.text-red-active{color:#e13737}.text-white-active{color:#14a5c2}.text-white-button,.text-white-button-active{color:#fff}.text-code{color:#3f3d57}.text-code-active{color:#37354b}.text-gray-lighter{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.text-gray-lighter-active{color:#ebebeb}.text-gray-light{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.text-gray-medium{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.text-gray-darker{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.text-gray-darker-active{color:#14a5c2}.text-api-default{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.text-gray-xxl{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.text-line-even{color:#f3f6f7}.hover\:text-transparent:hover{color:transparent}.hover\:text-current:hover{color:currentColor}.hover\:text-black:hover{color:#000}.hover\:text-white:hover{color:#fff}.hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.hover\:text-gray-DEFAULT:hover,.hover\:text-gray:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.hover\:text-red:hover{color:#d64343}.hover\:text-orange:hover{color:#eb6437}.hover\:text-yellow:hover{color:#f8da30}.hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.hover\:text-green-DEFAULT:hover,.hover\:text-green:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.hover\:text-teal-DEFAULT:hover,.hover\:text-teal:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.hover\:text-blue-50:hover{color:#d1eaff}.hover\:text-blue-100:hover{color:#a8d7ff}.hover\:text-blue-200:hover{color:#80c4ff}.hover\:text-blue-300:hover{color:#57b0ff}.hover\:text-blue-400:hover{color:#2e9dff}.hover\:text-blue-500:hover{color:#058aff}.hover\:text-blue-600:hover{color:#0075db}.hover\:text-blue-700:hover{color:#005fb3}.hover\:text-blue-800:hover{color:#00498a}.hover\:text-blue-900:hover{color:#003461}.hover\:text-blue-DEFAULT:hover,.hover\:text-blue:hover{color:#0075db}.hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.hover\:text-indigo-DEFAULT:hover,.hover\:text-indigo:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.hover\:text-purple-DEFAULT:hover,.hover\:text-purple:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.hover\:text-pink:hover{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.hover\:text-inherit:hover{color:inherit}.hover\:text-amber:hover{color:#d78737}.hover\:text-amber-active:hover{color:#e3872b}.hover\:text-ardoise:hover{color:#596a82}.hover\:text-ardoise-active:hover{color:#476794}.hover\:text-blue-active:hover{color:#14a5c2}.hover\:text-lightBlue-active:hover,.hover\:text-lightBlue:hover{color:rgba(0,85,138,.1)}.hover\:text-deepBlue:hover{color:#0e346c}.hover\:text-deepBlue-active:hover{color:#0a3f8f}.hover\:text-gold:hover{color:#bd9e56}.hover\:text-gold-active:hover{color:#c9a34a}.hover\:text-grenadine:hover{color:#c35078}.hover\:text-grenadine-active:hover{color:#cf4475}.hover\:text-kiwi:hover{color:#9a9f1e}.hover\:text-kiwi-active:hover{color:#a3a815}.hover\:text-lilas:hover{color:#7ea1d3}.hover\:text-lilas-active:hover{color:#75a0db}.hover\:text-mahogany:hover{color:#57142e}.hover\:text-mahogany-active:hover{color:#610a2b}.hover\:text-ocher:hover{color:#c29614}.hover\:text-ocher-active:hover{color:#cd9c0a}.hover\:text-pine:hover{color:#144d52}.hover\:text-pine-active:hover{color:#0a555c}.hover\:text-platinum-active:hover,.hover\:text-platinum:hover{color:#000}.hover\:text-prune:hover{color:#661456}.hover\:text-prune-active:hover{color:#72085d}.hover\:text-sand:hover{color:#d7be88}.hover\:text-sand-active:hover{color:#dfc181}.hover\:text-sandPearl:hover{color:#f0e5d6}.hover\:text-sandPearl-active:hover{color:#f2e6d4}.hover\:text-silver:hover{color:#b1b2b4}.hover\:text-silver-active:hover{color:#a9afbc}.hover\:text-skyBlue:hover{color:#98d2d7}.hover\:text-skyBlue-active:hover{color:#91d8de}.hover\:text-southSea:hover{color:#9dc9cd}.hover\:text-southSea-active:hover{color:#95ced5}.hover\:text-turquoise:hover{color:#14a5c2}.hover\:text-turquoise-active:hover{color:#0aaccd}.hover\:text-waterGreen:hover{color:#007571}.hover\:text-waterGreen-active:hover{color:#00a8a3}.hover\:text-deepRed:hover{color:#c32222}.hover\:text-deepRed-active:hover{color:#cf1717}.hover\:text-emerald:hover{color:#14a33a}.hover\:text-emerald-active:hover{color:#0bad36}.hover\:text-greenLight:hover{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.hover\:text-orange-active:hover{color:#f65f2c}.hover\:text-red-active:hover{color:#e13737}.hover\:text-white-active:hover{color:#14a5c2}.hover\:text-white-button-active:hover,.hover\:text-white-button:hover{color:#fff}.hover\:text-code:hover{color:#3f3d57}.hover\:text-code-active:hover{color:#37354b}.hover\:text-gray-lighter:hover{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.hover\:text-gray-lighter-active:hover{color:#ebebeb}.hover\:text-gray-light:hover{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.hover\:text-gray-medium:hover{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.hover\:text-gray-darker:hover{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.hover\:text-gray-darker-active:hover{color:#14a5c2}.hover\:text-api-default:hover{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.hover\:text-gray-xxl:hover{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.hover\:text-line-even:hover{color:#f3f6f7}.focus\:text-transparent:focus{color:transparent}.focus\:text-current:focus{color:currentColor}.focus\:text-black:focus{color:#000}.focus\:text-white:focus{color:#fff}.focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.focus\:text-gray-DEFAULT:focus,.focus\:text-gray:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.focus\:text-red:focus{color:#d64343}.focus\:text-orange:focus{color:#eb6437}.focus\:text-yellow:focus{color:#f8da30}.focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.focus\:text-green-DEFAULT:focus,.focus\:text-green:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.focus\:text-teal-DEFAULT:focus,.focus\:text-teal:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.focus\:text-blue-50:focus{color:#d1eaff}.focus\:text-blue-100:focus{color:#a8d7ff}.focus\:text-blue-200:focus{color:#80c4ff}.focus\:text-blue-300:focus{color:#57b0ff}.focus\:text-blue-400:focus{color:#2e9dff}.focus\:text-blue-500:focus{color:#058aff}.focus\:text-blue-600:focus{color:#0075db}.focus\:text-blue-700:focus{color:#005fb3}.focus\:text-blue-800:focus{color:#00498a}.focus\:text-blue-900:focus{color:#003461}.focus\:text-blue-DEFAULT:focus,.focus\:text-blue:focus{color:#0075db}.focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.focus\:text-indigo-DEFAULT:focus,.focus\:text-indigo:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.focus\:text-purple-DEFAULT:focus,.focus\:text-purple:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.focus\:text-pink:focus{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.focus\:text-inherit:focus{color:inherit}.focus\:text-amber:focus{color:#d78737}.focus\:text-amber-active:focus{color:#e3872b}.focus\:text-ardoise:focus{color:#596a82}.focus\:text-ardoise-active:focus{color:#476794}.focus\:text-blue-active:focus{color:#14a5c2}.focus\:text-lightBlue-active:focus,.focus\:text-lightBlue:focus{color:rgba(0,85,138,.1)}.focus\:text-deepBlue:focus{color:#0e346c}.focus\:text-deepBlue-active:focus{color:#0a3f8f}.focus\:text-gold:focus{color:#bd9e56}.focus\:text-gold-active:focus{color:#c9a34a}.focus\:text-grenadine:focus{color:#c35078}.focus\:text-grenadine-active:focus{color:#cf4475}.focus\:text-kiwi:focus{color:#9a9f1e}.focus\:text-kiwi-active:focus{color:#a3a815}.focus\:text-lilas:focus{color:#7ea1d3}.focus\:text-lilas-active:focus{color:#75a0db}.focus\:text-mahogany:focus{color:#57142e}.focus\:text-mahogany-active:focus{color:#610a2b}.focus\:text-ocher:focus{color:#c29614}.focus\:text-ocher-active:focus{color:#cd9c0a}.focus\:text-pine:focus{color:#144d52}.focus\:text-pine-active:focus{color:#0a555c}.focus\:text-platinum-active:focus,.focus\:text-platinum:focus{color:#000}.focus\:text-prune:focus{color:#661456}.focus\:text-prune-active:focus{color:#72085d}.focus\:text-sand:focus{color:#d7be88}.focus\:text-sand-active:focus{color:#dfc181}.focus\:text-sandPearl:focus{color:#f0e5d6}.focus\:text-sandPearl-active:focus{color:#f2e6d4}.focus\:text-silver:focus{color:#b1b2b4}.focus\:text-silver-active:focus{color:#a9afbc}.focus\:text-skyBlue:focus{color:#98d2d7}.focus\:text-skyBlue-active:focus{color:#91d8de}.focus\:text-southSea:focus{color:#9dc9cd}.focus\:text-southSea-active:focus{color:#95ced5}.focus\:text-turquoise:focus{color:#14a5c2}.focus\:text-turquoise-active:focus{color:#0aaccd}.focus\:text-waterGreen:focus{color:#007571}.focus\:text-waterGreen-active:focus{color:#00a8a3}.focus\:text-deepRed:focus{color:#c32222}.focus\:text-deepRed-active:focus{color:#cf1717}.focus\:text-emerald:focus{color:#14a33a}.focus\:text-emerald-active:focus{color:#0bad36}.focus\:text-greenLight:focus{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.focus\:text-orange-active:focus{color:#f65f2c}.focus\:text-red-active:focus{color:#e13737}.focus\:text-white-active:focus{color:#14a5c2}.focus\:text-white-button-active:focus,.focus\:text-white-button:focus{color:#fff}.focus\:text-code:focus{color:#3f3d57}.focus\:text-code-active:focus{color:#37354b}.focus\:text-gray-lighter:focus{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.focus\:text-gray-lighter-active:focus{color:#ebebeb}.focus\:text-gray-light:focus{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.focus\:text-gray-medium:focus{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.focus\:text-gray-darker:focus{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.focus\:text-gray-darker-active:focus{color:#14a5c2}.focus\:text-api-default:focus{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.focus\:text-gray-xxl:focus{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.focus\:text-line-even:focus{color:#f3f6f7}.text-opacity-0{--text-opacity:0}.text-opacity-25{--text-opacity:0.25}.text-opacity-50{--text-opacity:0.5}.text-opacity-75{--text-opacity:0.75}.text-opacity-100{--text-opacity:1}.hover\:text-opacity-0:hover{--text-opacity:0}.hover\:text-opacity-25:hover{--text-opacity:0.25}.hover\:text-opacity-50:hover{--text-opacity:0.5}.hover\:text-opacity-75:hover{--text-opacity:0.75}.hover\:text-opacity-100:hover{--text-opacity:1}.focus\:text-opacity-0:focus{--text-opacity:0}.focus\:text-opacity-25:focus{--text-opacity:0.25}.focus\:text-opacity-50:focus{--text-opacity:0.5}.focus\:text-opacity-75:focus{--text-opacity:0.75}.focus\:text-opacity-100:focus{--text-opacity:1}.italic{font-style:italic}.not-italic{font-style:normal}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.no-underline{text-decoration:none}.hover\:underline:hover{text-decoration:underline}.hover\:line-through:hover{text-decoration:line-through}.hover\:no-underline:hover{text-decoration:none}.focus\:underline:focus{text-decoration:underline}.focus\:line-through:focus{text-decoration:line-through}.focus\:no-underline:focus{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.diagonal-fractions,.lining-nums,.oldstyle-nums,.ordinal,.proportional-nums,.slashed-zero,.stacked-fractions,.tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/);font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.normal-nums{font-variant-numeric:normal}.ordinal{--font-variant-numeric-ordinal:ordinal}.slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.lining-nums{--font-variant-numeric-figure:lining-nums}.oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.proportional-nums{--font-variant-numeric-spacing:proportional-nums}.tabular-nums{--font-variant-numeric-spacing:tabular-nums}.diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.tracking-tighter{letter-spacing:-.05em}.tracking-tight{letter-spacing:-.025em}.tracking-normal{letter-spacing:0}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-top{vertical-align:text-top}.align-text-bottom{vertical-align:text-bottom}.visible{visibility:visible}.invisible{visibility:hidden}.whitespace-normal{white-space:normal}.whitespace-no-wrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.break-words{word-wrap:break-word;overflow-wrap:break-word}.break-all{word-break:break-all}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.w-0{width:0}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-15{width:3.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-22{width:5.5rem}.w-24{width:6rem}.w-25{width:6.25rem}.w-26{width:6.5rem}.w-28{width:8rem}.w-30{width:8.5rem}.w-32{width:9rem}.w-40{width:10rem}.w-48{width:12rem}.w-52{width:13rem}.w-56{width:14rem}.w-60{width:15rem}.w-64{width:16rem}.w-68{width:17rem}.w-auto{width:auto}.w-px{width:1px}.w-0\.5{width:.125rem}.w-1\.5{width:.375rem}.w-2\.5{width:.625rem}.w-7\.5{width:1.875rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-1\/6{width:16.666667%}.w-2\/6{width:33.333333%}.w-3\/6{width:50%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-1\/12{width:8.333333%}.w-2\/12{width:16.666667%}.w-3\/12{width:25%}.w-4\/12{width:33.333333%}.w-5\/12{width:41.666667%}.w-6\/12{width:50%}.w-7\/12{width:58.333333%}.w-8\/12{width:66.666667%}.w-9\/12{width:75%}.w-10\/12{width:83.333333%}.w-11\/12{width:91.666667%}.w-full{width:100%}.w-screen{width:100vw}.w-3\/10{width:30%}.w-7\/10{width:70%}.w-9\/10{width:90%}.w-12\/25{width:48%}.z-0{z-index:0}.z-1{z-index:1}.z-2{z-index:2}.z-3{z-index:3}.z-4{z-index:4}.z-5{z-index:5}.z-6{z-index:6}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}.gap-0{grid-gap:0;gap:0}.gap-1{grid-gap:.25rem;gap:.25rem}.gap-2{grid-gap:.5rem;gap:.5rem}.gap-3{grid-gap:.75rem;gap:.75rem}.gap-4{grid-gap:1rem;gap:1rem}.gap-5{grid-gap:1.25rem;gap:1.25rem}.gap-6{grid-gap:1.5rem;gap:1.5rem}.gap-7{grid-gap:1.75rem;gap:1.75rem}.gap-8{grid-gap:2rem;gap:2rem}.gap-9{grid-gap:2.25rem;gap:2.25rem}.gap-10{grid-gap:2.5rem;gap:2.5rem}.gap-11{grid-gap:2.75rem;gap:2.75rem}.gap-12{grid-gap:3rem;gap:3rem}.gap-15{grid-gap:3.75rem;gap:3.75rem}.gap-16{grid-gap:4rem;gap:4rem}.gap-20{grid-gap:5rem;gap:5rem}.gap-22{grid-gap:5.5rem;gap:5.5rem}.gap-24{grid-gap:6rem;gap:6rem}.gap-25{grid-gap:6.25rem;gap:6.25rem}.gap-26{grid-gap:6.5rem;gap:6.5rem}.gap-28{grid-gap:8rem;gap:8rem}.gap-30{grid-gap:8.5rem;gap:8.5rem}.gap-32{grid-gap:9rem;gap:9rem}.gap-40{grid-gap:10rem;gap:10rem}.gap-48{grid-gap:12rem;gap:12rem}.gap-52{grid-gap:13rem;gap:13rem}.gap-56{grid-gap:14rem;gap:14rem}.gap-60{grid-gap:15rem;gap:15rem}.gap-64{grid-gap:16rem;gap:16rem}.gap-68{grid-gap:17rem;gap:17rem}.gap-px{grid-gap:1px;gap:1px}.gap-0\.5{grid-gap:.125rem;gap:.125rem}.gap-1\.5{grid-gap:.375rem;gap:.375rem}.gap-2\.5{grid-gap:.625rem;gap:.625rem}.gap-7\.5{grid-gap:1.875rem;gap:1.875rem}.col-gap-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.col-gap-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.col-gap-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.col-gap-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.col-gap-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.col-gap-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.col-gap-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.col-gap-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.col-gap-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.col-gap-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.col-gap-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.col-gap-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.col-gap-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.col-gap-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.col-gap-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.col-gap-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.col-gap-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.col-gap-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.col-gap-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.col-gap-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.col-gap-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.col-gap-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.col-gap-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.col-gap-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.col-gap-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.col-gap-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.col-gap-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.col-gap-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.col-gap-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.col-gap-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.col-gap-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.col-gap-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.col-gap-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.col-gap-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.col-gap-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.gap-x-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.gap-x-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.gap-x-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.gap-x-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.gap-x-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-x-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.gap-x-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.gap-x-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.gap-x-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.gap-x-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.gap-x-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.gap-x-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.gap-x-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.gap-x-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.gap-x-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.gap-x-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.gap-x-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.gap-x-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.gap-x-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.gap-x-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.gap-x-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.gap-x-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.gap-x-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.gap-x-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.gap-x-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.gap-x-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.gap-x-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.row-gap-0{grid-row-gap:0;row-gap:0}.row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.row-gap-4{grid-row-gap:1rem;row-gap:1rem}.row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.row-gap-7{grid-row-gap:1.75rem;row-gap:1.75rem}.row-gap-8{grid-row-gap:2rem;row-gap:2rem}.row-gap-9{grid-row-gap:2.25rem;row-gap:2.25rem}.row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.row-gap-11{grid-row-gap:2.75rem;row-gap:2.75rem}.row-gap-12{grid-row-gap:3rem;row-gap:3rem}.row-gap-15{grid-row-gap:3.75rem;row-gap:3.75rem}.row-gap-16{grid-row-gap:4rem;row-gap:4rem}.row-gap-20{grid-row-gap:5rem;row-gap:5rem}.row-gap-22{grid-row-gap:5.5rem;row-gap:5.5rem}.row-gap-24{grid-row-gap:6rem;row-gap:6rem}.row-gap-25{grid-row-gap:6.25rem;row-gap:6.25rem}.row-gap-26{grid-row-gap:6.5rem;row-gap:6.5rem}.row-gap-28{grid-row-gap:8rem;row-gap:8rem}.row-gap-30{grid-row-gap:8.5rem;row-gap:8.5rem}.row-gap-32{grid-row-gap:9rem;row-gap:9rem}.row-gap-40{grid-row-gap:10rem;row-gap:10rem}.row-gap-48{grid-row-gap:12rem;row-gap:12rem}.row-gap-52{grid-row-gap:13rem;row-gap:13rem}.row-gap-56{grid-row-gap:14rem;row-gap:14rem}.row-gap-60{grid-row-gap:15rem;row-gap:15rem}.row-gap-64{grid-row-gap:16rem;row-gap:16rem}.row-gap-68{grid-row-gap:17rem;row-gap:17rem}.row-gap-px{grid-row-gap:1px;row-gap:1px}.row-gap-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.row-gap-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.row-gap-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.row-gap-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.gap-y-0{grid-row-gap:0;row-gap:0}.gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.gap-y-4{grid-row-gap:1rem;row-gap:1rem}.gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.gap-y-7{grid-row-gap:1.75rem;row-gap:1.75rem}.gap-y-8{grid-row-gap:2rem;row-gap:2rem}.gap-y-9{grid-row-gap:2.25rem;row-gap:2.25rem}.gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.gap-y-11{grid-row-gap:2.75rem;row-gap:2.75rem}.gap-y-12{grid-row-gap:3rem;row-gap:3rem}.gap-y-15{grid-row-gap:3.75rem;row-gap:3.75rem}.gap-y-16{grid-row-gap:4rem;row-gap:4rem}.gap-y-20{grid-row-gap:5rem;row-gap:5rem}.gap-y-22{grid-row-gap:5.5rem;row-gap:5.5rem}.gap-y-24{grid-row-gap:6rem;row-gap:6rem}.gap-y-25{grid-row-gap:6.25rem;row-gap:6.25rem}.gap-y-26{grid-row-gap:6.5rem;row-gap:6.5rem}.gap-y-28{grid-row-gap:8rem;row-gap:8rem}.gap-y-30{grid-row-gap:8.5rem;row-gap:8.5rem}.gap-y-32{grid-row-gap:9rem;row-gap:9rem}.gap-y-40{grid-row-gap:10rem;row-gap:10rem}.gap-y-48{grid-row-gap:12rem;row-gap:12rem}.gap-y-52{grid-row-gap:13rem;row-gap:13rem}.gap-y-56{grid-row-gap:14rem;row-gap:14rem}.gap-y-60{grid-row-gap:15rem;row-gap:15rem}.gap-y-64{grid-row-gap:16rem;row-gap:16rem}.gap-y-68{grid-row-gap:17rem;row-gap:17rem}.gap-y-px{grid-row-gap:1px;row-gap:1px}.gap-y-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.gap-y-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.gap-y-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.gap-y-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.grid-flow-row{grid-auto-flow:row}.grid-flow-col{grid-auto-flow:column}.grid-flow-row-dense{grid-auto-flow:row dense}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-none{grid-template-columns:none}.auto-cols-auto{grid-auto-columns:auto}.auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-4{grid-column-start:4}.col-start-5{grid-column-start:5}.col-start-6{grid-column-start:6}.col-start-7{grid-column-start:7}.col-start-8{grid-column-start:8}.col-start-9{grid-column-start:9}.col-start-10{grid-column-start:10}.col-start-11{grid-column-start:11}.col-start-12{grid-column-start:12}.col-start-13{grid-column-start:13}.col-start-auto{grid-column-start:auto}.col-end-1{grid-column-end:1}.col-end-2{grid-column-end:2}.col-end-3{grid-column-end:3}.col-end-4{grid-column-end:4}.col-end-5{grid-column-end:5}.col-end-6{grid-column-end:6}.col-end-7{grid-column-end:7}.col-end-8{grid-column-end:8}.col-end-9{grid-column-end:9}.col-end-10{grid-column-end:10}.col-end-11{grid-column-end:11}.col-end-12{grid-column-end:12}.col-end-13{grid-column-end:13}.col-end-auto{grid-column-end:auto}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.grid-rows-none{grid-template-rows:none}.auto-rows-auto{grid-auto-rows:auto}.auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.row-auto{grid-row:auto}.row-span-1{grid-row:span 1/span 1}.row-span-2{grid-row:span 2/span 2}.row-span-3{grid-row:span 3/span 3}.row-span-4{grid-row:span 4/span 4}.row-span-5{grid-row:span 5/span 5}.row-span-6{grid-row:span 6/span 6}.row-span-full{grid-row:1/-1}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.row-start-4{grid-row-start:4}.row-start-5{grid-row-start:5}.row-start-6{grid-row-start:6}.row-start-7{grid-row-start:7}.row-start-auto{grid-row-start:auto}.row-end-1{grid-row-end:1}.row-end-2{grid-row-end:2}.row-end-3{grid-row-end:3}.row-end-4{grid-row-end:4}.row-end-5{grid-row-end:5}.row-end-6{grid-row-end:6}.row-end-7{grid-row-end:7}.row-end-auto{grid-row-end:auto}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.origin-center{transform-origin:center}.origin-top{transform-origin:top}.origin-top-right{transform-origin:top right}.origin-right{transform-origin:right}.origin-bottom-right{transform-origin:bottom right}.origin-bottom{transform-origin:bottom}.origin-bottom-left{transform-origin:bottom left}.origin-left{transform-origin:left}.origin-top-left{transform-origin:top left}.scale-0{--transform-scale-x:0;--transform-scale-y:0}.scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.scale-100{--transform-scale-x:1;--transform-scale-y:1}.scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.scale-x-0{--transform-scale-x:0}.scale-x-50{--transform-scale-x:.5}.scale-x-75{--transform-scale-x:.75}.scale-x-90{--transform-scale-x:.9}.scale-x-95{--transform-scale-x:.95}.scale-x-100{--transform-scale-x:1}.scale-x-105{--transform-scale-x:1.05}.scale-x-110{--transform-scale-x:1.1}.scale-x-125{--transform-scale-x:1.25}.scale-x-150{--transform-scale-x:1.5}.scale-y-0{--transform-scale-y:0}.scale-y-50{--transform-scale-y:.5}.scale-y-75{--transform-scale-y:.75}.scale-y-90{--transform-scale-y:.9}.scale-y-95{--transform-scale-y:.95}.scale-y-100{--transform-scale-y:1}.scale-y-105{--transform-scale-y:1.05}.scale-y-110{--transform-scale-y:1.1}.scale-y-125{--transform-scale-y:1.25}.scale-y-150{--transform-scale-y:1.5}.hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.hover\:scale-x-0:hover{--transform-scale-x:0}.hover\:scale-x-50:hover{--transform-scale-x:.5}.hover\:scale-x-75:hover{--transform-scale-x:.75}.hover\:scale-x-90:hover{--transform-scale-x:.9}.hover\:scale-x-95:hover{--transform-scale-x:.95}.hover\:scale-x-100:hover{--transform-scale-x:1}.hover\:scale-x-105:hover{--transform-scale-x:1.05}.hover\:scale-x-110:hover{--transform-scale-x:1.1}.hover\:scale-x-125:hover{--transform-scale-x:1.25}.hover\:scale-x-150:hover{--transform-scale-x:1.5}.hover\:scale-y-0:hover{--transform-scale-y:0}.hover\:scale-y-50:hover{--transform-scale-y:.5}.hover\:scale-y-75:hover{--transform-scale-y:.75}.hover\:scale-y-90:hover{--transform-scale-y:.9}.hover\:scale-y-95:hover{--transform-scale-y:.95}.hover\:scale-y-100:hover{--transform-scale-y:1}.hover\:scale-y-105:hover{--transform-scale-y:1.05}.hover\:scale-y-110:hover{--transform-scale-y:1.1}.hover\:scale-y-125:hover{--transform-scale-y:1.25}.hover\:scale-y-150:hover{--transform-scale-y:1.5}.focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.focus\:scale-x-0:focus{--transform-scale-x:0}.focus\:scale-x-50:focus{--transform-scale-x:.5}.focus\:scale-x-75:focus{--transform-scale-x:.75}.focus\:scale-x-90:focus{--transform-scale-x:.9}.focus\:scale-x-95:focus{--transform-scale-x:.95}.focus\:scale-x-100:focus{--transform-scale-x:1}.focus\:scale-x-105:focus{--transform-scale-x:1.05}.focus\:scale-x-110:focus{--transform-scale-x:1.1}.focus\:scale-x-125:focus{--transform-scale-x:1.25}.focus\:scale-x-150:focus{--transform-scale-x:1.5}.focus\:scale-y-0:focus{--transform-scale-y:0}.focus\:scale-y-50:focus{--transform-scale-y:.5}.focus\:scale-y-75:focus{--transform-scale-y:.75}.focus\:scale-y-90:focus{--transform-scale-y:.9}.focus\:scale-y-95:focus{--transform-scale-y:.95}.focus\:scale-y-100:focus{--transform-scale-y:1}.focus\:scale-y-105:focus{--transform-scale-y:1.05}.focus\:scale-y-110:focus{--transform-scale-y:1.1}.focus\:scale-y-125:focus{--transform-scale-y:1.25}.focus\:scale-y-150:focus{--transform-scale-y:1.5}.rotate-0{--transform-rotate:0}.rotate-90{--transform-rotate:90deg}.rotate-135{--transform-rotate:135deg}.rotate-180{--transform-rotate:180deg}.-rotate-180{--transform-rotate:-180deg}.-rotate-135{--transform-rotate:-135deg}.-rotate-90{--transform-rotate:-90deg}.hover\:rotate-0:hover{--transform-rotate:0}.hover\:rotate-90:hover{--transform-rotate:90deg}.hover\:rotate-135:hover{--transform-rotate:135deg}.hover\:rotate-180:hover{--transform-rotate:180deg}.hover\:-rotate-180:hover{--transform-rotate:-180deg}.hover\:-rotate-135:hover{--transform-rotate:-135deg}.hover\:-rotate-90:hover{--transform-rotate:-90deg}.focus\:rotate-0:focus{--transform-rotate:0}.focus\:rotate-90:focus{--transform-rotate:90deg}.focus\:rotate-135:focus{--transform-rotate:135deg}.focus\:rotate-180:focus{--transform-rotate:180deg}.focus\:-rotate-180:focus{--transform-rotate:-180deg}.focus\:-rotate-135:focus{--transform-rotate:-135deg}.focus\:-rotate-90:focus{--transform-rotate:-90deg}.translate-x-0{--transform-translate-x:0}.translate-x-1{--transform-translate-x:.25rem}.translate-x-2{--transform-translate-x:.5rem}.translate-x-3{--transform-translate-x:.75rem}.translate-x-4{--transform-translate-x:1rem}.translate-x-5{--transform-translate-x:1.25rem}.translate-x-6{--transform-translate-x:1.5rem}.translate-x-7{--transform-translate-x:1.75rem}.translate-x-8{--transform-translate-x:2rem}.translate-x-9{--transform-translate-x:2.25rem}.translate-x-10{--transform-translate-x:2.5rem}.translate-x-11{--transform-translate-x:2.75rem}.translate-x-12{--transform-translate-x:3rem}.translate-x-15{--transform-translate-x:3.75rem}.translate-x-16{--transform-translate-x:4rem}.translate-x-20{--transform-translate-x:5rem}.translate-x-22{--transform-translate-x:5.5rem}.translate-x-24{--transform-translate-x:6rem}.translate-x-25{--transform-translate-x:6.25rem}.translate-x-26{--transform-translate-x:6.5rem}.translate-x-28{--transform-translate-x:8rem}.translate-x-30{--transform-translate-x:8.5rem}.translate-x-32{--transform-translate-x:9rem}.translate-x-40{--transform-translate-x:10rem}.translate-x-48{--transform-translate-x:12rem}.translate-x-52{--transform-translate-x:13rem}.translate-x-56{--transform-translate-x:14rem}.translate-x-60{--transform-translate-x:15rem}.translate-x-64{--transform-translate-x:16rem}.translate-x-68{--transform-translate-x:17rem}.translate-x-px{--transform-translate-x:1px}.translate-x-0\.5{--transform-translate-x:.125rem}.translate-x-1\.5{--transform-translate-x:.375rem}.translate-x-2\.5{--transform-translate-x:.625rem}.translate-x-7\.5{--transform-translate-x:1.875rem}.-translate-x-1{--transform-translate-x:-0.25rem}.-translate-x-2{--transform-translate-x:-0.5rem}.-translate-x-3{--transform-translate-x:-0.75rem}.-translate-x-4{--transform-translate-x:-1rem}.-translate-x-5{--transform-translate-x:-1.25rem}.-translate-x-6{--transform-translate-x:-1.5rem}.-translate-x-7{--transform-translate-x:-1.75rem}.-translate-x-8{--transform-translate-x:-2rem}.-translate-x-9{--transform-translate-x:-2.25rem}.-translate-x-10{--transform-translate-x:-2.5rem}.-translate-x-11{--transform-translate-x:-2.75rem}.-translate-x-12{--transform-translate-x:-3rem}.-translate-x-15{--transform-translate-x:-3.75rem}.-translate-x-16{--transform-translate-x:-4rem}.-translate-x-20{--transform-translate-x:-5rem}.-translate-x-22{--transform-translate-x:-5.5rem}.-translate-x-24{--transform-translate-x:-6rem}.-translate-x-25{--transform-translate-x:-6.25rem}.-translate-x-26{--transform-translate-x:-6.5rem}.-translate-x-28{--transform-translate-x:-8rem}.-translate-x-30{--transform-translate-x:-8.5rem}.-translate-x-32{--transform-translate-x:-9rem}.-translate-x-40{--transform-translate-x:-10rem}.-translate-x-48{--transform-translate-x:-12rem}.-translate-x-52{--transform-translate-x:-13rem}.-translate-x-56{--transform-translate-x:-14rem}.-translate-x-60{--transform-translate-x:-15rem}.-translate-x-64{--transform-translate-x:-16rem}.-translate-x-68{--transform-translate-x:-17rem}.-translate-x-px{--transform-translate-x:-1px}.-translate-x-0\.5{--transform-translate-x:-0.125rem}.-translate-x-1\.5{--transform-translate-x:-0.375rem}.-translate-x-2\.5{--transform-translate-x:-0.625rem}.-translate-x-7\.5{--transform-translate-x:-1.875rem}.-translate-x-full{--transform-translate-x:-100%}.-translate-x-1\/2{--transform-translate-x:-50%}.translate-x-1\/2{--transform-translate-x:50%}.translate-x-full{--transform-translate-x:100%}.translate-y-0{--transform-translate-y:0}.translate-y-1{--transform-translate-y:.25rem}.translate-y-2{--transform-translate-y:.5rem}.translate-y-3{--transform-translate-y:.75rem}.translate-y-4{--transform-translate-y:1rem}.translate-y-5{--transform-translate-y:1.25rem}.translate-y-6{--transform-translate-y:1.5rem}.translate-y-7{--transform-translate-y:1.75rem}.translate-y-8{--transform-translate-y:2rem}.translate-y-9{--transform-translate-y:2.25rem}.translate-y-10{--transform-translate-y:2.5rem}.translate-y-11{--transform-translate-y:2.75rem}.translate-y-12{--transform-translate-y:3rem}.translate-y-15{--transform-translate-y:3.75rem}.translate-y-16{--transform-translate-y:4rem}.translate-y-20{--transform-translate-y:5rem}.translate-y-22{--transform-translate-y:5.5rem}.translate-y-24{--transform-translate-y:6rem}.translate-y-25{--transform-translate-y:6.25rem}.translate-y-26{--transform-translate-y:6.5rem}.translate-y-28{--transform-translate-y:8rem}.translate-y-30{--transform-translate-y:8.5rem}.translate-y-32{--transform-translate-y:9rem}.translate-y-40{--transform-translate-y:10rem}.translate-y-48{--transform-translate-y:12rem}.translate-y-52{--transform-translate-y:13rem}.translate-y-56{--transform-translate-y:14rem}.translate-y-60{--transform-translate-y:15rem}.translate-y-64{--transform-translate-y:16rem}.translate-y-68{--transform-translate-y:17rem}.translate-y-px{--transform-translate-y:1px}.translate-y-0\.5{--transform-translate-y:.125rem}.translate-y-1\.5{--transform-translate-y:.375rem}.translate-y-2\.5{--transform-translate-y:.625rem}.translate-y-7\.5{--transform-translate-y:1.875rem}.-translate-y-1{--transform-translate-y:-0.25rem}.-translate-y-2{--transform-translate-y:-0.5rem}.-translate-y-3{--transform-translate-y:-0.75rem}.-translate-y-4{--transform-translate-y:-1rem}.-translate-y-5{--transform-translate-y:-1.25rem}.-translate-y-6{--transform-translate-y:-1.5rem}.-translate-y-7{--transform-translate-y:-1.75rem}.-translate-y-8{--transform-translate-y:-2rem}.-translate-y-9{--transform-translate-y:-2.25rem}.-translate-y-10{--transform-translate-y:-2.5rem}.-translate-y-11{--transform-translate-y:-2.75rem}.-translate-y-12{--transform-translate-y:-3rem}.-translate-y-15{--transform-translate-y:-3.75rem}.-translate-y-16{--transform-translate-y:-4rem}.-translate-y-20{--transform-translate-y:-5rem}.-translate-y-22{--transform-translate-y:-5.5rem}.-translate-y-24{--transform-translate-y:-6rem}.-translate-y-25{--transform-translate-y:-6.25rem}.-translate-y-26{--transform-translate-y:-6.5rem}.-translate-y-28{--transform-translate-y:-8rem}.-translate-y-30{--transform-translate-y:-8.5rem}.-translate-y-32{--transform-translate-y:-9rem}.-translate-y-40{--transform-translate-y:-10rem}.-translate-y-48{--transform-translate-y:-12rem}.-translate-y-52{--transform-translate-y:-13rem}.-translate-y-56{--transform-translate-y:-14rem}.-translate-y-60{--transform-translate-y:-15rem}.-translate-y-64{--transform-translate-y:-16rem}.-translate-y-68{--transform-translate-y:-17rem}.-translate-y-px{--transform-translate-y:-1px}.-translate-y-0\.5{--transform-translate-y:-0.125rem}.-translate-y-1\.5{--transform-translate-y:-0.375rem}.-translate-y-2\.5{--transform-translate-y:-0.625rem}.-translate-y-7\.5{--transform-translate-y:-1.875rem}.-translate-y-full{--transform-translate-y:-100%}.-translate-y-1\/2{--transform-translate-y:-50%}.translate-y-1\/2{--transform-translate-y:50%}.translate-y-full{--transform-translate-y:100%}.hover\:translate-x-0:hover{--transform-translate-x:0}.hover\:translate-x-1:hover{--transform-translate-x:.25rem}.hover\:translate-x-2:hover{--transform-translate-x:.5rem}.hover\:translate-x-3:hover{--transform-translate-x:.75rem}.hover\:translate-x-4:hover{--transform-translate-x:1rem}.hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.hover\:translate-x-7:hover{--transform-translate-x:1.75rem}.hover\:translate-x-8:hover{--transform-translate-x:2rem}.hover\:translate-x-9:hover{--transform-translate-x:2.25rem}.hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.hover\:translate-x-11:hover{--transform-translate-x:2.75rem}.hover\:translate-x-12:hover{--transform-translate-x:3rem}.hover\:translate-x-15:hover{--transform-translate-x:3.75rem}.hover\:translate-x-16:hover{--transform-translate-x:4rem}.hover\:translate-x-20:hover{--transform-translate-x:5rem}.hover\:translate-x-22:hover{--transform-translate-x:5.5rem}.hover\:translate-x-24:hover{--transform-translate-x:6rem}.hover\:translate-x-25:hover{--transform-translate-x:6.25rem}.hover\:translate-x-26:hover{--transform-translate-x:6.5rem}.hover\:translate-x-28:hover{--transform-translate-x:8rem}.hover\:translate-x-30:hover{--transform-translate-x:8.5rem}.hover\:translate-x-32:hover{--transform-translate-x:9rem}.hover\:translate-x-40:hover{--transform-translate-x:10rem}.hover\:translate-x-48:hover{--transform-translate-x:12rem}.hover\:translate-x-52:hover{--transform-translate-x:13rem}.hover\:translate-x-56:hover{--transform-translate-x:14rem}.hover\:translate-x-60:hover{--transform-translate-x:15rem}.hover\:translate-x-64:hover{--transform-translate-x:16rem}.hover\:translate-x-68:hover{--transform-translate-x:17rem}.hover\:translate-x-px:hover{--transform-translate-x:1px}.hover\:translate-x-0\.5:hover{--transform-translate-x:.125rem}.hover\:translate-x-1\.5:hover{--transform-translate-x:.375rem}.hover\:translate-x-2\.5:hover{--transform-translate-x:.625rem}.hover\:translate-x-7\.5:hover{--transform-translate-x:1.875rem}.hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.hover\:-translate-x-7:hover{--transform-translate-x:-1.75rem}.hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.hover\:-translate-x-9:hover{--transform-translate-x:-2.25rem}.hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.hover\:-translate-x-11:hover{--transform-translate-x:-2.75rem}.hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.hover\:-translate-x-15:hover{--transform-translate-x:-3.75rem}.hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.hover\:-translate-x-22:hover{--transform-translate-x:-5.5rem}.hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.hover\:-translate-x-25:hover{--transform-translate-x:-6.25rem}.hover\:-translate-x-26:hover{--transform-translate-x:-6.5rem}.hover\:-translate-x-28:hover{--transform-translate-x:-8rem}.hover\:-translate-x-30:hover{--transform-translate-x:-8.5rem}.hover\:-translate-x-32:hover{--transform-translate-x:-9rem}.hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.hover\:-translate-x-52:hover{--transform-translate-x:-13rem}.hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.hover\:-translate-x-60:hover{--transform-translate-x:-15rem}.hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.hover\:-translate-x-68:hover{--transform-translate-x:-17rem}.hover\:-translate-x-px:hover{--transform-translate-x:-1px}.hover\:-translate-x-0\.5:hover{--transform-translate-x:-0.125rem}.hover\:-translate-x-1\.5:hover{--transform-translate-x:-0.375rem}.hover\:-translate-x-2\.5:hover{--transform-translate-x:-0.625rem}.hover\:-translate-x-7\.5:hover{--transform-translate-x:-1.875rem}.hover\:-translate-x-full:hover{--transform-translate-x:-100%}.hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.hover\:translate-x-full:hover{--transform-translate-x:100%}.hover\:translate-y-0:hover{--transform-translate-y:0}.hover\:translate-y-1:hover{--transform-translate-y:.25rem}.hover\:translate-y-2:hover{--transform-translate-y:.5rem}.hover\:translate-y-3:hover{--transform-translate-y:.75rem}.hover\:translate-y-4:hover{--transform-translate-y:1rem}.hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.hover\:translate-y-7:hover{--transform-translate-y:1.75rem}.hover\:translate-y-8:hover{--transform-translate-y:2rem}.hover\:translate-y-9:hover{--transform-translate-y:2.25rem}.hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.hover\:translate-y-11:hover{--transform-translate-y:2.75rem}.hover\:translate-y-12:hover{--transform-translate-y:3rem}.hover\:translate-y-15:hover{--transform-translate-y:3.75rem}.hover\:translate-y-16:hover{--transform-translate-y:4rem}.hover\:translate-y-20:hover{--transform-translate-y:5rem}.hover\:translate-y-22:hover{--transform-translate-y:5.5rem}.hover\:translate-y-24:hover{--transform-translate-y:6rem}.hover\:translate-y-25:hover{--transform-translate-y:6.25rem}.hover\:translate-y-26:hover{--transform-translate-y:6.5rem}.hover\:translate-y-28:hover{--transform-translate-y:8rem}.hover\:translate-y-30:hover{--transform-translate-y:8.5rem}.hover\:translate-y-32:hover{--transform-translate-y:9rem}.hover\:translate-y-40:hover{--transform-translate-y:10rem}.hover\:translate-y-48:hover{--transform-translate-y:12rem}.hover\:translate-y-52:hover{--transform-translate-y:13rem}.hover\:translate-y-56:hover{--transform-translate-y:14rem}.hover\:translate-y-60:hover{--transform-translate-y:15rem}.hover\:translate-y-64:hover{--transform-translate-y:16rem}.hover\:translate-y-68:hover{--transform-translate-y:17rem}.hover\:translate-y-px:hover{--transform-translate-y:1px}.hover\:translate-y-0\.5:hover{--transform-translate-y:.125rem}.hover\:translate-y-1\.5:hover{--transform-translate-y:.375rem}.hover\:translate-y-2\.5:hover{--transform-translate-y:.625rem}.hover\:translate-y-7\.5:hover{--transform-translate-y:1.875rem}.hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.hover\:-translate-y-7:hover{--transform-translate-y:-1.75rem}.hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.hover\:-translate-y-9:hover{--transform-translate-y:-2.25rem}.hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.hover\:-translate-y-11:hover{--transform-translate-y:-2.75rem}.hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.hover\:-translate-y-15:hover{--transform-translate-y:-3.75rem}.hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.hover\:-translate-y-22:hover{--transform-translate-y:-5.5rem}.hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.hover\:-translate-y-25:hover{--transform-translate-y:-6.25rem}.hover\:-translate-y-26:hover{--transform-translate-y:-6.5rem}.hover\:-translate-y-28:hover{--transform-translate-y:-8rem}.hover\:-translate-y-30:hover{--transform-translate-y:-8.5rem}.hover\:-translate-y-32:hover{--transform-translate-y:-9rem}.hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.hover\:-translate-y-52:hover{--transform-translate-y:-13rem}.hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.hover\:-translate-y-60:hover{--transform-translate-y:-15rem}.hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.hover\:-translate-y-68:hover{--transform-translate-y:-17rem}.hover\:-translate-y-px:hover{--transform-translate-y:-1px}.hover\:-translate-y-0\.5:hover{--transform-translate-y:-0.125rem}.hover\:-translate-y-1\.5:hover{--transform-translate-y:-0.375rem}.hover\:-translate-y-2\.5:hover{--transform-translate-y:-0.625rem}.hover\:-translate-y-7\.5:hover{--transform-translate-y:-1.875rem}.hover\:-translate-y-full:hover{--transform-translate-y:-100%}.hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.hover\:translate-y-full:hover{--transform-translate-y:100%}.focus\:translate-x-0:focus{--transform-translate-x:0}.focus\:translate-x-1:focus{--transform-translate-x:.25rem}.focus\:translate-x-2:focus{--transform-translate-x:.5rem}.focus\:translate-x-3:focus{--transform-translate-x:.75rem}.focus\:translate-x-4:focus{--transform-translate-x:1rem}.focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.focus\:translate-x-7:focus{--transform-translate-x:1.75rem}.focus\:translate-x-8:focus{--transform-translate-x:2rem}.focus\:translate-x-9:focus{--transform-translate-x:2.25rem}.focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.focus\:translate-x-11:focus{--transform-translate-x:2.75rem}.focus\:translate-x-12:focus{--transform-translate-x:3rem}.focus\:translate-x-15:focus{--transform-translate-x:3.75rem}.focus\:translate-x-16:focus{--transform-translate-x:4rem}.focus\:translate-x-20:focus{--transform-translate-x:5rem}.focus\:translate-x-22:focus{--transform-translate-x:5.5rem}.focus\:translate-x-24:focus{--transform-translate-x:6rem}.focus\:translate-x-25:focus{--transform-translate-x:6.25rem}.focus\:translate-x-26:focus{--transform-translate-x:6.5rem}.focus\:translate-x-28:focus{--transform-translate-x:8rem}.focus\:translate-x-30:focus{--transform-translate-x:8.5rem}.focus\:translate-x-32:focus{--transform-translate-x:9rem}.focus\:translate-x-40:focus{--transform-translate-x:10rem}.focus\:translate-x-48:focus{--transform-translate-x:12rem}.focus\:translate-x-52:focus{--transform-translate-x:13rem}.focus\:translate-x-56:focus{--transform-translate-x:14rem}.focus\:translate-x-60:focus{--transform-translate-x:15rem}.focus\:translate-x-64:focus{--transform-translate-x:16rem}.focus\:translate-x-68:focus{--transform-translate-x:17rem}.focus\:translate-x-px:focus{--transform-translate-x:1px}.focus\:translate-x-0\.5:focus{--transform-translate-x:.125rem}.focus\:translate-x-1\.5:focus{--transform-translate-x:.375rem}.focus\:translate-x-2\.5:focus{--transform-translate-x:.625rem}.focus\:translate-x-7\.5:focus{--transform-translate-x:1.875rem}.focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.focus\:-translate-x-7:focus{--transform-translate-x:-1.75rem}.focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.focus\:-translate-x-9:focus{--transform-translate-x:-2.25rem}.focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.focus\:-translate-x-11:focus{--transform-translate-x:-2.75rem}.focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.focus\:-translate-x-15:focus{--transform-translate-x:-3.75rem}.focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.focus\:-translate-x-22:focus{--transform-translate-x:-5.5rem}.focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.focus\:-translate-x-25:focus{--transform-translate-x:-6.25rem}.focus\:-translate-x-26:focus{--transform-translate-x:-6.5rem}.focus\:-translate-x-28:focus{--transform-translate-x:-8rem}.focus\:-translate-x-30:focus{--transform-translate-x:-8.5rem}.focus\:-translate-x-32:focus{--transform-translate-x:-9rem}.focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.focus\:-translate-x-52:focus{--transform-translate-x:-13rem}.focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.focus\:-translate-x-60:focus{--transform-translate-x:-15rem}.focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.focus\:-translate-x-68:focus{--transform-translate-x:-17rem}.focus\:-translate-x-px:focus{--transform-translate-x:-1px}.focus\:-translate-x-0\.5:focus{--transform-translate-x:-0.125rem}.focus\:-translate-x-1\.5:focus{--transform-translate-x:-0.375rem}.focus\:-translate-x-2\.5:focus{--transform-translate-x:-0.625rem}.focus\:-translate-x-7\.5:focus{--transform-translate-x:-1.875rem}.focus\:-translate-x-full:focus{--transform-translate-x:-100%}.focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.focus\:translate-x-full:focus{--transform-translate-x:100%}.focus\:translate-y-0:focus{--transform-translate-y:0}.focus\:translate-y-1:focus{--transform-translate-y:.25rem}.focus\:translate-y-2:focus{--transform-translate-y:.5rem}.focus\:translate-y-3:focus{--transform-translate-y:.75rem}.focus\:translate-y-4:focus{--transform-translate-y:1rem}.focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.focus\:translate-y-7:focus{--transform-translate-y:1.75rem}.focus\:translate-y-8:focus{--transform-translate-y:2rem}.focus\:translate-y-9:focus{--transform-translate-y:2.25rem}.focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.focus\:translate-y-11:focus{--transform-translate-y:2.75rem}.focus\:translate-y-12:focus{--transform-translate-y:3rem}.focus\:translate-y-15:focus{--transform-translate-y:3.75rem}.focus\:translate-y-16:focus{--transform-translate-y:4rem}.focus\:translate-y-20:focus{--transform-translate-y:5rem}.focus\:translate-y-22:focus{--transform-translate-y:5.5rem}.focus\:translate-y-24:focus{--transform-translate-y:6rem}.focus\:translate-y-25:focus{--transform-translate-y:6.25rem}.focus\:translate-y-26:focus{--transform-translate-y:6.5rem}.focus\:translate-y-28:focus{--transform-translate-y:8rem}.focus\:translate-y-30:focus{--transform-translate-y:8.5rem}.focus\:translate-y-32:focus{--transform-translate-y:9rem}.focus\:translate-y-40:focus{--transform-translate-y:10rem}.focus\:translate-y-48:focus{--transform-translate-y:12rem}.focus\:translate-y-52:focus{--transform-translate-y:13rem}.focus\:translate-y-56:focus{--transform-translate-y:14rem}.focus\:translate-y-60:focus{--transform-translate-y:15rem}.focus\:translate-y-64:focus{--transform-translate-y:16rem}.focus\:translate-y-68:focus{--transform-translate-y:17rem}.focus\:translate-y-px:focus{--transform-translate-y:1px}.focus\:translate-y-0\.5:focus{--transform-translate-y:.125rem}.focus\:translate-y-1\.5:focus{--transform-translate-y:.375rem}.focus\:translate-y-2\.5:focus{--transform-translate-y:.625rem}.focus\:translate-y-7\.5:focus{--transform-translate-y:1.875rem}.focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.focus\:-translate-y-7:focus{--transform-translate-y:-1.75rem}.focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.focus\:-translate-y-9:focus{--transform-translate-y:-2.25rem}.focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.focus\:-translate-y-11:focus{--transform-translate-y:-2.75rem}.focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.focus\:-translate-y-15:focus{--transform-translate-y:-3.75rem}.focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.focus\:-translate-y-22:focus{--transform-translate-y:-5.5rem}.focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.focus\:-translate-y-25:focus{--transform-translate-y:-6.25rem}.focus\:-translate-y-26:focus{--transform-translate-y:-6.5rem}.focus\:-translate-y-28:focus{--transform-translate-y:-8rem}.focus\:-translate-y-30:focus{--transform-translate-y:-8.5rem}.focus\:-translate-y-32:focus{--transform-translate-y:-9rem}.focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.focus\:-translate-y-52:focus{--transform-translate-y:-13rem}.focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.focus\:-translate-y-60:focus{--transform-translate-y:-15rem}.focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.focus\:-translate-y-68:focus{--transform-translate-y:-17rem}.focus\:-translate-y-px:focus{--transform-translate-y:-1px}.focus\:-translate-y-0\.5:focus{--transform-translate-y:-0.125rem}.focus\:-translate-y-1\.5:focus{--transform-translate-y:-0.375rem}.focus\:-translate-y-2\.5:focus{--transform-translate-y:-0.625rem}.focus\:-translate-y-7\.5:focus{--transform-translate-y:-1.875rem}.focus\:-translate-y-full:focus{--transform-translate-y:-100%}.focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.focus\:translate-y-full:focus{--transform-translate-y:100%}.skew-x-0{--transform-skew-x:0}.skew-x-1{--transform-skew-x:1deg}.skew-x-2{--transform-skew-x:2deg}.skew-x-3{--transform-skew-x:3deg}.skew-x-6{--transform-skew-x:6deg}.skew-x-12{--transform-skew-x:12deg}.-skew-x-12{--transform-skew-x:-12deg}.-skew-x-6{--transform-skew-x:-6deg}.-skew-x-3{--transform-skew-x:-3deg}.-skew-x-2{--transform-skew-x:-2deg}.-skew-x-1{--transform-skew-x:-1deg}.skew-y-0{--transform-skew-y:0}.skew-y-1{--transform-skew-y:1deg}.skew-y-2{--transform-skew-y:2deg}.skew-y-3{--transform-skew-y:3deg}.skew-y-6{--transform-skew-y:6deg}.skew-y-12{--transform-skew-y:12deg}.-skew-y-12{--transform-skew-y:-12deg}.-skew-y-6{--transform-skew-y:-6deg}.-skew-y-3{--transform-skew-y:-3deg}.-skew-y-2{--transform-skew-y:-2deg}.-skew-y-1{--transform-skew-y:-1deg}.hover\:skew-x-0:hover{--transform-skew-x:0}.hover\:skew-x-1:hover{--transform-skew-x:1deg}.hover\:skew-x-2:hover{--transform-skew-x:2deg}.hover\:skew-x-3:hover{--transform-skew-x:3deg}.hover\:skew-x-6:hover{--transform-skew-x:6deg}.hover\:skew-x-12:hover{--transform-skew-x:12deg}.hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.hover\:skew-y-0:hover{--transform-skew-y:0}.hover\:skew-y-1:hover{--transform-skew-y:1deg}.hover\:skew-y-2:hover{--transform-skew-y:2deg}.hover\:skew-y-3:hover{--transform-skew-y:3deg}.hover\:skew-y-6:hover{--transform-skew-y:6deg}.hover\:skew-y-12:hover{--transform-skew-y:12deg}.hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.focus\:skew-x-0:focus{--transform-skew-x:0}.focus\:skew-x-1:focus{--transform-skew-x:1deg}.focus\:skew-x-2:focus{--transform-skew-x:2deg}.focus\:skew-x-3:focus{--transform-skew-x:3deg}.focus\:skew-x-6:focus{--transform-skew-x:6deg}.focus\:skew-x-12:focus{--transform-skew-x:12deg}.focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.focus\:skew-y-0:focus{--transform-skew-y:0}.focus\:skew-y-1:focus{--transform-skew-y:1deg}.focus\:skew-y-2:focus{--transform-skew-y:2deg}.focus\:skew-y-3:focus{--transform-skew-y:3deg}.focus\:skew-y-6:focus{--transform-skew-y:6deg}.focus\:skew-y-12:focus{--transform-skew-y:12deg}.focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.transition-none{transition-property:none}.transition-all{transition-property:all}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.transition-colors{transition-property:background-color,border-color,color,fill,stroke}.transition-opacity{transition-property:opacity}.transition-shadow{transition-property:box-shadow}.transition-transform{transition-property:transform}.ease-linear{transition-timing-function:linear}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.duration-1000{transition-duration:1s}.delay-75{transition-delay:75ms}.delay-100{transition-delay:.1s}.delay-150{transition-delay:.15s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-500{transition-delay:.5s}.delay-700{transition-delay:.7s}.delay-1000{transition-delay:1s}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}@keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-none{-webkit-animation:none;animation:none}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.animate-ping{-webkit-animation:ping 1s cubic-bezier(0,0,.2,1) infinite;animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.animate-pulse{-webkit-animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-bounce{-webkit-animation:bounce 1s infinite;animation:bounce 1s infinite}.transform-none{transform:none}.transform-center{transform-origin:center}.transform-top{transform-origin:top}.transform-top-right{transform-origin:top right}.transform-right{transform-origin:right}.transform-bottom-right{transform-origin:bottom right}.transform-bottom{transform-origin:bottom}.transform-bottom-left{transform-origin:bottom left}.transform-left{transform-origin:left}.transform-top-left{transform-origin:top left}.translate-x-0{transform:translateX(0)}.translate-y-0{transform:translateY(0)}.translate-x-1{transform:translateX(.25rem)}.translate-y-1{transform:translateY(.25rem)}.translate-x-2{transform:translateX(.5rem)}.translate-y-2{transform:translateY(.5rem)}.translate-x-3{transform:translateX(.75rem)}.translate-y-3{transform:translateY(.75rem)}.translate-x-4{transform:translateX(1rem)}.translate-y-4{transform:translateY(1rem)}.translate-x-5{transform:translateX(1.25rem)}.translate-y-5{transform:translateY(1.25rem)}.translate-x-6{transform:translateX(1.5rem)}.translate-y-6{transform:translateY(1.5rem)}.translate-x-7{transform:translateX(1.75rem)}.translate-y-7{transform:translateY(1.75rem)}.translate-x-8{transform:translateX(2rem)}.translate-y-8{transform:translateY(2rem)}.translate-x-9{transform:translateX(2.25rem)}.translate-y-9{transform:translateY(2.25rem)}.translate-x-10{transform:translateX(2.5rem)}.translate-y-10{transform:translateY(2.5rem)}.translate-x-11{transform:translateX(2.75rem)}.translate-y-11{transform:translateY(2.75rem)}.translate-x-12{transform:translateX(3rem)}.translate-y-12{transform:translateY(3rem)}.translate-x-15{transform:translateX(3.75rem)}.translate-y-15{transform:translateY(3.75rem)}.translate-x-16{transform:translateX(4rem)}.translate-y-16{transform:translateY(4rem)}.translate-x-20{transform:translateX(5rem)}.translate-y-20{transform:translateY(5rem)}.translate-x-22{transform:translateX(5.5rem)}.translate-y-22{transform:translateY(5.5rem)}.translate-x-24{transform:translateX(6rem)}.translate-y-24{transform:translateY(6rem)}.translate-x-25{transform:translateX(6.25rem)}.translate-y-25{transform:translateY(6.25rem)}.translate-x-26{transform:translateX(6.5rem)}.translate-y-26{transform:translateY(6.5rem)}.translate-x-28{transform:translateX(8rem)}.translate-y-28{transform:translateY(8rem)}.translate-x-30{transform:translateX(8.5rem)}.translate-y-30{transform:translateY(8.5rem)}.translate-x-32{transform:translateX(9rem)}.translate-y-32{transform:translateY(9rem)}.translate-x-40{transform:translateX(10rem)}.translate-y-40{transform:translateY(10rem)}.translate-x-48{transform:translateX(12rem)}.translate-y-48{transform:translateY(12rem)}.translate-x-52{transform:translateX(13rem)}.translate-y-52{transform:translateY(13rem)}.translate-x-56{transform:translateX(14rem)}.translate-y-56{transform:translateY(14rem)}.translate-x-60{transform:translateX(15rem)}.translate-y-60{transform:translateY(15rem)}.translate-x-64{transform:translateX(16rem)}.translate-y-64{transform:translateY(16rem)}.translate-x-68{transform:translateX(17rem)}.translate-y-68{transform:translateY(17rem)}.translate-x-px{transform:translateX(1px)}.translate-y-px{transform:translateY(1px)}.translate-x-0\.5{transform:translateX(.125rem)}.translate-y-0\.5{transform:translateY(.125rem)}.translate-x-1\.5{transform:translateX(.375rem)}.translate-y-1\.5{transform:translateY(.375rem)}.translate-x-2\.5{transform:translateX(.625rem)}.translate-y-2\.5{transform:translateY(.625rem)}.translate-x-7\.5{transform:translateX(1.875rem)}.translate-y-7\.5{transform:translateY(1.875rem)}.-translate-x-1{transform:translateX(-.25rem)}.-translate-y-1{transform:translateY(-.25rem)}.-translate-x-2{transform:translateX(-.5rem)}.-translate-y-2{transform:translateY(-.5rem)}.-translate-x-3{transform:translateX(-.75rem)}.-translate-y-3{transform:translateY(-.75rem)}.-translate-x-4{transform:translateX(-1rem)}.-translate-y-4{transform:translateY(-1rem)}.-translate-x-5{transform:translateX(-1.25rem)}.-translate-y-5{transform:translateY(-1.25rem)}.-translate-x-6{transform:translateX(-1.5rem)}.-translate-y-6{transform:translateY(-1.5rem)}.-translate-x-7{transform:translateX(-1.75rem)}.-translate-y-7{transform:translateY(-1.75rem)}.-translate-x-8{transform:translateX(-2rem)}.-translate-y-8{transform:translateY(-2rem)}.-translate-x-9{transform:translateX(-2.25rem)}.-translate-y-9{transform:translateY(-2.25rem)}.-translate-x-10{transform:translateX(-2.5rem)}.-translate-y-10{transform:translateY(-2.5rem)}.-translate-x-11{transform:translateX(-2.75rem)}.-translate-y-11{transform:translateY(-2.75rem)}.-translate-x-12{transform:translateX(-3rem)}.-translate-y-12{transform:translateY(-3rem)}.-translate-x-15{transform:translateX(-3.75rem)}.-translate-y-15{transform:translateY(-3.75rem)}.-translate-x-16{transform:translateX(-4rem)}.-translate-y-16{transform:translateY(-4rem)}.-translate-x-20{transform:translateX(-5rem)}.-translate-y-20{transform:translateY(-5rem)}.-translate-x-22{transform:translateX(-5.5rem)}.-translate-y-22{transform:translateY(-5.5rem)}.-translate-x-24{transform:translateX(-6rem)}.-translate-y-24{transform:translateY(-6rem)}.-translate-x-25{transform:translateX(-6.25rem)}.-translate-y-25{transform:translateY(-6.25rem)}.-translate-x-26{transform:translateX(-6.5rem)}.-translate-y-26{transform:translateY(-6.5rem)}.-translate-x-28{transform:translateX(-8rem)}.-translate-y-28{transform:translateY(-8rem)}.-translate-x-30{transform:translateX(-8.5rem)}.-translate-y-30{transform:translateY(-8.5rem)}.-translate-x-32{transform:translateX(-9rem)}.-translate-y-32{transform:translateY(-9rem)}.-translate-x-40{transform:translateX(-10rem)}.-translate-y-40{transform:translateY(-10rem)}.-translate-x-48{transform:translateX(-12rem)}.-translate-y-48{transform:translateY(-12rem)}.-translate-x-52{transform:translateX(-13rem)}.-translate-y-52{transform:translateY(-13rem)}.-translate-x-56{transform:translateX(-14rem)}.-translate-y-56{transform:translateY(-14rem)}.-translate-x-60{transform:translateX(-15rem)}.-translate-y-60{transform:translateY(-15rem)}.-translate-x-64{transform:translateX(-16rem)}.-translate-y-64{transform:translateY(-16rem)}.-translate-x-68{transform:translateX(-17rem)}.-translate-y-68{transform:translateY(-17rem)}.-translate-x-px{transform:translateX(-1px)}.-translate-y-px{transform:translateY(-1px)}.-translate-x-0\.5{transform:translateX(-.125rem)}.-translate-y-0\.5{transform:translateY(-.125rem)}.-translate-x-1\.5{transform:translateX(-.375rem)}.-translate-y-1\.5{transform:translateY(-.375rem)}.-translate-x-2\.5{transform:translateX(-.625rem)}.-translate-y-2\.5{transform:translateY(-.625rem)}.-translate-x-7\.5{transform:translateX(-1.875rem)}.-translate-y-7\.5{transform:translateY(-1.875rem)}.-translate-x-full{transform:translateX(-100%)}.-translate-y-full{transform:translateY(-100%)}.-translate-x-1\/2{transform:translateX(-50%)}.-translate-y-1\/2{transform:translateY(-50%)}.translate-x-1\/2{transform:translateX(50%)}.translate-y-1\/2{transform:translateY(50%)}.translate-x-full{transform:translateX(100%)}.translate-y-full{transform:translateY(100%)}.hover\:translate-x-0:hover{transform:translateX(0)}.hover\:translate-y-0:hover{transform:translateY(0)}.hover\:translate-x-1:hover{transform:translateX(.25rem)}.hover\:translate-y-1:hover{transform:translateY(.25rem)}.hover\:translate-x-2:hover{transform:translateX(.5rem)}.hover\:translate-y-2:hover{transform:translateY(.5rem)}.hover\:translate-x-3:hover{transform:translateX(.75rem)}.hover\:translate-y-3:hover{transform:translateY(.75rem)}.hover\:translate-x-4:hover{transform:translateX(1rem)}.hover\:translate-y-4:hover{transform:translateY(1rem)}.hover\:translate-x-5:hover{transform:translateX(1.25rem)}.hover\:translate-y-5:hover{transform:translateY(1.25rem)}.hover\:translate-x-6:hover{transform:translateX(1.5rem)}.hover\:translate-y-6:hover{transform:translateY(1.5rem)}.hover\:translate-x-7:hover{transform:translateX(1.75rem)}.hover\:translate-y-7:hover{transform:translateY(1.75rem)}.hover\:translate-x-8:hover{transform:translateX(2rem)}.hover\:translate-y-8:hover{transform:translateY(2rem)}.hover\:translate-x-9:hover{transform:translateX(2.25rem)}.hover\:translate-y-9:hover{transform:translateY(2.25rem)}.hover\:translate-x-10:hover{transform:translateX(2.5rem)}.hover\:translate-y-10:hover{transform:translateY(2.5rem)}.hover\:translate-x-11:hover{transform:translateX(2.75rem)}.hover\:translate-y-11:hover{transform:translateY(2.75rem)}.hover\:translate-x-12:hover{transform:translateX(3rem)}.hover\:translate-y-12:hover{transform:translateY(3rem)}.hover\:translate-x-15:hover{transform:translateX(3.75rem)}.hover\:translate-y-15:hover{transform:translateY(3.75rem)}.hover\:translate-x-16:hover{transform:translateX(4rem)}.hover\:translate-y-16:hover{transform:translateY(4rem)}.hover\:translate-x-20:hover{transform:translateX(5rem)}.hover\:translate-y-20:hover{transform:translateY(5rem)}.hover\:translate-x-22:hover{transform:translateX(5.5rem)}.hover\:translate-y-22:hover{transform:translateY(5.5rem)}.hover\:translate-x-24:hover{transform:translateX(6rem)}.hover\:translate-y-24:hover{transform:translateY(6rem)}.hover\:translate-x-25:hover{transform:translateX(6.25rem)}.hover\:translate-y-25:hover{transform:translateY(6.25rem)}.hover\:translate-x-26:hover{transform:translateX(6.5rem)}.hover\:translate-y-26:hover{transform:translateY(6.5rem)}.hover\:translate-x-28:hover{transform:translateX(8rem)}.hover\:translate-y-28:hover{transform:translateY(8rem)}.hover\:translate-x-30:hover{transform:translateX(8.5rem)}.hover\:translate-y-30:hover{transform:translateY(8.5rem)}.hover\:translate-x-32:hover{transform:translateX(9rem)}.hover\:translate-y-32:hover{transform:translateY(9rem)}.hover\:translate-x-40:hover{transform:translateX(10rem)}.hover\:translate-y-40:hover{transform:translateY(10rem)}.hover\:translate-x-48:hover{transform:translateX(12rem)}.hover\:translate-y-48:hover{transform:translateY(12rem)}.hover\:translate-x-52:hover{transform:translateX(13rem)}.hover\:translate-y-52:hover{transform:translateY(13rem)}.hover\:translate-x-56:hover{transform:translateX(14rem)}.hover\:translate-y-56:hover{transform:translateY(14rem)}.hover\:translate-x-60:hover{transform:translateX(15rem)}.hover\:translate-y-60:hover{transform:translateY(15rem)}.hover\:translate-x-64:hover{transform:translateX(16rem)}.hover\:translate-y-64:hover{transform:translateY(16rem)}.hover\:translate-x-68:hover{transform:translateX(17rem)}.hover\:translate-y-68:hover{transform:translateY(17rem)}.hover\:translate-x-px:hover{transform:translateX(1px)}.hover\:translate-y-px:hover{transform:translateY(1px)}.hover\:translate-x-0\.5:hover{transform:translateX(.125rem)}.hover\:translate-y-0\.5:hover{transform:translateY(.125rem)}.hover\:translate-x-1\.5:hover{transform:translateX(.375rem)}.hover\:translate-y-1\.5:hover{transform:translateY(.375rem)}.hover\:translate-x-2\.5:hover{transform:translateX(.625rem)}.hover\:translate-y-2\.5:hover{transform:translateY(.625rem)}.hover\:translate-x-7\.5:hover{transform:translateX(1.875rem)}.hover\:translate-y-7\.5:hover{transform:translateY(1.875rem)}.hover\:-translate-x-1:hover{transform:translateX(-.25rem)}.hover\:-translate-y-1:hover{transform:translateY(-.25rem)}.hover\:-translate-x-2:hover{transform:translateX(-.5rem)}.hover\:-translate-y-2:hover{transform:translateY(-.5rem)}.hover\:-translate-x-3:hover{transform:translateX(-.75rem)}.hover\:-translate-y-3:hover{transform:translateY(-.75rem)}.hover\:-translate-x-4:hover{transform:translateX(-1rem)}.hover\:-translate-y-4:hover{transform:translateY(-1rem)}.hover\:-translate-x-5:hover{transform:translateX(-1.25rem)}.hover\:-translate-y-5:hover{transform:translateY(-1.25rem)}.hover\:-translate-x-6:hover{transform:translateX(-1.5rem)}.hover\:-translate-y-6:hover{transform:translateY(-1.5rem)}.hover\:-translate-x-7:hover{transform:translateX(-1.75rem)}.hover\:-translate-y-7:hover{transform:translateY(-1.75rem)}.hover\:-translate-x-8:hover{transform:translateX(-2rem)}.hover\:-translate-y-8:hover{transform:translateY(-2rem)}.hover\:-translate-x-9:hover{transform:translateX(-2.25rem)}.hover\:-translate-y-9:hover{transform:translateY(-2.25rem)}.hover\:-translate-x-10:hover{transform:translateX(-2.5rem)}.hover\:-translate-y-10:hover{transform:translateY(-2.5rem)}.hover\:-translate-x-11:hover{transform:translateX(-2.75rem)}.hover\:-translate-y-11:hover{transform:translateY(-2.75rem)}.hover\:-translate-x-12:hover{transform:translateX(-3rem)}.hover\:-translate-y-12:hover{transform:translateY(-3rem)}.hover\:-translate-x-15:hover{transform:translateX(-3.75rem)}.hover\:-translate-y-15:hover{transform:translateY(-3.75rem)}.hover\:-translate-x-16:hover{transform:translateX(-4rem)}.hover\:-translate-y-16:hover{transform:translateY(-4rem)}.hover\:-translate-x-20:hover{transform:translateX(-5rem)}.hover\:-translate-y-20:hover{transform:translateY(-5rem)}.hover\:-translate-x-22:hover{transform:translateX(-5.5rem)}.hover\:-translate-y-22:hover{transform:translateY(-5.5rem)}.hover\:-translate-x-24:hover{transform:translateX(-6rem)}.hover\:-translate-y-24:hover{transform:translateY(-6rem)}.hover\:-translate-x-25:hover{transform:translateX(-6.25rem)}.hover\:-translate-y-25:hover{transform:translateY(-6.25rem)}.hover\:-translate-x-26:hover{transform:translateX(-6.5rem)}.hover\:-translate-y-26:hover{transform:translateY(-6.5rem)}.hover\:-translate-x-28:hover{transform:translateX(-8rem)}.hover\:-translate-y-28:hover{transform:translateY(-8rem)}.hover\:-translate-x-30:hover{transform:translateX(-8.5rem)}.hover\:-translate-y-30:hover{transform:translateY(-8.5rem)}.hover\:-translate-x-32:hover{transform:translateX(-9rem)}.hover\:-translate-y-32:hover{transform:translateY(-9rem)}.hover\:-translate-x-40:hover{transform:translateX(-10rem)}.hover\:-translate-y-40:hover{transform:translateY(-10rem)}.hover\:-translate-x-48:hover{transform:translateX(-12rem)}.hover\:-translate-y-48:hover{transform:translateY(-12rem)}.hover\:-translate-x-52:hover{transform:translateX(-13rem)}.hover\:-translate-y-52:hover{transform:translateY(-13rem)}.hover\:-translate-x-56:hover{transform:translateX(-14rem)}.hover\:-translate-y-56:hover{transform:translateY(-14rem)}.hover\:-translate-x-60:hover{transform:translateX(-15rem)}.hover\:-translate-y-60:hover{transform:translateY(-15rem)}.hover\:-translate-x-64:hover{transform:translateX(-16rem)}.hover\:-translate-y-64:hover{transform:translateY(-16rem)}.hover\:-translate-x-68:hover{transform:translateX(-17rem)}.hover\:-translate-y-68:hover{transform:translateY(-17rem)}.hover\:-translate-x-px:hover{transform:translateX(-1px)}.hover\:-translate-y-px:hover{transform:translateY(-1px)}.hover\:-translate-x-0\.5:hover{transform:translateX(-.125rem)}.hover\:-translate-y-0\.5:hover{transform:translateY(-.125rem)}.hover\:-translate-x-1\.5:hover{transform:translateX(-.375rem)}.hover\:-translate-y-1\.5:hover{transform:translateY(-.375rem)}.hover\:-translate-x-2\.5:hover{transform:translateX(-.625rem)}.hover\:-translate-y-2\.5:hover{transform:translateY(-.625rem)}.hover\:-translate-x-7\.5:hover{transform:translateX(-1.875rem)}.hover\:-translate-y-7\.5:hover{transform:translateY(-1.875rem)}.hover\:-translate-x-full:hover{transform:translateX(-100%)}.hover\:-translate-y-full:hover{transform:translateY(-100%)}.hover\:-translate-x-1\/2:hover{transform:translateX(-50%)}.hover\:-translate-y-1\/2:hover{transform:translateY(-50%)}.hover\:translate-x-1\/2:hover{transform:translateX(50%)}.hover\:translate-y-1\/2:hover{transform:translateY(50%)}.hover\:translate-x-full:hover{transform:translateX(100%)}.hover\:translate-y-full:hover{transform:translateY(100%)}.focus\:translate-x-0:focus{transform:translateX(0)}.focus\:translate-y-0:focus{transform:translateY(0)}.focus\:translate-x-1:focus{transform:translateX(.25rem)}.focus\:translate-y-1:focus{transform:translateY(.25rem)}.focus\:translate-x-2:focus{transform:translateX(.5rem)}.focus\:translate-y-2:focus{transform:translateY(.5rem)}.focus\:translate-x-3:focus{transform:translateX(.75rem)}.focus\:translate-y-3:focus{transform:translateY(.75rem)}.focus\:translate-x-4:focus{transform:translateX(1rem)}.focus\:translate-y-4:focus{transform:translateY(1rem)}.focus\:translate-x-5:focus{transform:translateX(1.25rem)}.focus\:translate-y-5:focus{transform:translateY(1.25rem)}.focus\:translate-x-6:focus{transform:translateX(1.5rem)}.focus\:translate-y-6:focus{transform:translateY(1.5rem)}.focus\:translate-x-7:focus{transform:translateX(1.75rem)}.focus\:translate-y-7:focus{transform:translateY(1.75rem)}.focus\:translate-x-8:focus{transform:translateX(2rem)}.focus\:translate-y-8:focus{transform:translateY(2rem)}.focus\:translate-x-9:focus{transform:translateX(2.25rem)}.focus\:translate-y-9:focus{transform:translateY(2.25rem)}.focus\:translate-x-10:focus{transform:translateX(2.5rem)}.focus\:translate-y-10:focus{transform:translateY(2.5rem)}.focus\:translate-x-11:focus{transform:translateX(2.75rem)}.focus\:translate-y-11:focus{transform:translateY(2.75rem)}.focus\:translate-x-12:focus{transform:translateX(3rem)}.focus\:translate-y-12:focus{transform:translateY(3rem)}.focus\:translate-x-15:focus{transform:translateX(3.75rem)}.focus\:translate-y-15:focus{transform:translateY(3.75rem)}.focus\:translate-x-16:focus{transform:translateX(4rem)}.focus\:translate-y-16:focus{transform:translateY(4rem)}.focus\:translate-x-20:focus{transform:translateX(5rem)}.focus\:translate-y-20:focus{transform:translateY(5rem)}.focus\:translate-x-22:focus{transform:translateX(5.5rem)}.focus\:translate-y-22:focus{transform:translateY(5.5rem)}.focus\:translate-x-24:focus{transform:translateX(6rem)}.focus\:translate-y-24:focus{transform:translateY(6rem)}.focus\:translate-x-25:focus{transform:translateX(6.25rem)}.focus\:translate-y-25:focus{transform:translateY(6.25rem)}.focus\:translate-x-26:focus{transform:translateX(6.5rem)}.focus\:translate-y-26:focus{transform:translateY(6.5rem)}.focus\:translate-x-28:focus{transform:translateX(8rem)}.focus\:translate-y-28:focus{transform:translateY(8rem)}.focus\:translate-x-30:focus{transform:translateX(8.5rem)}.focus\:translate-y-30:focus{transform:translateY(8.5rem)}.focus\:translate-x-32:focus{transform:translateX(9rem)}.focus\:translate-y-32:focus{transform:translateY(9rem)}.focus\:translate-x-40:focus{transform:translateX(10rem)}.focus\:translate-y-40:focus{transform:translateY(10rem)}.focus\:translate-x-48:focus{transform:translateX(12rem)}.focus\:translate-y-48:focus{transform:translateY(12rem)}.focus\:translate-x-52:focus{transform:translateX(13rem)}.focus\:translate-y-52:focus{transform:translateY(13rem)}.focus\:translate-x-56:focus{transform:translateX(14rem)}.focus\:translate-y-56:focus{transform:translateY(14rem)}.focus\:translate-x-60:focus{transform:translateX(15rem)}.focus\:translate-y-60:focus{transform:translateY(15rem)}.focus\:translate-x-64:focus{transform:translateX(16rem)}.focus\:translate-y-64:focus{transform:translateY(16rem)}.focus\:translate-x-68:focus{transform:translateX(17rem)}.focus\:translate-y-68:focus{transform:translateY(17rem)}.focus\:translate-x-px:focus{transform:translateX(1px)}.focus\:translate-y-px:focus{transform:translateY(1px)}.focus\:translate-x-0\.5:focus{transform:translateX(.125rem)}.focus\:translate-y-0\.5:focus{transform:translateY(.125rem)}.focus\:translate-x-1\.5:focus{transform:translateX(.375rem)}.focus\:translate-y-1\.5:focus{transform:translateY(.375rem)}.focus\:translate-x-2\.5:focus{transform:translateX(.625rem)}.focus\:translate-y-2\.5:focus{transform:translateY(.625rem)}.focus\:translate-x-7\.5:focus{transform:translateX(1.875rem)}.focus\:translate-y-7\.5:focus{transform:translateY(1.875rem)}.focus\:-translate-x-1:focus{transform:translateX(-.25rem)}.focus\:-translate-y-1:focus{transform:translateY(-.25rem)}.focus\:-translate-x-2:focus{transform:translateX(-.5rem)}.focus\:-translate-y-2:focus{transform:translateY(-.5rem)}.focus\:-translate-x-3:focus{transform:translateX(-.75rem)}.focus\:-translate-y-3:focus{transform:translateY(-.75rem)}.focus\:-translate-x-4:focus{transform:translateX(-1rem)}.focus\:-translate-y-4:focus{transform:translateY(-1rem)}.focus\:-translate-x-5:focus{transform:translateX(-1.25rem)}.focus\:-translate-y-5:focus{transform:translateY(-1.25rem)}.focus\:-translate-x-6:focus{transform:translateX(-1.5rem)}.focus\:-translate-y-6:focus{transform:translateY(-1.5rem)}.focus\:-translate-x-7:focus{transform:translateX(-1.75rem)}.focus\:-translate-y-7:focus{transform:translateY(-1.75rem)}.focus\:-translate-x-8:focus{transform:translateX(-2rem)}.focus\:-translate-y-8:focus{transform:translateY(-2rem)}.focus\:-translate-x-9:focus{transform:translateX(-2.25rem)}.focus\:-translate-y-9:focus{transform:translateY(-2.25rem)}.focus\:-translate-x-10:focus{transform:translateX(-2.5rem)}.focus\:-translate-y-10:focus{transform:translateY(-2.5rem)}.focus\:-translate-x-11:focus{transform:translateX(-2.75rem)}.focus\:-translate-y-11:focus{transform:translateY(-2.75rem)}.focus\:-translate-x-12:focus{transform:translateX(-3rem)}.focus\:-translate-y-12:focus{transform:translateY(-3rem)}.focus\:-translate-x-15:focus{transform:translateX(-3.75rem)}.focus\:-translate-y-15:focus{transform:translateY(-3.75rem)}.focus\:-translate-x-16:focus{transform:translateX(-4rem)}.focus\:-translate-y-16:focus{transform:translateY(-4rem)}.focus\:-translate-x-20:focus{transform:translateX(-5rem)}.focus\:-translate-y-20:focus{transform:translateY(-5rem)}.focus\:-translate-x-22:focus{transform:translateX(-5.5rem)}.focus\:-translate-y-22:focus{transform:translateY(-5.5rem)}.focus\:-translate-x-24:focus{transform:translateX(-6rem)}.focus\:-translate-y-24:focus{transform:translateY(-6rem)}.focus\:-translate-x-25:focus{transform:translateX(-6.25rem)}.focus\:-translate-y-25:focus{transform:translateY(-6.25rem)}.focus\:-translate-x-26:focus{transform:translateX(-6.5rem)}.focus\:-translate-y-26:focus{transform:translateY(-6.5rem)}.focus\:-translate-x-28:focus{transform:translateX(-8rem)}.focus\:-translate-y-28:focus{transform:translateY(-8rem)}.focus\:-translate-x-30:focus{transform:translateX(-8.5rem)}.focus\:-translate-y-30:focus{transform:translateY(-8.5rem)}.focus\:-translate-x-32:focus{transform:translateX(-9rem)}.focus\:-translate-y-32:focus{transform:translateY(-9rem)}.focus\:-translate-x-40:focus{transform:translateX(-10rem)}.focus\:-translate-y-40:focus{transform:translateY(-10rem)}.focus\:-translate-x-48:focus{transform:translateX(-12rem)}.focus\:-translate-y-48:focus{transform:translateY(-12rem)}.focus\:-translate-x-52:focus{transform:translateX(-13rem)}.focus\:-translate-y-52:focus{transform:translateY(-13rem)}.focus\:-translate-x-56:focus{transform:translateX(-14rem)}.focus\:-translate-y-56:focus{transform:translateY(-14rem)}.focus\:-translate-x-60:focus{transform:translateX(-15rem)}.focus\:-translate-y-60:focus{transform:translateY(-15rem)}.focus\:-translate-x-64:focus{transform:translateX(-16rem)}.focus\:-translate-y-64:focus{transform:translateY(-16rem)}.focus\:-translate-x-68:focus{transform:translateX(-17rem)}.focus\:-translate-y-68:focus{transform:translateY(-17rem)}.focus\:-translate-x-px:focus{transform:translateX(-1px)}.focus\:-translate-y-px:focus{transform:translateY(-1px)}.focus\:-translate-x-0\.5:focus{transform:translateX(-.125rem)}.focus\:-translate-y-0\.5:focus{transform:translateY(-.125rem)}.focus\:-translate-x-1\.5:focus{transform:translateX(-.375rem)}.focus\:-translate-y-1\.5:focus{transform:translateY(-.375rem)}.focus\:-translate-x-2\.5:focus{transform:translateX(-.625rem)}.focus\:-translate-y-2\.5:focus{transform:translateY(-.625rem)}.focus\:-translate-x-7\.5:focus{transform:translateX(-1.875rem)}.focus\:-translate-y-7\.5:focus{transform:translateY(-1.875rem)}.focus\:-translate-x-full:focus{transform:translateX(-100%)}.focus\:-translate-y-full:focus{transform:translateY(-100%)}.focus\:-translate-x-1\/2:focus{transform:translateX(-50%)}.focus\:-translate-y-1\/2:focus{transform:translateY(-50%)}.focus\:translate-x-1\/2:focus{transform:translateX(50%)}.focus\:translate-y-1\/2:focus{transform:translateY(50%)}.focus\:translate-x-full:focus{transform:translateX(100%)}.focus\:translate-y-full:focus{transform:translateY(100%)}.scale-0{transform:scale(0)}.scale-x-0{transform:scaleX(0)}.scale-y-0{transform:scaleY(0)}.scale-50{transform:scale(.5)}.scale-x-50{transform:scaleX(.5)}.scale-y-50{transform:scaleY(.5)}.scale-75{transform:scale(.75)}.scale-x-75{transform:scaleX(.75)}.scale-y-75{transform:scaleY(.75)}.scale-90{transform:scale(.9)}.scale-x-90{transform:scaleX(.9)}.scale-y-90{transform:scaleY(.9)}.scale-95{transform:scale(.95)}.scale-x-95{transform:scaleX(.95)}.scale-y-95{transform:scaleY(.95)}.scale-100{transform:scale(1)}.scale-x-100{transform:scaleX(1)}.scale-y-100{transform:scaleY(1)}.scale-105{transform:scale(1.05)}.scale-x-105{transform:scaleX(1.05)}.scale-y-105{transform:scaleY(1.05)}.scale-110{transform:scale(1.1)}.scale-x-110{transform:scaleX(1.1)}.scale-y-110{transform:scaleY(1.1)}.scale-125{transform:scale(1.25)}.scale-x-125{transform:scaleX(1.25)}.scale-y-125{transform:scaleY(1.25)}.scale-150{transform:scale(1.5)}.scale-x-150{transform:scaleX(1.5)}.scale-y-150{transform:scaleY(1.5)}.hover\:scale-0:hover{transform:scale(0)}.hover\:scale-x-0:hover{transform:scaleX(0)}.hover\:scale-y-0:hover{transform:scaleY(0)}.hover\:scale-50:hover{transform:scale(.5)}.hover\:scale-x-50:hover{transform:scaleX(.5)}.hover\:scale-y-50:hover{transform:scaleY(.5)}.hover\:scale-75:hover{transform:scale(.75)}.hover\:scale-x-75:hover{transform:scaleX(.75)}.hover\:scale-y-75:hover{transform:scaleY(.75)}.hover\:scale-90:hover{transform:scale(.9)}.hover\:scale-x-90:hover{transform:scaleX(.9)}.hover\:scale-y-90:hover{transform:scaleY(.9)}.hover\:scale-95:hover{transform:scale(.95)}.hover\:scale-x-95:hover{transform:scaleX(.95)}.hover\:scale-y-95:hover{transform:scaleY(.95)}.hover\:scale-100:hover{transform:scale(1)}.hover\:scale-x-100:hover{transform:scaleX(1)}.hover\:scale-y-100:hover{transform:scaleY(1)}.hover\:scale-105:hover{transform:scale(1.05)}.hover\:scale-x-105:hover{transform:scaleX(1.05)}.hover\:scale-y-105:hover{transform:scaleY(1.05)}.hover\:scale-110:hover{transform:scale(1.1)}.hover\:scale-x-110:hover{transform:scaleX(1.1)}.hover\:scale-y-110:hover{transform:scaleY(1.1)}.hover\:scale-125:hover{transform:scale(1.25)}.hover\:scale-x-125:hover{transform:scaleX(1.25)}.hover\:scale-y-125:hover{transform:scaleY(1.25)}.hover\:scale-150:hover{transform:scale(1.5)}.hover\:scale-x-150:hover{transform:scaleX(1.5)}.hover\:scale-y-150:hover{transform:scaleY(1.5)}.focus\:scale-0:focus{transform:scale(0)}.focus\:scale-x-0:focus{transform:scaleX(0)}.focus\:scale-y-0:focus{transform:scaleY(0)}.focus\:scale-50:focus{transform:scale(.5)}.focus\:scale-x-50:focus{transform:scaleX(.5)}.focus\:scale-y-50:focus{transform:scaleY(.5)}.focus\:scale-75:focus{transform:scale(.75)}.focus\:scale-x-75:focus{transform:scaleX(.75)}.focus\:scale-y-75:focus{transform:scaleY(.75)}.focus\:scale-90:focus{transform:scale(.9)}.focus\:scale-x-90:focus{transform:scaleX(.9)}.focus\:scale-y-90:focus{transform:scaleY(.9)}.focus\:scale-95:focus{transform:scale(.95)}.focus\:scale-x-95:focus{transform:scaleX(.95)}.focus\:scale-y-95:focus{transform:scaleY(.95)}.focus\:scale-100:focus{transform:scale(1)}.focus\:scale-x-100:focus{transform:scaleX(1)}.focus\:scale-y-100:focus{transform:scaleY(1)}.focus\:scale-105:focus{transform:scale(1.05)}.focus\:scale-x-105:focus{transform:scaleX(1.05)}.focus\:scale-y-105:focus{transform:scaleY(1.05)}.focus\:scale-110:focus{transform:scale(1.1)}.focus\:scale-x-110:focus{transform:scaleX(1.1)}.focus\:scale-y-110:focus{transform:scaleY(1.1)}.focus\:scale-125:focus{transform:scale(1.25)}.focus\:scale-x-125:focus{transform:scaleX(1.25)}.focus\:scale-y-125:focus{transform:scaleY(1.25)}.focus\:scale-150:focus{transform:scale(1.5)}.focus\:scale-x-150:focus{transform:scaleX(1.5)}.focus\:scale-y-150:focus{transform:scaleY(1.5)}.rotate-0{transform:rotate(0)}.rotate-90{transform:rotate(90deg)}.rotate-135{transform:rotate(135deg)}.rotate-180{transform:rotate(180deg)}.-rotate-180{transform:rotate(-180deg)}.-rotate-135{transform:rotate(-135deg)}.-rotate-90{transform:rotate(-90deg)}.hover\:rotate-0:hover{transform:rotate(0)}.hover\:rotate-90:hover{transform:rotate(90deg)}.hover\:rotate-135:hover{transform:rotate(135deg)}.hover\:rotate-180:hover{transform:rotate(180deg)}.hover\:-rotate-180:hover{transform:rotate(-180deg)}.hover\:-rotate-135:hover{transform:rotate(-135deg)}.hover\:-rotate-90:hover{transform:rotate(-90deg)}.focus\:rotate-0:focus{transform:rotate(0)}.focus\:rotate-90:focus{transform:rotate(90deg)}.focus\:rotate-135:focus{transform:rotate(135deg)}.focus\:rotate-180:focus{transform:rotate(180deg)}.focus\:-rotate-180:focus{transform:rotate(-180deg)}.focus\:-rotate-135:focus{transform:rotate(-135deg)}.focus\:-rotate-90:focus{transform:rotate(-90deg)}.skew-x-0{transform:skewX(0)}.skew-y-0{transform:skewY(0)}.skew-x-1{transform:skewX(1deg)}.skew-y-1{transform:skewY(1deg)}.skew-x-2{transform:skewX(2deg)}.skew-y-2{transform:skewY(2deg)}.skew-x-3{transform:skewX(3deg)}.skew-y-3{transform:skewY(3deg)}.skew-x-6{transform:skewX(6deg)}.skew-y-6{transform:skewY(6deg)}.skew-x-12{transform:skewX(12deg)}.skew-y-12{transform:skewY(12deg)}.-skew-x-12{transform:skewX(-12deg)}.-skew-y-12{transform:skewY(-12deg)}.-skew-x-6{transform:skewX(-6deg)}.-skew-y-6{transform:skewY(-6deg)}.-skew-x-3{transform:skewX(-3deg)}.-skew-y-3{transform:skewY(-3deg)}.-skew-x-2{transform:skewX(-2deg)}.-skew-y-2{transform:skewY(-2deg)}.-skew-x-1{transform:skewX(-1deg)}.-skew-y-1{transform:skewY(-1deg)}.hover\:skew-x-0:hover{transform:skewX(0)}.hover\:skew-y-0:hover{transform:skewY(0)}.hover\:skew-x-1:hover{transform:skewX(1deg)}.hover\:skew-y-1:hover{transform:skewY(1deg)}.hover\:skew-x-2:hover{transform:skewX(2deg)}.hover\:skew-y-2:hover{transform:skewY(2deg)}.hover\:skew-x-3:hover{transform:skewX(3deg)}.hover\:skew-y-3:hover{transform:skewY(3deg)}.hover\:skew-x-6:hover{transform:skewX(6deg)}.hover\:skew-y-6:hover{transform:skewY(6deg)}.hover\:skew-x-12:hover{transform:skewX(12deg)}.hover\:skew-y-12:hover{transform:skewY(12deg)}.hover\:-skew-x-12:hover{transform:skewX(-12deg)}.hover\:-skew-y-12:hover{transform:skewY(-12deg)}.hover\:-skew-x-6:hover{transform:skewX(-6deg)}.hover\:-skew-y-6:hover{transform:skewY(-6deg)}.hover\:-skew-x-3:hover{transform:skewX(-3deg)}.hover\:-skew-y-3:hover{transform:skewY(-3deg)}.hover\:-skew-x-2:hover{transform:skewX(-2deg)}.hover\:-skew-y-2:hover{transform:skewY(-2deg)}.hover\:-skew-x-1:hover{transform:skewX(-1deg)}.hover\:-skew-y-1:hover{transform:skewY(-1deg)}.focus\:skew-x-0:focus{transform:skewX(0)}.focus\:skew-y-0:focus{transform:skewY(0)}.focus\:skew-x-1:focus{transform:skewX(1deg)}.focus\:skew-y-1:focus{transform:skewY(1deg)}.focus\:skew-x-2:focus{transform:skewX(2deg)}.focus\:skew-y-2:focus{transform:skewY(2deg)}.focus\:skew-x-3:focus{transform:skewX(3deg)}.focus\:skew-y-3:focus{transform:skewY(3deg)}.focus\:skew-x-6:focus{transform:skewX(6deg)}.focus\:skew-y-6:focus{transform:skewY(6deg)}.focus\:skew-x-12:focus{transform:skewX(12deg)}.focus\:skew-y-12:focus{transform:skewY(12deg)}.focus\:-skew-x-12:focus{transform:skewX(-12deg)}.focus\:-skew-y-12:focus{transform:skewY(-12deg)}.focus\:-skew-x-6:focus{transform:skewX(-6deg)}.focus\:-skew-y-6:focus{transform:skewY(-6deg)}.focus\:-skew-x-3:focus{transform:skewX(-3deg)}.focus\:-skew-y-3:focus{transform:skewY(-3deg)}.focus\:-skew-x-2:focus{transform:skewX(-2deg)}.focus\:-skew-y-2:focus{transform:skewY(-2deg)}.focus\:-skew-x-1:focus{transform:skewX(-1deg)}.focus\:-skew-y-1:focus{transform:skewY(-1deg)}.transform-border{transform-box:border-box}.transform-fill{transform-box:fill-box}.transform-view{transform-box:view-box}.content__default a.header-anchor{transition:padding-left .5s ease;font-size:.85em;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0;text-decoration:none!important}.content__default h1:hover .header-anchor,.content__default h2:hover .header-anchor,.content__default h3:hover .header-anchor,.content__default h4:hover .header-anchor,.content__default h5:hover .header-anchor,.content__default h6:hover .header-anchor{margin-left:0;opacity:1}.content__default code{margin:0;font-size:.875rem;--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity));color:#0e346c;border-radius:.3125rem;padding:.2rem .4rem}.content__default pre,.content__default pre[class*=language-]{padding:1.25rem;margin-top:1.25rem;margin-bottom:1.25rem;background-color:#3f3d57;border-radius:.3125rem;overflow:auto}.content__default pre[class*=language-] code,.content__default pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}.content__default div[class*=language-]{position:relative;margin-top:1.25rem;margin-bottom:1.25rem;background-color:#3f3d57;border-radius:.3125rem;overflow:auto;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.content__default div[class*=language-]>pre{margin-top:.25rem;margin-bottom:.25rem;line-height:1.4}.content__default div[class*=language-] .highlight-lines{width:100%;top:0;left:0;position:absolute;padding-top:1.25rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:1.4}.content__default div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}.content__default div[class*=language-] pre,.content__default div[class*=language-] pre[class*=language-]{position:relative;z-index:1;background-color:transparent}.content__default div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}.content__default div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}.content__default div[class*=language-].line-numbers-mode pre{padding:1.25rem 1.25rem 1.25rem 2.5rem;margin:0}.content__default div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}.content__default div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;height:100%;width:var(--Global-code-line-numbers-with);background-color:rgba(0,0,0,.66)}.content__default div[class*=language-].line-numbers-mode pre{padding-left:calc(var(--Global-code-line-numbers-with) + 1rem);vertical-align:middle}.content__default div[class*=language-].line-numbers-mode .line-numbers-wrapper{padding-top:1.25rem;padding-bottom:1.25rem;position:absolute;top:0;text-align:center;width:var(--Global-code-line-numbers-with);color:hsla(0,0%,100%,.3);line-height:1.4}.content__default div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.content__default div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:.86em}.content__default div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;height:100%;background-color:#3f3d57;border-bottom-right-radius:.3125rem;border-bottom-left-radius:.3125rem;width:var(--Global-code-line-numbers-with);border-right:1px solid rgba(0,0,0,.66)}.content__default div[class~=language-javascript]:before{content:"js"}.content__default div[class~=language-typescript]:before{content:"ts"}.content__default div[class~=language-markup]:before{content:"html"}.content__default div[class~=language-markdown]:before{content:"md"}.content__default div[class~=language-json]:before{content:"json"}.content__default div[class~=language-ruby]:before{content:"rb"}.content__default div[class~=language-python]:before{content:"py"}.content__default div[class~=language-bash]:before{content:"sh"}.content__default h1{font-size:2rem;margin-bottom:.75rem;margin-top:.75rem;font-weight:700}.content__default h2{font-size:1.75rem;margin-top:.75rem;padding:.5rem;font-weight:700}.content__default h3{font-size:1.5rem;margin-bottom:.5rem;margin-top:.5rem}.content__default h4{font-size:1.25rem;margin-bottom:.5rem;margin-top:.5rem}.content__default h5{font-size:1.125rem;margin-bottom:.5rem;margin-top:.5rem}.content__default h6{font-size:.875rem;margin-bottom:.5rem;margin-top:.5rem}.content__default h1,.content__default h2,.content__default h3,.content__default h4,.content__default h5,.content__default h6{margin-top:-6.5rem;padding-top:7rem;margin-bottom:.5rem!important}.content__default h1.heading,.content__default h2.heading,.content__default h3.heading,.content__default h4.heading,.content__default h5.heading,.content__default h6.heading{font-weight:100}.content__default h1 b,.content__default h2 b,.content__default h3 b,.content__default h4 b,.content__default h5 b,.content__default h6 b{font-weight:700}.content__default h1,.content__default h2,.content__default h3,.content__default h4,.content__default h5,.content__default h6,.content__default p{padding-left:.75rem;padding-right:.75rem}.content__default p{margin-bottom:.75rem;margin-top:.75rem}.content__default a:not(.reset-link){color:#0075db;text-decoration:underline;transition:all ease-in var(--Global-transition-duration)}.content__default a:not(.reset-link):hover{color:#14a5c2}.content__default ol:not(.reset-list),.content__default ul:not(.reset-list){margin-left:2.5rem;margin-top:1.25rem;margin-bottom:1.25rem;line-height:1.5rem}.content__default ol:not(.reset-list) ul,.content__default ul:not(.reset-list) ul{margin-left:1.25rem;margin-top:.25rem;margin-bottom:.25rem}.content__default ul:not(.reset-list){list-style-type:disc}.content__default ul:not(.reset-list) ul li{list-style:circle}.content__default ol:not(.reset-list){list-style-type:decimal}.content__default ol:not(.reset-list) ol li{list-style:lower-alpha}.content__default hr{--border-opacity:1;border:0 solid #d4d1d1;border-color:rgba(212,209,209,var(--border-opacity));border-top:1px solid rgba(212,209,209,var(--border-opacity));margin-top:1.25rem;margin-bottom:1.25rem}.content__default figure{display:flex;justify-content:center;align-items:center;padding-top:1.25rem;padding-bottom:1.25rem;margin-bottom:.75rem;margin-top:.75rem}.content__default figure img:not(.no-shadow){box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.content__default .tabs,.content__default table{margin-bottom:1.25rem;margin-top:1.25rem}.content__default table{border-collapse:collapse;overflow-x:auto}.content__default table thead th{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.content__default table thead th:first-child{border-radius:5px 0 0 0}.content__default table thead th:last-child{border-radius:0 5px 0 0}.content__default table tbody{font-size:.875rem}.content__default table td,.content__default table th{padding:.5rem}.content__default table code{font-size:.75rem}.content__default table tr:nth-child(2n){background-color:#f3f6f7}.content__default table tr:nth-child(2n) code{background-color:#fff}.content__default .table-features{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity));padding:.25rem 1.25rem;border-radius:.3125rem;font-size:.875rem;margin-top:1.25rem;margin-bottom:1.25rem}.content__default .table-features table tr{border-width:0;background-color:transparent}.content__default .table-features table thead tr td,.content__default .table-features table thead tr th{background-color:#fff;padding:.5rem 1rem}.content__default .table-features table thead tr th:first-child{border-radius:5px 0 0 0}.content__default .table-features table thead tr th:last-child{border-radius:0 5px 0 0}.content__default .table-features table td,.content__default .table-features table th{border-width:0;background-color:transparent;padding:.5rem 1rem}.content__default .table-features table img{margin:auto}#nprogress .bar.bar{background-color:#0075db}#nprogress .peg.peg{box-shadow:0 0 10px [object Object],0 0 5px [object Object]}.content__default .custom-block{border-left-width:1px;padding:.25rem 1.25rem .5rem;margin-top:1.25rem;margin-bottom:1.25rem}.content__default .custom-block .custom-block-title{padding-left:0;padding-right:0;font-weight:700}.content__default .custom-block p{padding-left:0;padding-right:0}.content__default .custom-block.tip{border-color:#42b983;color:#2e825c;background-color:rgba(70,201,58,.04)}.content__default .custom-block.tip a:not(.reset-link){color:#2e825c}.content__default .custom-block.warning{border-color:#ffba00;color:#cc9500;background-color:rgba(255,186,0,.09)}.content__default .custom-block.warning a:not(.reset-link){color:#cc9500}.content__default .custom-block.danger{border-color:#ff4757;color:#ff061b;background-color:rgba(255,71,87,.05)}.content__default .custom-block.danger a:not(.reset-link){color:#ff061b}.sidebar{position:fixed;margin:0;left:0;bottom:0;background-color:#fff;z-index:10;overflow-y:auto;width:260px;max-width:80vw;top:4rem;transition:transform .2s ease}.sidebar-group a.sidebar-link,.sidebar-sub-header a.sidebar-link{font-weight:400;opacity:.75;transition:all .3s ease-in-out}.sidebar-sub-header a.sidebar-link{padding-left:1.75rem}.sidebar-group a.active.sidebar-link,.sidebar-sub-header a.active.sidebar-link{opacity:1}.sidebar-sub-header a.active.sidebar-link{color:#0075db}.sidebar-sub-header a.active.sidebar-link:after{display:none}.sidebar a:hover{opacity:1;color:#14a5c2}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}@media (min-width:40.01em){.sm\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px*(1 - var(--space-y-reverse)));margin-bottom:calc(0px*var(--space-y-reverse))}.sm\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px*var(--space-x-reverse));margin-left:calc(0px*(1 - var(--space-x-reverse)))}.sm\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.25rem*var(--space-y-reverse))}.sm\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.25rem*var(--space-x-reverse));margin-left:calc(0.25rem*(1 - var(--space-x-reverse)))}.sm\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.5rem*var(--space-y-reverse))}.sm\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.5rem*var(--space-x-reverse));margin-left:calc(0.5rem*(1 - var(--space-x-reverse)))}.sm\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.75rem*var(--space-y-reverse))}.sm\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.75rem*var(--space-x-reverse));margin-left:calc(0.75rem*(1 - var(--space-x-reverse)))}.sm\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1rem*var(--space-y-reverse))}.sm\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem*var(--space-x-reverse));margin-left:calc(1rem*(1 - var(--space-x-reverse)))}.sm\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem*var(--space-y-reverse))}.sm\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem*var(--space-x-reverse));margin-left:calc(1.25rem*(1 - var(--space-x-reverse)))}.sm\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem*var(--space-y-reverse))}.sm\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem*var(--space-x-reverse));margin-left:calc(1.5rem*(1 - var(--space-x-reverse)))}.sm\:space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.75rem*var(--space-y-reverse))}.sm\:space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.75rem*var(--space-x-reverse));margin-left:calc(1.75rem*(1 - var(--space-x-reverse)))}.sm\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2rem*var(--space-y-reverse))}.sm\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem*var(--space-x-reverse));margin-left:calc(2rem*(1 - var(--space-x-reverse)))}.sm\:space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.25rem*var(--space-y-reverse))}.sm\:space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.25rem*var(--space-x-reverse));margin-left:calc(2.25rem*(1 - var(--space-x-reverse)))}.sm\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem*var(--space-y-reverse))}.sm\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem*var(--space-x-reverse));margin-left:calc(2.5rem*(1 - var(--space-x-reverse)))}.sm\:space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.75rem*var(--space-y-reverse))}.sm\:space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.75rem*var(--space-x-reverse));margin-left:calc(2.75rem*(1 - var(--space-x-reverse)))}.sm\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3rem*var(--space-y-reverse))}.sm\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem*var(--space-x-reverse));margin-left:calc(3rem*(1 - var(--space-x-reverse)))}.sm\:space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3.75rem*var(--space-y-reverse))}.sm\:space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3.75rem*var(--space-x-reverse));margin-left:calc(3.75rem*(1 - var(--space-x-reverse)))}.sm\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(4rem*var(--space-y-reverse))}.sm\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem*var(--space-x-reverse));margin-left:calc(4rem*(1 - var(--space-x-reverse)))}.sm\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5rem*var(--space-y-reverse))}.sm\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem*var(--space-x-reverse));margin-left:calc(5rem*(1 - var(--space-x-reverse)))}.sm\:space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5.5rem*var(--space-y-reverse))}.sm\:space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5.5rem*var(--space-x-reverse));margin-left:calc(5.5rem*(1 - var(--space-x-reverse)))}.sm\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6rem*var(--space-y-reverse))}.sm\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem*var(--space-x-reverse));margin-left:calc(6rem*(1 - var(--space-x-reverse)))}.sm\:space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.25rem*var(--space-y-reverse))}.sm\:space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.25rem*var(--space-x-reverse));margin-left:calc(6.25rem*(1 - var(--space-x-reverse)))}.sm\:space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.5rem*var(--space-y-reverse))}.sm\:space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.5rem*var(--space-x-reverse));margin-left:calc(6.5rem*(1 - var(--space-x-reverse)))}.sm\:space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8rem*var(--space-y-reverse))}.sm\:space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem*var(--space-x-reverse));margin-left:calc(8rem*(1 - var(--space-x-reverse)))}.sm\:space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8.5rem*var(--space-y-reverse))}.sm\:space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8.5rem*var(--space-x-reverse));margin-left:calc(8.5rem*(1 - var(--space-x-reverse)))}.sm\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(9rem*var(--space-y-reverse))}.sm\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(9rem*var(--space-x-reverse));margin-left:calc(9rem*(1 - var(--space-x-reverse)))}.sm\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(10rem*var(--space-y-reverse))}.sm\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem*var(--space-x-reverse));margin-left:calc(10rem*(1 - var(--space-x-reverse)))}.sm\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(12rem*var(--space-y-reverse))}.sm\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem*var(--space-x-reverse));margin-left:calc(12rem*(1 - var(--space-x-reverse)))}.sm\:space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(13rem*var(--space-y-reverse))}.sm\:space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(13rem*var(--space-x-reverse));margin-left:calc(13rem*(1 - var(--space-x-reverse)))}.sm\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(14rem*var(--space-y-reverse))}.sm\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem*var(--space-x-reverse));margin-left:calc(14rem*(1 - var(--space-x-reverse)))}.sm\:space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(15rem*var(--space-y-reverse))}.sm\:space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(15rem*var(--space-x-reverse));margin-left:calc(15rem*(1 - var(--space-x-reverse)))}.sm\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(16rem*var(--space-y-reverse))}.sm\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem*var(--space-x-reverse));margin-left:calc(16rem*(1 - var(--space-x-reverse)))}.sm\:space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(17rem*var(--space-y-reverse))}.sm\:space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(17rem*var(--space-x-reverse));margin-left:calc(17rem*(1 - var(--space-x-reverse)))}.sm\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px*(1 - var(--space-y-reverse)));margin-bottom:calc(1px*var(--space-y-reverse))}.sm\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px*var(--space-x-reverse));margin-left:calc(1px*(1 - var(--space-x-reverse)))}.sm\:space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.125rem*var(--space-y-reverse))}.sm\:space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.125rem*var(--space-x-reverse));margin-left:calc(0.125rem*(1 - var(--space-x-reverse)))}.sm\:space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.375rem*var(--space-y-reverse))}.sm\:space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.375rem*var(--space-x-reverse));margin-left:calc(0.375rem*(1 - var(--space-x-reverse)))}.sm\:space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.625rem*var(--space-y-reverse))}.sm\:space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.625rem*var(--space-x-reverse));margin-left:calc(0.625rem*(1 - var(--space-x-reverse)))}.sm\:space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.875rem*var(--space-y-reverse))}.sm\:space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.875rem*var(--space-x-reverse));margin-left:calc(1.875rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.25rem*var(--space-y-reverse))}.sm\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.25rem*var(--space-x-reverse));margin-left:calc(-0.25rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.5rem*var(--space-y-reverse))}.sm\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.5rem*var(--space-x-reverse));margin-left:calc(-0.5rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.75rem*var(--space-y-reverse))}.sm\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.75rem*var(--space-x-reverse));margin-left:calc(-0.75rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem*var(--space-y-reverse))}.sm\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem*var(--space-x-reverse));margin-left:calc(-1rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem*var(--space-y-reverse))}.sm\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem*var(--space-x-reverse));margin-left:calc(-1.25rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem*var(--space-y-reverse))}.sm\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem*var(--space-x-reverse));margin-left:calc(-1.5rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.75rem*var(--space-y-reverse))}.sm\:-space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.75rem*var(--space-x-reverse));margin-left:calc(-1.75rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem*var(--space-y-reverse))}.sm\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem*var(--space-x-reverse));margin-left:calc(-2rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.25rem*var(--space-y-reverse))}.sm\:-space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.25rem*var(--space-x-reverse));margin-left:calc(-2.25rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem*var(--space-y-reverse))}.sm\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem*var(--space-x-reverse));margin-left:calc(-2.5rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.75rem*var(--space-y-reverse))}.sm\:-space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.75rem*var(--space-x-reverse));margin-left:calc(-2.75rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem*var(--space-y-reverse))}.sm\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem*var(--space-x-reverse));margin-left:calc(-3rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3.75rem*var(--space-y-reverse))}.sm\:-space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3.75rem*var(--space-x-reverse));margin-left:calc(-3.75rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem*var(--space-y-reverse))}.sm\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem*var(--space-x-reverse));margin-left:calc(-4rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem*var(--space-y-reverse))}.sm\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem*var(--space-x-reverse));margin-left:calc(-5rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5.5rem*var(--space-y-reverse))}.sm\:-space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5.5rem*var(--space-x-reverse));margin-left:calc(-5.5rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem*var(--space-y-reverse))}.sm\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem*var(--space-x-reverse));margin-left:calc(-6rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.25rem*var(--space-y-reverse))}.sm\:-space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.25rem*var(--space-x-reverse));margin-left:calc(-6.25rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.5rem*var(--space-y-reverse))}.sm\:-space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.5rem*var(--space-x-reverse));margin-left:calc(-6.5rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem*var(--space-y-reverse))}.sm\:-space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem*var(--space-x-reverse));margin-left:calc(-8rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8.5rem*var(--space-y-reverse))}.sm\:-space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8.5rem*var(--space-x-reverse));margin-left:calc(-8.5rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-9rem*var(--space-y-reverse))}.sm\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-9rem*var(--space-x-reverse));margin-left:calc(-9rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem*var(--space-y-reverse))}.sm\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem*var(--space-x-reverse));margin-left:calc(-10rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem*var(--space-y-reverse))}.sm\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem*var(--space-x-reverse));margin-left:calc(-12rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-13rem*var(--space-y-reverse))}.sm\:-space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-13rem*var(--space-x-reverse));margin-left:calc(-13rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem*var(--space-y-reverse))}.sm\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem*var(--space-x-reverse));margin-left:calc(-14rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-15rem*var(--space-y-reverse))}.sm\:-space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-15rem*var(--space-x-reverse));margin-left:calc(-15rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem*var(--space-y-reverse))}.sm\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem*var(--space-x-reverse));margin-left:calc(-16rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-17rem*var(--space-y-reverse))}.sm\:-space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-17rem*var(--space-x-reverse));margin-left:calc(-17rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px*(1 - var(--space-y-reverse)));margin-bottom:calc(-1px*var(--space-y-reverse))}.sm\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px*var(--space-x-reverse));margin-left:calc(-1px*(1 - var(--space-x-reverse)))}.sm\:-space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.125rem*var(--space-y-reverse))}.sm\:-space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.125rem*var(--space-x-reverse));margin-left:calc(-0.125rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.375rem*var(--space-y-reverse))}.sm\:-space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.375rem*var(--space-x-reverse));margin-left:calc(-0.375rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.625rem*var(--space-y-reverse))}.sm\:-space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.625rem*var(--space-x-reverse));margin-left:calc(-0.625rem*(1 - var(--space-x-reverse)))}.sm\:-space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.875rem*var(--space-y-reverse))}.sm\:-space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.875rem*var(--space-x-reverse));margin-left:calc(-1.875rem*(1 - var(--space-x-reverse)))}.sm\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.sm\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.sm\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px*var(--divide-y-reverse))}.sm\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px*var(--divide-x-reverse));border-left-width:calc(0px*(1 - var(--divide-x-reverse)))}.sm\:divide-y-1>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.sm\:divide-x-1>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.sm\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px*var(--divide-y-reverse))}.sm\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px*var(--divide-x-reverse));border-left-width:calc(2px*(1 - var(--divide-x-reverse)))}.sm\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px*var(--divide-y-reverse))}.sm\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px*var(--divide-x-reverse));border-left-width:calc(4px*(1 - var(--divide-x-reverse)))}.sm\:divide-y-5>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(5px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(5px*var(--divide-y-reverse))}.sm\:divide-x-5>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(5px*var(--divide-x-reverse));border-left-width:calc(5px*(1 - var(--divide-x-reverse)))}.sm\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px*var(--divide-y-reverse))}.sm\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px*var(--divide-x-reverse));border-left-width:calc(8px*(1 - var(--divide-x-reverse)))}.sm\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.sm\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.sm\:divide-y-DEFAULT>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.sm\:divide-x-DEFAULT>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.sm\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.sm\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.sm\:divide-transparent>:not(template)~:not(template){border-color:transparent}.sm\:divide-current>:not(template)~:not(template){border-color:currentColor}.sm\:divide-black>:not(template)~:not(template){border-color:#000}.sm\:divide-white>:not(template)~:not(template){border-color:#fff}.sm\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.sm\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.sm\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.sm\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.sm\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.sm\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.sm\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.sm\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.sm\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.sm\:divide-gray-DEFAULT>:not(template)~:not(template),.sm\:divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.sm\:divide-red>:not(template)~:not(template){border-color:#d64343}.sm\:divide-orange>:not(template)~:not(template){border-color:#eb6437}.sm\:divide-yellow>:not(template)~:not(template){border-color:#f8da30}.sm\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.sm\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.sm\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.sm\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.sm\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.sm\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.sm\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.sm\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.sm\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.sm\:divide-green-DEFAULT>:not(template)~:not(template),.sm\:divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.sm\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.sm\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.sm\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.sm\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.sm\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.sm\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.sm\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.sm\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.sm\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.sm\:divide-teal-DEFAULT>:not(template)~:not(template),.sm\:divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.sm\:divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.sm\:divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.sm\:divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.sm\:divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.sm\:divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.sm\:divide-blue-500>:not(template)~:not(template){border-color:#058aff}.sm\:divide-blue-600>:not(template)~:not(template){border-color:#0075db}.sm\:divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.sm\:divide-blue-800>:not(template)~:not(template){border-color:#00498a}.sm\:divide-blue-900>:not(template)~:not(template){border-color:#003461}.sm\:divide-blue-DEFAULT>:not(template)~:not(template),.sm\:divide-blue>:not(template)~:not(template){border-color:#0075db}.sm\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.sm\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.sm\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.sm\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.sm\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.sm\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.sm\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.sm\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.sm\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.sm\:divide-indigo-DEFAULT>:not(template)~:not(template),.sm\:divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.sm\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.sm\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.sm\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.sm\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.sm\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.sm\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.sm\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.sm\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.sm\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.sm\:divide-purple-DEFAULT>:not(template)~:not(template),.sm\:divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.sm\:divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.sm\:divide-inherit>:not(template)~:not(template){border-color:inherit}.sm\:divide-amber>:not(template)~:not(template){border-color:#d78737}.sm\:divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.sm\:divide-ardoise>:not(template)~:not(template){border-color:#596a82}.sm\:divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.sm\:divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.sm\:divide-lightBlue-active>:not(template)~:not(template),.sm\:divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.sm\:divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.sm\:divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.sm\:divide-gold>:not(template)~:not(template){border-color:#bd9e56}.sm\:divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.sm\:divide-grenadine>:not(template)~:not(template){border-color:#c35078}.sm\:divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.sm\:divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.sm\:divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.sm\:divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.sm\:divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.sm\:divide-mahogany>:not(template)~:not(template){border-color:#57142e}.sm\:divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.sm\:divide-ocher>:not(template)~:not(template){border-color:#c29614}.sm\:divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.sm\:divide-pine>:not(template)~:not(template){border-color:#144d52}.sm\:divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.sm\:divide-platinum-active>:not(template)~:not(template),.sm\:divide-platinum>:not(template)~:not(template){border-color:#000}.sm\:divide-prune>:not(template)~:not(template){border-color:#661456}.sm\:divide-prune-active>:not(template)~:not(template){border-color:#72085d}.sm\:divide-sand>:not(template)~:not(template){border-color:#d7be88}.sm\:divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.sm\:divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.sm\:divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.sm\:divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.sm\:divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.sm\:divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.sm\:divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.sm\:divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.sm\:divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.sm\:divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.sm\:divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.sm\:divide-waterGreen>:not(template)~:not(template){border-color:#007571}.sm\:divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.sm\:divide-deepRed>:not(template)~:not(template){border-color:#c32222}.sm\:divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.sm\:divide-emerald>:not(template)~:not(template){border-color:#14a33a}.sm\:divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.sm\:divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.sm\:divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.sm\:divide-red-active>:not(template)~:not(template){border-color:#e13737}.sm\:divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.sm\:divide-white-button-active>:not(template)~:not(template),.sm\:divide-white-button>:not(template)~:not(template){border-color:#fff}.sm\:divide-code>:not(template)~:not(template){border-color:#3f3d57}.sm\:divide-code-active>:not(template)~:not(template){border-color:#37354b}.sm\:divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.sm\:divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.sm\:divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.sm\:divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.sm\:divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.sm\:divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.sm\:divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.sm\:divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.sm\:divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.sm\:divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-transparent>:not(template)~:not(template){border-color:transparent}.group:hover .sm\:group-hover\:divide-current>:not(template)~:not(template){border-color:currentColor}.group:hover .sm\:group-hover\:divide-black>:not(template)~:not(template){border-color:#000}.group:hover .sm\:group-hover\:divide-white>:not(template)~:not(template){border-color:#fff}.group:hover .sm\:group-hover\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-DEFAULT>:not(template)~:not(template),.group:hover .sm\:group-hover\:divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-red>:not(template)~:not(template){border-color:#d64343}.group:hover .sm\:group-hover\:divide-orange>:not(template)~:not(template){border-color:#eb6437}.group:hover .sm\:group-hover\:divide-yellow>:not(template)~:not(template){border-color:#f8da30}.group:hover .sm\:group-hover\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-green-DEFAULT>:not(template)~:not(template),.group:hover .sm\:group-hover\:divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-teal-DEFAULT>:not(template)~:not(template),.group:hover .sm\:group-hover\:divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.group:hover .sm\:group-hover\:divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.group:hover .sm\:group-hover\:divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.group:hover .sm\:group-hover\:divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.group:hover .sm\:group-hover\:divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.group:hover .sm\:group-hover\:divide-blue-500>:not(template)~:not(template){border-color:#058aff}.group:hover .sm\:group-hover\:divide-blue-600>:not(template)~:not(template){border-color:#0075db}.group:hover .sm\:group-hover\:divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.group:hover .sm\:group-hover\:divide-blue-800>:not(template)~:not(template){border-color:#00498a}.group:hover .sm\:group-hover\:divide-blue-900>:not(template)~:not(template){border-color:#003461}.group:hover .sm\:group-hover\:divide-blue-DEFAULT>:not(template)~:not(template),.group:hover .sm\:group-hover\:divide-blue>:not(template)~:not(template){border-color:#0075db}.group:hover .sm\:group-hover\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-indigo-DEFAULT>:not(template)~:not(template),.group:hover .sm\:group-hover\:divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-purple-DEFAULT>:not(template)~:not(template),.group:hover .sm\:group-hover\:divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-inherit>:not(template)~:not(template){border-color:inherit}.group:hover .sm\:group-hover\:divide-amber>:not(template)~:not(template){border-color:#d78737}.group:hover .sm\:group-hover\:divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.group:hover .sm\:group-hover\:divide-ardoise>:not(template)~:not(template){border-color:#596a82}.group:hover .sm\:group-hover\:divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.group:hover .sm\:group-hover\:divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .sm\:group-hover\:divide-lightBlue-active>:not(template)~:not(template),.group:hover .sm\:group-hover\:divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.group:hover .sm\:group-hover\:divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.group:hover .sm\:group-hover\:divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.group:hover .sm\:group-hover\:divide-gold>:not(template)~:not(template){border-color:#bd9e56}.group:hover .sm\:group-hover\:divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.group:hover .sm\:group-hover\:divide-grenadine>:not(template)~:not(template){border-color:#c35078}.group:hover .sm\:group-hover\:divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.group:hover .sm\:group-hover\:divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.group:hover .sm\:group-hover\:divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.group:hover .sm\:group-hover\:divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.group:hover .sm\:group-hover\:divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.group:hover .sm\:group-hover\:divide-mahogany>:not(template)~:not(template){border-color:#57142e}.group:hover .sm\:group-hover\:divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.group:hover .sm\:group-hover\:divide-ocher>:not(template)~:not(template){border-color:#c29614}.group:hover .sm\:group-hover\:divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.group:hover .sm\:group-hover\:divide-pine>:not(template)~:not(template){border-color:#144d52}.group:hover .sm\:group-hover\:divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.group:hover .sm\:group-hover\:divide-platinum-active>:not(template)~:not(template),.group:hover .sm\:group-hover\:divide-platinum>:not(template)~:not(template){border-color:#000}.group:hover .sm\:group-hover\:divide-prune>:not(template)~:not(template){border-color:#661456}.group:hover .sm\:group-hover\:divide-prune-active>:not(template)~:not(template){border-color:#72085d}.group:hover .sm\:group-hover\:divide-sand>:not(template)~:not(template){border-color:#d7be88}.group:hover .sm\:group-hover\:divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.group:hover .sm\:group-hover\:divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.group:hover .sm\:group-hover\:divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.group:hover .sm\:group-hover\:divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.group:hover .sm\:group-hover\:divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.group:hover .sm\:group-hover\:divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.group:hover .sm\:group-hover\:divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.group:hover .sm\:group-hover\:divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.group:hover .sm\:group-hover\:divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.group:hover .sm\:group-hover\:divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.group:hover .sm\:group-hover\:divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.group:hover .sm\:group-hover\:divide-waterGreen>:not(template)~:not(template){border-color:#007571}.group:hover .sm\:group-hover\:divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.group:hover .sm\:group-hover\:divide-deepRed>:not(template)~:not(template){border-color:#c32222}.group:hover .sm\:group-hover\:divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.group:hover .sm\:group-hover\:divide-emerald>:not(template)~:not(template){border-color:#14a33a}.group:hover .sm\:group-hover\:divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.group:hover .sm\:group-hover\:divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.group:hover .sm\:group-hover\:divide-red-active>:not(template)~:not(template){border-color:#e13737}.group:hover .sm\:group-hover\:divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .sm\:group-hover\:divide-white-button-active>:not(template)~:not(template),.group:hover .sm\:group-hover\:divide-white-button>:not(template)~:not(template){border-color:#fff}.group:hover .sm\:group-hover\:divide-code>:not(template)~:not(template){border-color:#3f3d57}.group:hover .sm\:group-hover\:divide-code-active>:not(template)~:not(template){border-color:#37354b}.group:hover .sm\:group-hover\:divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.group:hover .sm\:group-hover\:divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .sm\:group-hover\:divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.group:hover .sm\:group-hover\:divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.group:hover .sm\:group-hover\:divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.sm\:divide-solid>:not(template)~:not(template){border-style:solid}.sm\:divide-dashed>:not(template)~:not(template){border-style:dashed}.sm\:divide-dotted>:not(template)~:not(template){border-style:dotted}.sm\:divide-double>:not(template)~:not(template){border-style:double}.sm\:divide-none>:not(template)~:not(template){border-style:none}.sm\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.sm\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.sm\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.sm\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.sm\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.group:hover .sm\:group-hover\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.group:hover .sm\:group-hover\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.group:hover .sm\:group-hover\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.group:hover .sm\:group-hover\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.group:hover .sm\:group-hover\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.sm\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sm\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.sm\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sm\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.sm\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.sm\:bg-fixed{background-attachment:fixed}.sm\:bg-local{background-attachment:local}.sm\:bg-scroll{background-attachment:scroll}.sm\:bg-clip-border{background-clip:border-box}.sm\:bg-clip-padding{background-clip:padding-box}.sm\:bg-clip-content{background-clip:content-box}.sm\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.sm\:bg-transparent{background-color:transparent}.sm\:bg-current{background-color:currentColor}.sm\:bg-black{background-color:#000}.sm\:bg-white{background-color:#fff}.sm\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.sm\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.sm\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.sm\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.sm\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.sm\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.sm\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.sm\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.sm\:bg-gray,.sm\:bg-gray-DEFAULT{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:bg-red{background-color:#d64343}.sm\:bg-orange{background-color:#eb6437}.sm\:bg-yellow{background-color:#f8da30}.sm\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.sm\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.sm\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.sm\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.sm\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.sm\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.sm\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.sm\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.sm\:bg-green,.sm\:bg-green-DEFAULT{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.sm\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.sm\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.sm\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.sm\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.sm\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.sm\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.sm\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.sm\:bg-teal,.sm\:bg-teal-DEFAULT{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:bg-blue-50{background-color:#d1eaff}.sm\:bg-blue-100{background-color:#a8d7ff}.sm\:bg-blue-200{background-color:#80c4ff}.sm\:bg-blue-300{background-color:#57b0ff}.sm\:bg-blue-400{background-color:#2e9dff}.sm\:bg-blue-500{background-color:#058aff}.sm\:bg-blue-600{background-color:#0075db}.sm\:bg-blue-700{background-color:#005fb3}.sm\:bg-blue-800{background-color:#00498a}.sm\:bg-blue-900{background-color:#003461}.sm\:bg-blue,.sm\:bg-blue-DEFAULT{background-color:#0075db}.sm\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.sm\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.sm\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.sm\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.sm\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.sm\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.sm\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.sm\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.sm\:bg-indigo,.sm\:bg-indigo-DEFAULT{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.sm\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.sm\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.sm\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.sm\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.sm\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.sm\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.sm\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.sm\:bg-purple,.sm\:bg-purple-DEFAULT{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:bg-pink{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.sm\:bg-inherit{background-color:inherit}.sm\:bg-amber{background-color:#d78737}.sm\:bg-amber-active{background-color:#e3872b}.sm\:bg-ardoise{background-color:#596a82}.sm\:bg-ardoise-active{background-color:#476794}.sm\:bg-blue-active{background-color:#14a5c2}.sm\:bg-lightBlue,.sm\:bg-lightBlue-active{background-color:rgba(0,85,138,.1)}.sm\:bg-deepBlue{background-color:#0e346c}.sm\:bg-deepBlue-active{background-color:#0a3f8f}.sm\:bg-gold{background-color:#bd9e56}.sm\:bg-gold-active{background-color:#c9a34a}.sm\:bg-grenadine{background-color:#c35078}.sm\:bg-grenadine-active{background-color:#cf4475}.sm\:bg-kiwi{background-color:#9a9f1e}.sm\:bg-kiwi-active{background-color:#a3a815}.sm\:bg-lilas{background-color:#7ea1d3}.sm\:bg-lilas-active{background-color:#75a0db}.sm\:bg-mahogany{background-color:#57142e}.sm\:bg-mahogany-active{background-color:#610a2b}.sm\:bg-ocher{background-color:#c29614}.sm\:bg-ocher-active{background-color:#cd9c0a}.sm\:bg-pine{background-color:#144d52}.sm\:bg-pine-active{background-color:#0a555c}.sm\:bg-platinum,.sm\:bg-platinum-active{background-color:#000}.sm\:bg-prune{background-color:#661456}.sm\:bg-prune-active{background-color:#72085d}.sm\:bg-sand{background-color:#d7be88}.sm\:bg-sand-active{background-color:#dfc181}.sm\:bg-sandPearl{background-color:#f0e5d6}.sm\:bg-sandPearl-active{background-color:#f2e6d4}.sm\:bg-silver{background-color:#b1b2b4}.sm\:bg-silver-active{background-color:#a9afbc}.sm\:bg-skyBlue{background-color:#98d2d7}.sm\:bg-skyBlue-active{background-color:#91d8de}.sm\:bg-southSea{background-color:#9dc9cd}.sm\:bg-southSea-active{background-color:#95ced5}.sm\:bg-turquoise{background-color:#14a5c2}.sm\:bg-turquoise-active{background-color:#0aaccd}.sm\:bg-waterGreen{background-color:#007571}.sm\:bg-waterGreen-active{background-color:#00a8a3}.sm\:bg-deepRed{background-color:#c32222}.sm\:bg-deepRed-active{background-color:#cf1717}.sm\:bg-emerald{background-color:#14a33a}.sm\:bg-emerald-active{background-color:#0bad36}.sm\:bg-greenLight{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.sm\:bg-orange-active{background-color:#f65f2c}.sm\:bg-red-active{background-color:#e13737}.sm\:bg-white-active{background-color:#14a5c2}.sm\:bg-white-button,.sm\:bg-white-button-active{background-color:#fff}.sm\:bg-code{background-color:#3f3d57}.sm\:bg-code-active{background-color:#37354b}.sm\:bg-gray-lighter{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.sm\:bg-gray-lighter-active{background-color:#ebebeb}.sm\:bg-gray-light{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.sm\:bg-gray-medium{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.sm\:bg-gray-darker{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.sm\:bg-gray-darker-active{background-color:#14a5c2}.sm\:bg-api-default{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.sm\:bg-gray-xxl{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.sm\:bg-line-even{background-color:#f3f6f7}.sm\:hover\:bg-transparent:hover{background-color:transparent}.sm\:hover\:bg-current:hover{background-color:currentColor}.sm\:hover\:bg-black:hover{background-color:#000}.sm\:hover\:bg-white:hover{background-color:#fff}.sm\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.sm\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.sm\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.sm\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.sm\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.sm\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.sm\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.sm\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.sm\:hover\:bg-gray-DEFAULT:hover,.sm\:hover\:bg-gray:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:hover\:bg-red:hover{background-color:#d64343}.sm\:hover\:bg-orange:hover{background-color:#eb6437}.sm\:hover\:bg-yellow:hover{background-color:#f8da30}.sm\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.sm\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.sm\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.sm\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.sm\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.sm\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.sm\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.sm\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.sm\:hover\:bg-green-DEFAULT:hover,.sm\:hover\:bg-green:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.sm\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.sm\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.sm\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.sm\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.sm\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.sm\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.sm\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.sm\:hover\:bg-teal-DEFAULT:hover,.sm\:hover\:bg-teal:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:hover\:bg-blue-50:hover{background-color:#d1eaff}.sm\:hover\:bg-blue-100:hover{background-color:#a8d7ff}.sm\:hover\:bg-blue-200:hover{background-color:#80c4ff}.sm\:hover\:bg-blue-300:hover{background-color:#57b0ff}.sm\:hover\:bg-blue-400:hover{background-color:#2e9dff}.sm\:hover\:bg-blue-500:hover{background-color:#058aff}.sm\:hover\:bg-blue-600:hover{background-color:#0075db}.sm\:hover\:bg-blue-700:hover{background-color:#005fb3}.sm\:hover\:bg-blue-800:hover{background-color:#00498a}.sm\:hover\:bg-blue-900:hover{background-color:#003461}.sm\:hover\:bg-blue-DEFAULT:hover,.sm\:hover\:bg-blue:hover{background-color:#0075db}.sm\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.sm\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.sm\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.sm\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.sm\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.sm\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.sm\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.sm\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.sm\:hover\:bg-indigo-DEFAULT:hover,.sm\:hover\:bg-indigo:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.sm\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.sm\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.sm\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.sm\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.sm\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.sm\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.sm\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.sm\:hover\:bg-purple-DEFAULT:hover,.sm\:hover\:bg-purple:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:hover\:bg-pink:hover{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.sm\:hover\:bg-inherit:hover{background-color:inherit}.sm\:hover\:bg-amber:hover{background-color:#d78737}.sm\:hover\:bg-amber-active:hover{background-color:#e3872b}.sm\:hover\:bg-ardoise:hover{background-color:#596a82}.sm\:hover\:bg-ardoise-active:hover{background-color:#476794}.sm\:hover\:bg-blue-active:hover{background-color:#14a5c2}.sm\:hover\:bg-lightBlue-active:hover,.sm\:hover\:bg-lightBlue:hover{background-color:rgba(0,85,138,.1)}.sm\:hover\:bg-deepBlue:hover{background-color:#0e346c}.sm\:hover\:bg-deepBlue-active:hover{background-color:#0a3f8f}.sm\:hover\:bg-gold:hover{background-color:#bd9e56}.sm\:hover\:bg-gold-active:hover{background-color:#c9a34a}.sm\:hover\:bg-grenadine:hover{background-color:#c35078}.sm\:hover\:bg-grenadine-active:hover{background-color:#cf4475}.sm\:hover\:bg-kiwi:hover{background-color:#9a9f1e}.sm\:hover\:bg-kiwi-active:hover{background-color:#a3a815}.sm\:hover\:bg-lilas:hover{background-color:#7ea1d3}.sm\:hover\:bg-lilas-active:hover{background-color:#75a0db}.sm\:hover\:bg-mahogany:hover{background-color:#57142e}.sm\:hover\:bg-mahogany-active:hover{background-color:#610a2b}.sm\:hover\:bg-ocher:hover{background-color:#c29614}.sm\:hover\:bg-ocher-active:hover{background-color:#cd9c0a}.sm\:hover\:bg-pine:hover{background-color:#144d52}.sm\:hover\:bg-pine-active:hover{background-color:#0a555c}.sm\:hover\:bg-platinum-active:hover,.sm\:hover\:bg-platinum:hover{background-color:#000}.sm\:hover\:bg-prune:hover{background-color:#661456}.sm\:hover\:bg-prune-active:hover{background-color:#72085d}.sm\:hover\:bg-sand:hover{background-color:#d7be88}.sm\:hover\:bg-sand-active:hover{background-color:#dfc181}.sm\:hover\:bg-sandPearl:hover{background-color:#f0e5d6}.sm\:hover\:bg-sandPearl-active:hover{background-color:#f2e6d4}.sm\:hover\:bg-silver:hover{background-color:#b1b2b4}.sm\:hover\:bg-silver-active:hover{background-color:#a9afbc}.sm\:hover\:bg-skyBlue:hover{background-color:#98d2d7}.sm\:hover\:bg-skyBlue-active:hover{background-color:#91d8de}.sm\:hover\:bg-southSea:hover{background-color:#9dc9cd}.sm\:hover\:bg-southSea-active:hover{background-color:#95ced5}.sm\:hover\:bg-turquoise:hover{background-color:#14a5c2}.sm\:hover\:bg-turquoise-active:hover{background-color:#0aaccd}.sm\:hover\:bg-waterGreen:hover{background-color:#007571}.sm\:hover\:bg-waterGreen-active:hover{background-color:#00a8a3}.sm\:hover\:bg-deepRed:hover{background-color:#c32222}.sm\:hover\:bg-deepRed-active:hover{background-color:#cf1717}.sm\:hover\:bg-emerald:hover{background-color:#14a33a}.sm\:hover\:bg-emerald-active:hover{background-color:#0bad36}.sm\:hover\:bg-greenLight:hover{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.sm\:hover\:bg-orange-active:hover{background-color:#f65f2c}.sm\:hover\:bg-red-active:hover{background-color:#e13737}.sm\:hover\:bg-white-active:hover{background-color:#14a5c2}.sm\:hover\:bg-white-button-active:hover,.sm\:hover\:bg-white-button:hover{background-color:#fff}.sm\:hover\:bg-code:hover{background-color:#3f3d57}.sm\:hover\:bg-code-active:hover{background-color:#37354b}.sm\:hover\:bg-gray-lighter:hover{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.sm\:hover\:bg-gray-lighter-active:hover{background-color:#ebebeb}.sm\:hover\:bg-gray-light:hover{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.sm\:hover\:bg-gray-medium:hover{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.sm\:hover\:bg-gray-darker:hover{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.sm\:hover\:bg-gray-darker-active:hover{background-color:#14a5c2}.sm\:hover\:bg-api-default:hover{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.sm\:hover\:bg-gray-xxl:hover{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.sm\:hover\:bg-line-even:hover{background-color:#f3f6f7}.sm\:focus\:bg-transparent:focus{background-color:transparent}.sm\:focus\:bg-current:focus{background-color:currentColor}.sm\:focus\:bg-black:focus{background-color:#000}.sm\:focus\:bg-white:focus{background-color:#fff}.sm\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.sm\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.sm\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.sm\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.sm\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.sm\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.sm\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.sm\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.sm\:focus\:bg-gray-DEFAULT:focus,.sm\:focus\:bg-gray:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:focus\:bg-red:focus{background-color:#d64343}.sm\:focus\:bg-orange:focus{background-color:#eb6437}.sm\:focus\:bg-yellow:focus{background-color:#f8da30}.sm\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.sm\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.sm\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.sm\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.sm\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.sm\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.sm\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.sm\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.sm\:focus\:bg-green-DEFAULT:focus,.sm\:focus\:bg-green:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.sm\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.sm\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.sm\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.sm\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.sm\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.sm\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.sm\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.sm\:focus\:bg-teal-DEFAULT:focus,.sm\:focus\:bg-teal:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:focus\:bg-blue-50:focus{background-color:#d1eaff}.sm\:focus\:bg-blue-100:focus{background-color:#a8d7ff}.sm\:focus\:bg-blue-200:focus{background-color:#80c4ff}.sm\:focus\:bg-blue-300:focus{background-color:#57b0ff}.sm\:focus\:bg-blue-400:focus{background-color:#2e9dff}.sm\:focus\:bg-blue-500:focus{background-color:#058aff}.sm\:focus\:bg-blue-600:focus{background-color:#0075db}.sm\:focus\:bg-blue-700:focus{background-color:#005fb3}.sm\:focus\:bg-blue-800:focus{background-color:#00498a}.sm\:focus\:bg-blue-900:focus{background-color:#003461}.sm\:focus\:bg-blue-DEFAULT:focus,.sm\:focus\:bg-blue:focus{background-color:#0075db}.sm\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.sm\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.sm\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.sm\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.sm\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.sm\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.sm\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.sm\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.sm\:focus\:bg-indigo-DEFAULT:focus,.sm\:focus\:bg-indigo:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.sm\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.sm\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.sm\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.sm\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.sm\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.sm\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.sm\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.sm\:focus\:bg-purple-DEFAULT:focus,.sm\:focus\:bg-purple:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:focus\:bg-pink:focus{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.sm\:focus\:bg-inherit:focus{background-color:inherit}.sm\:focus\:bg-amber:focus{background-color:#d78737}.sm\:focus\:bg-amber-active:focus{background-color:#e3872b}.sm\:focus\:bg-ardoise:focus{background-color:#596a82}.sm\:focus\:bg-ardoise-active:focus{background-color:#476794}.sm\:focus\:bg-blue-active:focus{background-color:#14a5c2}.sm\:focus\:bg-lightBlue-active:focus,.sm\:focus\:bg-lightBlue:focus{background-color:rgba(0,85,138,.1)}.sm\:focus\:bg-deepBlue:focus{background-color:#0e346c}.sm\:focus\:bg-deepBlue-active:focus{background-color:#0a3f8f}.sm\:focus\:bg-gold:focus{background-color:#bd9e56}.sm\:focus\:bg-gold-active:focus{background-color:#c9a34a}.sm\:focus\:bg-grenadine:focus{background-color:#c35078}.sm\:focus\:bg-grenadine-active:focus{background-color:#cf4475}.sm\:focus\:bg-kiwi:focus{background-color:#9a9f1e}.sm\:focus\:bg-kiwi-active:focus{background-color:#a3a815}.sm\:focus\:bg-lilas:focus{background-color:#7ea1d3}.sm\:focus\:bg-lilas-active:focus{background-color:#75a0db}.sm\:focus\:bg-mahogany:focus{background-color:#57142e}.sm\:focus\:bg-mahogany-active:focus{background-color:#610a2b}.sm\:focus\:bg-ocher:focus{background-color:#c29614}.sm\:focus\:bg-ocher-active:focus{background-color:#cd9c0a}.sm\:focus\:bg-pine:focus{background-color:#144d52}.sm\:focus\:bg-pine-active:focus{background-color:#0a555c}.sm\:focus\:bg-platinum-active:focus,.sm\:focus\:bg-platinum:focus{background-color:#000}.sm\:focus\:bg-prune:focus{background-color:#661456}.sm\:focus\:bg-prune-active:focus{background-color:#72085d}.sm\:focus\:bg-sand:focus{background-color:#d7be88}.sm\:focus\:bg-sand-active:focus{background-color:#dfc181}.sm\:focus\:bg-sandPearl:focus{background-color:#f0e5d6}.sm\:focus\:bg-sandPearl-active:focus{background-color:#f2e6d4}.sm\:focus\:bg-silver:focus{background-color:#b1b2b4}.sm\:focus\:bg-silver-active:focus{background-color:#a9afbc}.sm\:focus\:bg-skyBlue:focus{background-color:#98d2d7}.sm\:focus\:bg-skyBlue-active:focus{background-color:#91d8de}.sm\:focus\:bg-southSea:focus{background-color:#9dc9cd}.sm\:focus\:bg-southSea-active:focus{background-color:#95ced5}.sm\:focus\:bg-turquoise:focus{background-color:#14a5c2}.sm\:focus\:bg-turquoise-active:focus{background-color:#0aaccd}.sm\:focus\:bg-waterGreen:focus{background-color:#007571}.sm\:focus\:bg-waterGreen-active:focus{background-color:#00a8a3}.sm\:focus\:bg-deepRed:focus{background-color:#c32222}.sm\:focus\:bg-deepRed-active:focus{background-color:#cf1717}.sm\:focus\:bg-emerald:focus{background-color:#14a33a}.sm\:focus\:bg-emerald-active:focus{background-color:#0bad36}.sm\:focus\:bg-greenLight:focus{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.sm\:focus\:bg-orange-active:focus{background-color:#f65f2c}.sm\:focus\:bg-red-active:focus{background-color:#e13737}.sm\:focus\:bg-white-active:focus{background-color:#14a5c2}.sm\:focus\:bg-white-button-active:focus,.sm\:focus\:bg-white-button:focus{background-color:#fff}.sm\:focus\:bg-code:focus{background-color:#3f3d57}.sm\:focus\:bg-code-active:focus{background-color:#37354b}.sm\:focus\:bg-gray-lighter:focus{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.sm\:focus\:bg-gray-lighter-active:focus{background-color:#ebebeb}.sm\:focus\:bg-gray-light:focus{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.sm\:focus\:bg-gray-medium:focus{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.sm\:focus\:bg-gray-darker:focus{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.sm\:focus\:bg-gray-darker-active:focus{background-color:#14a5c2}.sm\:focus\:bg-api-default:focus{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.sm\:focus\:bg-gray-xxl:focus{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.sm\:focus\:bg-line-even:focus{background-color:#f3f6f7}.sm\:bg-none{background-image:none}.sm\:bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))}.sm\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.sm\:bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))}.sm\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.sm\:bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))}.sm\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.sm\:bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))}.sm\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.sm\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.sm\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.sm\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.sm\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.sm\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.sm\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.sm\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.sm\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.sm\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.sm\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.sm\:from-gray,.sm\:from-gray-DEFAULT{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:from-red{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.sm\:from-orange{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.sm\:from-yellow{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.sm\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.sm\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.sm\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.sm\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.sm\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.sm\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.sm\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.sm\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.sm\:from-green,.sm\:from-green-DEFAULT{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.sm\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.sm\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.sm\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.sm\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.sm\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.sm\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.sm\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.sm\:from-teal,.sm\:from-teal-DEFAULT{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:from-blue-50{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.sm\:from-blue-100{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.sm\:from-blue-200{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.sm\:from-blue-300{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.sm\:from-blue-400{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.sm\:from-blue-500{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.sm\:from-blue-600{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:from-blue-700{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.sm\:from-blue-800{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.sm\:from-blue-900{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.sm\:from-blue,.sm\:from-blue-DEFAULT{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.sm\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.sm\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.sm\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.sm\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.sm\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.sm\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.sm\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.sm\:from-indigo,.sm\:from-indigo-DEFAULT{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.sm\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.sm\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.sm\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.sm\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.sm\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.sm\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.sm\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.sm\:from-purple,.sm\:from-purple-DEFAULT{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:from-pink{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.sm\:from-inherit{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:from-amber{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.sm\:from-amber-active{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.sm\:from-ardoise{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.sm\:from-ardoise-active{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.sm\:from-blue-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:from-lightBlue,.sm\:from-lightBlue-active{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.sm\:from-deepBlue{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.sm\:from-deepBlue-active{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.sm\:from-gold{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.sm\:from-gold-active{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.sm\:from-grenadine{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.sm\:from-grenadine-active{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.sm\:from-kiwi{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.sm\:from-kiwi-active{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.sm\:from-lilas{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.sm\:from-lilas-active{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.sm\:from-mahogany{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.sm\:from-mahogany-active{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.sm\:from-ocher{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.sm\:from-ocher-active{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.sm\:from-pine{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.sm\:from-pine-active{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.sm\:from-platinum,.sm\:from-platinum-active{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.sm\:from-prune{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.sm\:from-prune-active{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.sm\:from-sand{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.sm\:from-sand-active{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.sm\:from-sandPearl{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.sm\:from-sandPearl-active{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.sm\:from-silver{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.sm\:from-silver-active{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.sm\:from-skyBlue{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.sm\:from-skyBlue-active{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.sm\:from-southSea{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.sm\:from-southSea-active{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.sm\:from-turquoise{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:from-turquoise-active{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.sm\:from-waterGreen{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.sm\:from-waterGreen-active{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.sm\:from-deepRed{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.sm\:from-deepRed-active{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.sm\:from-emerald{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.sm\:from-emerald-active{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.sm\:from-greenLight{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.sm\:from-orange-active{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.sm\:from-red-active{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.sm\:from-white-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:from-white-button,.sm\:from-white-button-active{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:from-code{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.sm\:from-code-active{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.sm\:from-gray-lighter{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.sm\:from-gray-lighter-active{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.sm\:from-gray-light{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.sm\:from-gray-medium{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.sm\:from-gray-darker{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.sm\:from-gray-darker-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:from-api-default{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.sm\:from-gray-xxl{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.sm\:from-line-even{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.sm\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.sm\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.sm\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.sm\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.sm\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.sm\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.sm\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.sm\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.sm\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.sm\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.sm\:via-gray,.sm\:via-gray-DEFAULT{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:via-red{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.sm\:via-orange{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.sm\:via-yellow{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.sm\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.sm\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.sm\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.sm\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.sm\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.sm\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.sm\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.sm\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.sm\:via-green,.sm\:via-green-DEFAULT{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.sm\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.sm\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.sm\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.sm\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.sm\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.sm\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.sm\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.sm\:via-teal,.sm\:via-teal-DEFAULT{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:via-blue-50{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.sm\:via-blue-100{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.sm\:via-blue-200{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.sm\:via-blue-300{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.sm\:via-blue-400{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.sm\:via-blue-500{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.sm\:via-blue-600{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:via-blue-700{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.sm\:via-blue-800{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.sm\:via-blue-900{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.sm\:via-blue,.sm\:via-blue-DEFAULT{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.sm\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.sm\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.sm\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.sm\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.sm\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.sm\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.sm\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.sm\:via-indigo,.sm\:via-indigo-DEFAULT{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.sm\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.sm\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.sm\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.sm\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.sm\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.sm\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.sm\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.sm\:via-purple,.sm\:via-purple-DEFAULT{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:via-pink{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.sm\:via-inherit{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:via-amber{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.sm\:via-amber-active{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.sm\:via-ardoise{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.sm\:via-ardoise-active{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.sm\:via-blue-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:via-lightBlue,.sm\:via-lightBlue-active{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.sm\:via-deepBlue{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.sm\:via-deepBlue-active{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.sm\:via-gold{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.sm\:via-gold-active{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.sm\:via-grenadine{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.sm\:via-grenadine-active{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.sm\:via-kiwi{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.sm\:via-kiwi-active{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.sm\:via-lilas{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.sm\:via-lilas-active{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.sm\:via-mahogany{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.sm\:via-mahogany-active{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.sm\:via-ocher{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.sm\:via-ocher-active{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.sm\:via-pine{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.sm\:via-pine-active{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.sm\:via-platinum,.sm\:via-platinum-active{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.sm\:via-prune{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.sm\:via-prune-active{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.sm\:via-sand{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.sm\:via-sand-active{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.sm\:via-sandPearl{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.sm\:via-sandPearl-active{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.sm\:via-silver{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.sm\:via-silver-active{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.sm\:via-skyBlue{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.sm\:via-skyBlue-active{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.sm\:via-southSea{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.sm\:via-southSea-active{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.sm\:via-turquoise{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:via-turquoise-active{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.sm\:via-waterGreen{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.sm\:via-waterGreen-active{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.sm\:via-deepRed{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.sm\:via-deepRed-active{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.sm\:via-emerald{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.sm\:via-emerald-active{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.sm\:via-greenLight{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.sm\:via-orange-active{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.sm\:via-red-active{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.sm\:via-white-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:via-white-button,.sm\:via-white-button-active{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:via-code{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.sm\:via-code-active{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.sm\:via-gray-lighter{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.sm\:via-gray-lighter-active{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.sm\:via-gray-light{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.sm\:via-gray-medium{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.sm\:via-gray-darker{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.sm\:via-gray-darker-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:via-api-default{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.sm\:via-gray-xxl{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.sm\:via-line-even{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.sm\:to-transparent{--gradient-to-color:transparent}.sm\:to-current{--gradient-to-color:currentColor}.sm\:to-black{--gradient-to-color:#000}.sm\:to-white{--gradient-to-color:#fff}.sm\:to-gray-100{--gradient-to-color:#f7fafc}.sm\:to-gray-200{--gradient-to-color:#edf2f7}.sm\:to-gray-300{--gradient-to-color:#e2e8f0}.sm\:to-gray-400{--gradient-to-color:#cbd5e0}.sm\:to-gray-500{--gradient-to-color:#a0aec0}.sm\:to-gray-600{--gradient-to-color:#718096}.sm\:to-gray-700{--gradient-to-color:#4a5568}.sm\:to-gray-800{--gradient-to-color:#2d3748}.sm\:to-gray-900{--gradient-to-color:#1a202c}.sm\:to-gray,.sm\:to-gray-DEFAULT{--gradient-to-color:#718096}.sm\:to-red{--gradient-to-color:#d64343}.sm\:to-orange{--gradient-to-color:#eb6437}.sm\:to-yellow{--gradient-to-color:#f8da30}.sm\:to-green-100{--gradient-to-color:#f0fff4}.sm\:to-green-200{--gradient-to-color:#c6f6d5}.sm\:to-green-300{--gradient-to-color:#9ae6b4}.sm\:to-green-400{--gradient-to-color:#68d391}.sm\:to-green-500{--gradient-to-color:#48bb78}.sm\:to-green-600{--gradient-to-color:#38a169}.sm\:to-green-700{--gradient-to-color:#2f855a}.sm\:to-green-800{--gradient-to-color:#276749}.sm\:to-green-900{--gradient-to-color:#22543d}.sm\:to-green,.sm\:to-green-DEFAULT{--gradient-to-color:#38a169}.sm\:to-teal-100{--gradient-to-color:#e6fffa}.sm\:to-teal-200{--gradient-to-color:#b2f5ea}.sm\:to-teal-300{--gradient-to-color:#81e6d9}.sm\:to-teal-400{--gradient-to-color:#4fd1c5}.sm\:to-teal-500{--gradient-to-color:#38b2ac}.sm\:to-teal-600{--gradient-to-color:#319795}.sm\:to-teal-700{--gradient-to-color:#2c7a7b}.sm\:to-teal-800{--gradient-to-color:#285e61}.sm\:to-teal-900{--gradient-to-color:#234e52}.sm\:to-teal,.sm\:to-teal-DEFAULT{--gradient-to-color:#319795}.sm\:to-blue-50{--gradient-to-color:#d1eaff}.sm\:to-blue-100{--gradient-to-color:#a8d7ff}.sm\:to-blue-200{--gradient-to-color:#80c4ff}.sm\:to-blue-300{--gradient-to-color:#57b0ff}.sm\:to-blue-400{--gradient-to-color:#2e9dff}.sm\:to-blue-500{--gradient-to-color:#058aff}.sm\:to-blue-600{--gradient-to-color:#0075db}.sm\:to-blue-700{--gradient-to-color:#005fb3}.sm\:to-blue-800{--gradient-to-color:#00498a}.sm\:to-blue-900{--gradient-to-color:#003461}.sm\:to-blue,.sm\:to-blue-DEFAULT{--gradient-to-color:#0075db}.sm\:to-indigo-100{--gradient-to-color:#ebf4ff}.sm\:to-indigo-200{--gradient-to-color:#c3dafe}.sm\:to-indigo-300{--gradient-to-color:#a3bffa}.sm\:to-indigo-400{--gradient-to-color:#7f9cf5}.sm\:to-indigo-500{--gradient-to-color:#667eea}.sm\:to-indigo-600{--gradient-to-color:#5a67d8}.sm\:to-indigo-700{--gradient-to-color:#4c51bf}.sm\:to-indigo-800{--gradient-to-color:#434190}.sm\:to-indigo-900{--gradient-to-color:#3c366b}.sm\:to-indigo,.sm\:to-indigo-DEFAULT{--gradient-to-color:#5a67d8}.sm\:to-purple-100{--gradient-to-color:#faf5ff}.sm\:to-purple-200{--gradient-to-color:#e9d8fd}.sm\:to-purple-300{--gradient-to-color:#d6bcfa}.sm\:to-purple-400{--gradient-to-color:#b794f4}.sm\:to-purple-500{--gradient-to-color:#9f7aea}.sm\:to-purple-600{--gradient-to-color:#805ad5}.sm\:to-purple-700{--gradient-to-color:#6b46c1}.sm\:to-purple-800{--gradient-to-color:#553c9a}.sm\:to-purple-900{--gradient-to-color:#44337a}.sm\:to-purple,.sm\:to-purple-DEFAULT{--gradient-to-color:#805ad5}.sm\:to-pink{--gradient-to-color:#d81b60}.sm\:to-inherit{--gradient-to-color:inherit}.sm\:to-amber{--gradient-to-color:#d78737}.sm\:to-amber-active{--gradient-to-color:#e3872b}.sm\:to-ardoise{--gradient-to-color:#596a82}.sm\:to-ardoise-active{--gradient-to-color:#476794}.sm\:to-blue-active{--gradient-to-color:#14a5c2}.sm\:to-lightBlue,.sm\:to-lightBlue-active{--gradient-to-color:rgba(0,85,138,0.1)}.sm\:to-deepBlue{--gradient-to-color:#0e346c}.sm\:to-deepBlue-active{--gradient-to-color:#0a3f8f}.sm\:to-gold{--gradient-to-color:#bd9e56}.sm\:to-gold-active{--gradient-to-color:#c9a34a}.sm\:to-grenadine{--gradient-to-color:#c35078}.sm\:to-grenadine-active{--gradient-to-color:#cf4475}.sm\:to-kiwi{--gradient-to-color:#9a9f1e}.sm\:to-kiwi-active{--gradient-to-color:#a3a815}.sm\:to-lilas{--gradient-to-color:#7ea1d3}.sm\:to-lilas-active{--gradient-to-color:#75a0db}.sm\:to-mahogany{--gradient-to-color:#57142e}.sm\:to-mahogany-active{--gradient-to-color:#610a2b}.sm\:to-ocher{--gradient-to-color:#c29614}.sm\:to-ocher-active{--gradient-to-color:#cd9c0a}.sm\:to-pine{--gradient-to-color:#144d52}.sm\:to-pine-active{--gradient-to-color:#0a555c}.sm\:to-platinum,.sm\:to-platinum-active{--gradient-to-color:#000}.sm\:to-prune{--gradient-to-color:#661456}.sm\:to-prune-active{--gradient-to-color:#72085d}.sm\:to-sand{--gradient-to-color:#d7be88}.sm\:to-sand-active{--gradient-to-color:#dfc181}.sm\:to-sandPearl{--gradient-to-color:#f0e5d6}.sm\:to-sandPearl-active{--gradient-to-color:#f2e6d4}.sm\:to-silver{--gradient-to-color:#b1b2b4}.sm\:to-silver-active{--gradient-to-color:#a9afbc}.sm\:to-skyBlue{--gradient-to-color:#98d2d7}.sm\:to-skyBlue-active{--gradient-to-color:#91d8de}.sm\:to-southSea{--gradient-to-color:#9dc9cd}.sm\:to-southSea-active{--gradient-to-color:#95ced5}.sm\:to-turquoise{--gradient-to-color:#14a5c2}.sm\:to-turquoise-active{--gradient-to-color:#0aaccd}.sm\:to-waterGreen{--gradient-to-color:#007571}.sm\:to-waterGreen-active{--gradient-to-color:#00a8a3}.sm\:to-deepRed{--gradient-to-color:#c32222}.sm\:to-deepRed-active{--gradient-to-color:#cf1717}.sm\:to-emerald{--gradient-to-color:#14a33a}.sm\:to-emerald-active{--gradient-to-color:#0bad36}.sm\:to-greenLight{--gradient-to-color:#7cb342}.sm\:to-orange-active{--gradient-to-color:#f65f2c}.sm\:to-red-active{--gradient-to-color:#e13737}.sm\:to-white-active{--gradient-to-color:#14a5c2}.sm\:to-white-button,.sm\:to-white-button-active{--gradient-to-color:#fff}.sm\:to-code{--gradient-to-color:#3f3d57}.sm\:to-code-active{--gradient-to-color:#37354b}.sm\:to-gray-lighter{--gradient-to-color:#f7f7f7}.sm\:to-gray-lighter-active{--gradient-to-color:#ebebeb}.sm\:to-gray-light{--gradient-to-color:#d4d1d1}.sm\:to-gray-medium{--gradient-to-color:#a8a0a0}.sm\:to-gray-darker{--gradient-to-color:#504747}.sm\:to-gray-darker-active{--gradient-to-color:#14a5c2}.sm\:to-api-default{--gradient-to-color:#507192}.sm\:to-gray-xxl{--gradient-to-color:#2c3e50}.sm\:to-line-even{--gradient-to-color:#f3f6f7}.sm\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.sm\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.sm\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.sm\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.sm\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.sm\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.sm\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.sm\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.sm\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.sm\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.sm\:hover\:from-gray-DEFAULT:hover,.sm\:hover\:from-gray:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:hover\:from-red:hover{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.sm\:hover\:from-orange:hover{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.sm\:hover\:from-yellow:hover{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.sm\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.sm\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.sm\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.sm\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.sm\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.sm\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.sm\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.sm\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.sm\:hover\:from-green-DEFAULT:hover,.sm\:hover\:from-green:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.sm\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.sm\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.sm\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.sm\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.sm\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.sm\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.sm\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.sm\:hover\:from-teal-DEFAULT:hover,.sm\:hover\:from-teal:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:hover\:from-blue-50:hover{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.sm\:hover\:from-blue-100:hover{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.sm\:hover\:from-blue-200:hover{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.sm\:hover\:from-blue-300:hover{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.sm\:hover\:from-blue-400:hover{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.sm\:hover\:from-blue-500:hover{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.sm\:hover\:from-blue-600:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:hover\:from-blue-700:hover{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.sm\:hover\:from-blue-800:hover{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.sm\:hover\:from-blue-900:hover{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.sm\:hover\:from-blue-DEFAULT:hover,.sm\:hover\:from-blue:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.sm\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.sm\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.sm\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.sm\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.sm\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.sm\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.sm\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.sm\:hover\:from-indigo-DEFAULT:hover,.sm\:hover\:from-indigo:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.sm\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.sm\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.sm\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.sm\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.sm\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.sm\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.sm\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.sm\:hover\:from-purple-DEFAULT:hover,.sm\:hover\:from-purple:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:hover\:from-pink:hover{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.sm\:hover\:from-inherit:hover{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:hover\:from-amber:hover{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.sm\:hover\:from-amber-active:hover{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.sm\:hover\:from-ardoise:hover{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.sm\:hover\:from-ardoise-active:hover{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.sm\:hover\:from-blue-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:hover\:from-lightBlue-active:hover,.sm\:hover\:from-lightBlue:hover{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.sm\:hover\:from-deepBlue:hover{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.sm\:hover\:from-deepBlue-active:hover{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.sm\:hover\:from-gold:hover{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.sm\:hover\:from-gold-active:hover{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.sm\:hover\:from-grenadine:hover{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.sm\:hover\:from-grenadine-active:hover{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.sm\:hover\:from-kiwi:hover{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.sm\:hover\:from-kiwi-active:hover{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.sm\:hover\:from-lilas:hover{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.sm\:hover\:from-lilas-active:hover{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.sm\:hover\:from-mahogany:hover{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.sm\:hover\:from-mahogany-active:hover{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.sm\:hover\:from-ocher:hover{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.sm\:hover\:from-ocher-active:hover{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.sm\:hover\:from-pine:hover{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.sm\:hover\:from-pine-active:hover{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.sm\:hover\:from-platinum-active:hover,.sm\:hover\:from-platinum:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.sm\:hover\:from-prune:hover{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.sm\:hover\:from-prune-active:hover{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.sm\:hover\:from-sand:hover{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.sm\:hover\:from-sand-active:hover{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.sm\:hover\:from-sandPearl:hover{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.sm\:hover\:from-sandPearl-active:hover{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.sm\:hover\:from-silver:hover{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.sm\:hover\:from-silver-active:hover{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.sm\:hover\:from-skyBlue:hover{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.sm\:hover\:from-skyBlue-active:hover{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.sm\:hover\:from-southSea:hover{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.sm\:hover\:from-southSea-active:hover{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.sm\:hover\:from-turquoise:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:hover\:from-turquoise-active:hover{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.sm\:hover\:from-waterGreen:hover{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.sm\:hover\:from-waterGreen-active:hover{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.sm\:hover\:from-deepRed:hover{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.sm\:hover\:from-deepRed-active:hover{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.sm\:hover\:from-emerald:hover{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.sm\:hover\:from-emerald-active:hover{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.sm\:hover\:from-greenLight:hover{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.sm\:hover\:from-orange-active:hover{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.sm\:hover\:from-red-active:hover{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.sm\:hover\:from-white-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:hover\:from-white-button-active:hover,.sm\:hover\:from-white-button:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:hover\:from-code:hover{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.sm\:hover\:from-code-active:hover{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.sm\:hover\:from-gray-lighter:hover{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.sm\:hover\:from-gray-lighter-active:hover{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.sm\:hover\:from-gray-light:hover{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.sm\:hover\:from-gray-medium:hover{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.sm\:hover\:from-gray-darker:hover{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.sm\:hover\:from-gray-darker-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:hover\:from-api-default:hover{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.sm\:hover\:from-gray-xxl:hover{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.sm\:hover\:from-line-even:hover{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.sm\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.sm\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.sm\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.sm\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.sm\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.sm\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.sm\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.sm\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.sm\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.sm\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.sm\:hover\:via-gray-DEFAULT:hover,.sm\:hover\:via-gray:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:hover\:via-red:hover{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.sm\:hover\:via-orange:hover{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.sm\:hover\:via-yellow:hover{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.sm\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.sm\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.sm\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.sm\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.sm\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.sm\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.sm\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.sm\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.sm\:hover\:via-green-DEFAULT:hover,.sm\:hover\:via-green:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.sm\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.sm\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.sm\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.sm\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.sm\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.sm\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.sm\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.sm\:hover\:via-teal-DEFAULT:hover,.sm\:hover\:via-teal:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:hover\:via-blue-50:hover{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.sm\:hover\:via-blue-100:hover{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.sm\:hover\:via-blue-200:hover{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.sm\:hover\:via-blue-300:hover{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.sm\:hover\:via-blue-400:hover{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.sm\:hover\:via-blue-500:hover{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.sm\:hover\:via-blue-600:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:hover\:via-blue-700:hover{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.sm\:hover\:via-blue-800:hover{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.sm\:hover\:via-blue-900:hover{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.sm\:hover\:via-blue-DEFAULT:hover,.sm\:hover\:via-blue:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.sm\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.sm\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.sm\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.sm\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.sm\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.sm\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.sm\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.sm\:hover\:via-indigo-DEFAULT:hover,.sm\:hover\:via-indigo:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.sm\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.sm\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.sm\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.sm\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.sm\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.sm\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.sm\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.sm\:hover\:via-purple-DEFAULT:hover,.sm\:hover\:via-purple:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:hover\:via-pink:hover{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.sm\:hover\:via-inherit:hover{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:hover\:via-amber:hover{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.sm\:hover\:via-amber-active:hover{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.sm\:hover\:via-ardoise:hover{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.sm\:hover\:via-ardoise-active:hover{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.sm\:hover\:via-blue-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:hover\:via-lightBlue-active:hover,.sm\:hover\:via-lightBlue:hover{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.sm\:hover\:via-deepBlue:hover{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.sm\:hover\:via-deepBlue-active:hover{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.sm\:hover\:via-gold:hover{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.sm\:hover\:via-gold-active:hover{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.sm\:hover\:via-grenadine:hover{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.sm\:hover\:via-grenadine-active:hover{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.sm\:hover\:via-kiwi:hover{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.sm\:hover\:via-kiwi-active:hover{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.sm\:hover\:via-lilas:hover{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.sm\:hover\:via-lilas-active:hover{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.sm\:hover\:via-mahogany:hover{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.sm\:hover\:via-mahogany-active:hover{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.sm\:hover\:via-ocher:hover{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.sm\:hover\:via-ocher-active:hover{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.sm\:hover\:via-pine:hover{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.sm\:hover\:via-pine-active:hover{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.sm\:hover\:via-platinum-active:hover,.sm\:hover\:via-platinum:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.sm\:hover\:via-prune:hover{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.sm\:hover\:via-prune-active:hover{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.sm\:hover\:via-sand:hover{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.sm\:hover\:via-sand-active:hover{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.sm\:hover\:via-sandPearl:hover{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.sm\:hover\:via-sandPearl-active:hover{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.sm\:hover\:via-silver:hover{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.sm\:hover\:via-silver-active:hover{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.sm\:hover\:via-skyBlue:hover{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.sm\:hover\:via-skyBlue-active:hover{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.sm\:hover\:via-southSea:hover{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.sm\:hover\:via-southSea-active:hover{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.sm\:hover\:via-turquoise:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:hover\:via-turquoise-active:hover{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.sm\:hover\:via-waterGreen:hover{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.sm\:hover\:via-waterGreen-active:hover{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.sm\:hover\:via-deepRed:hover{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.sm\:hover\:via-deepRed-active:hover{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.sm\:hover\:via-emerald:hover{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.sm\:hover\:via-emerald-active:hover{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.sm\:hover\:via-greenLight:hover{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.sm\:hover\:via-orange-active:hover{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.sm\:hover\:via-red-active:hover{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.sm\:hover\:via-white-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:hover\:via-white-button-active:hover,.sm\:hover\:via-white-button:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:hover\:via-code:hover{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.sm\:hover\:via-code-active:hover{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.sm\:hover\:via-gray-lighter:hover{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.sm\:hover\:via-gray-lighter-active:hover{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.sm\:hover\:via-gray-light:hover{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.sm\:hover\:via-gray-medium:hover{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.sm\:hover\:via-gray-darker:hover{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.sm\:hover\:via-gray-darker-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:hover\:via-api-default:hover{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.sm\:hover\:via-gray-xxl:hover{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.sm\:hover\:via-line-even:hover{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.sm\:hover\:to-transparent:hover{--gradient-to-color:transparent}.sm\:hover\:to-current:hover{--gradient-to-color:currentColor}.sm\:hover\:to-black:hover{--gradient-to-color:#000}.sm\:hover\:to-white:hover{--gradient-to-color:#fff}.sm\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.sm\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.sm\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.sm\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.sm\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.sm\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.sm\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.sm\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.sm\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.sm\:hover\:to-gray-DEFAULT:hover,.sm\:hover\:to-gray:hover{--gradient-to-color:#718096}.sm\:hover\:to-red:hover{--gradient-to-color:#d64343}.sm\:hover\:to-orange:hover{--gradient-to-color:#eb6437}.sm\:hover\:to-yellow:hover{--gradient-to-color:#f8da30}.sm\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.sm\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.sm\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.sm\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.sm\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.sm\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.sm\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.sm\:hover\:to-green-800:hover{--gradient-to-color:#276749}.sm\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.sm\:hover\:to-green-DEFAULT:hover,.sm\:hover\:to-green:hover{--gradient-to-color:#38a169}.sm\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.sm\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.sm\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.sm\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.sm\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.sm\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.sm\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.sm\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.sm\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.sm\:hover\:to-teal-DEFAULT:hover,.sm\:hover\:to-teal:hover{--gradient-to-color:#319795}.sm\:hover\:to-blue-50:hover{--gradient-to-color:#d1eaff}.sm\:hover\:to-blue-100:hover{--gradient-to-color:#a8d7ff}.sm\:hover\:to-blue-200:hover{--gradient-to-color:#80c4ff}.sm\:hover\:to-blue-300:hover{--gradient-to-color:#57b0ff}.sm\:hover\:to-blue-400:hover{--gradient-to-color:#2e9dff}.sm\:hover\:to-blue-500:hover{--gradient-to-color:#058aff}.sm\:hover\:to-blue-600:hover{--gradient-to-color:#0075db}.sm\:hover\:to-blue-700:hover{--gradient-to-color:#005fb3}.sm\:hover\:to-blue-800:hover{--gradient-to-color:#00498a}.sm\:hover\:to-blue-900:hover{--gradient-to-color:#003461}.sm\:hover\:to-blue-DEFAULT:hover,.sm\:hover\:to-blue:hover{--gradient-to-color:#0075db}.sm\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.sm\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.sm\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.sm\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.sm\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.sm\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.sm\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.sm\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.sm\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.sm\:hover\:to-indigo-DEFAULT:hover,.sm\:hover\:to-indigo:hover{--gradient-to-color:#5a67d8}.sm\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.sm\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.sm\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.sm\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.sm\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.sm\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.sm\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.sm\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.sm\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.sm\:hover\:to-purple-DEFAULT:hover,.sm\:hover\:to-purple:hover{--gradient-to-color:#805ad5}.sm\:hover\:to-pink:hover{--gradient-to-color:#d81b60}.sm\:hover\:to-inherit:hover{--gradient-to-color:inherit}.sm\:hover\:to-amber:hover{--gradient-to-color:#d78737}.sm\:hover\:to-amber-active:hover{--gradient-to-color:#e3872b}.sm\:hover\:to-ardoise:hover{--gradient-to-color:#596a82}.sm\:hover\:to-ardoise-active:hover{--gradient-to-color:#476794}.sm\:hover\:to-blue-active:hover{--gradient-to-color:#14a5c2}.sm\:hover\:to-lightBlue-active:hover,.sm\:hover\:to-lightBlue:hover{--gradient-to-color:rgba(0,85,138,0.1)}.sm\:hover\:to-deepBlue:hover{--gradient-to-color:#0e346c}.sm\:hover\:to-deepBlue-active:hover{--gradient-to-color:#0a3f8f}.sm\:hover\:to-gold:hover{--gradient-to-color:#bd9e56}.sm\:hover\:to-gold-active:hover{--gradient-to-color:#c9a34a}.sm\:hover\:to-grenadine:hover{--gradient-to-color:#c35078}.sm\:hover\:to-grenadine-active:hover{--gradient-to-color:#cf4475}.sm\:hover\:to-kiwi:hover{--gradient-to-color:#9a9f1e}.sm\:hover\:to-kiwi-active:hover{--gradient-to-color:#a3a815}.sm\:hover\:to-lilas:hover{--gradient-to-color:#7ea1d3}.sm\:hover\:to-lilas-active:hover{--gradient-to-color:#75a0db}.sm\:hover\:to-mahogany:hover{--gradient-to-color:#57142e}.sm\:hover\:to-mahogany-active:hover{--gradient-to-color:#610a2b}.sm\:hover\:to-ocher:hover{--gradient-to-color:#c29614}.sm\:hover\:to-ocher-active:hover{--gradient-to-color:#cd9c0a}.sm\:hover\:to-pine:hover{--gradient-to-color:#144d52}.sm\:hover\:to-pine-active:hover{--gradient-to-color:#0a555c}.sm\:hover\:to-platinum-active:hover,.sm\:hover\:to-platinum:hover{--gradient-to-color:#000}.sm\:hover\:to-prune:hover{--gradient-to-color:#661456}.sm\:hover\:to-prune-active:hover{--gradient-to-color:#72085d}.sm\:hover\:to-sand:hover{--gradient-to-color:#d7be88}.sm\:hover\:to-sand-active:hover{--gradient-to-color:#dfc181}.sm\:hover\:to-sandPearl:hover{--gradient-to-color:#f0e5d6}.sm\:hover\:to-sandPearl-active:hover{--gradient-to-color:#f2e6d4}.sm\:hover\:to-silver:hover{--gradient-to-color:#b1b2b4}.sm\:hover\:to-silver-active:hover{--gradient-to-color:#a9afbc}.sm\:hover\:to-skyBlue:hover{--gradient-to-color:#98d2d7}.sm\:hover\:to-skyBlue-active:hover{--gradient-to-color:#91d8de}.sm\:hover\:to-southSea:hover{--gradient-to-color:#9dc9cd}.sm\:hover\:to-southSea-active:hover{--gradient-to-color:#95ced5}.sm\:hover\:to-turquoise:hover{--gradient-to-color:#14a5c2}.sm\:hover\:to-turquoise-active:hover{--gradient-to-color:#0aaccd}.sm\:hover\:to-waterGreen:hover{--gradient-to-color:#007571}.sm\:hover\:to-waterGreen-active:hover{--gradient-to-color:#00a8a3}.sm\:hover\:to-deepRed:hover{--gradient-to-color:#c32222}.sm\:hover\:to-deepRed-active:hover{--gradient-to-color:#cf1717}.sm\:hover\:to-emerald:hover{--gradient-to-color:#14a33a}.sm\:hover\:to-emerald-active:hover{--gradient-to-color:#0bad36}.sm\:hover\:to-greenLight:hover{--gradient-to-color:#7cb342}.sm\:hover\:to-orange-active:hover{--gradient-to-color:#f65f2c}.sm\:hover\:to-red-active:hover{--gradient-to-color:#e13737}.sm\:hover\:to-white-active:hover{--gradient-to-color:#14a5c2}.sm\:hover\:to-white-button-active:hover,.sm\:hover\:to-white-button:hover{--gradient-to-color:#fff}.sm\:hover\:to-code:hover{--gradient-to-color:#3f3d57}.sm\:hover\:to-code-active:hover{--gradient-to-color:#37354b}.sm\:hover\:to-gray-lighter:hover{--gradient-to-color:#f7f7f7}.sm\:hover\:to-gray-lighter-active:hover{--gradient-to-color:#ebebeb}.sm\:hover\:to-gray-light:hover{--gradient-to-color:#d4d1d1}.sm\:hover\:to-gray-medium:hover{--gradient-to-color:#a8a0a0}.sm\:hover\:to-gray-darker:hover{--gradient-to-color:#504747}.sm\:hover\:to-gray-darker-active:hover{--gradient-to-color:#14a5c2}.sm\:hover\:to-api-default:hover{--gradient-to-color:#507192}.sm\:hover\:to-gray-xxl:hover{--gradient-to-color:#2c3e50}.sm\:hover\:to-line-even:hover{--gradient-to-color:#f3f6f7}.sm\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.sm\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.sm\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.sm\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.sm\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.sm\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.sm\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.sm\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.sm\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.sm\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.sm\:focus\:from-gray-DEFAULT:focus,.sm\:focus\:from-gray:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:focus\:from-red:focus{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.sm\:focus\:from-orange:focus{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.sm\:focus\:from-yellow:focus{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.sm\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.sm\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.sm\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.sm\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.sm\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.sm\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.sm\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.sm\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.sm\:focus\:from-green-DEFAULT:focus,.sm\:focus\:from-green:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.sm\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.sm\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.sm\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.sm\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.sm\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.sm\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.sm\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.sm\:focus\:from-teal-DEFAULT:focus,.sm\:focus\:from-teal:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:focus\:from-blue-50:focus{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.sm\:focus\:from-blue-100:focus{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.sm\:focus\:from-blue-200:focus{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.sm\:focus\:from-blue-300:focus{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.sm\:focus\:from-blue-400:focus{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.sm\:focus\:from-blue-500:focus{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.sm\:focus\:from-blue-600:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:focus\:from-blue-700:focus{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.sm\:focus\:from-blue-800:focus{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.sm\:focus\:from-blue-900:focus{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.sm\:focus\:from-blue-DEFAULT:focus,.sm\:focus\:from-blue:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.sm\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.sm\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.sm\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.sm\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.sm\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.sm\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.sm\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.sm\:focus\:from-indigo-DEFAULT:focus,.sm\:focus\:from-indigo:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.sm\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.sm\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.sm\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.sm\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.sm\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.sm\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.sm\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.sm\:focus\:from-purple-DEFAULT:focus,.sm\:focus\:from-purple:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:focus\:from-pink:focus{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.sm\:focus\:from-inherit:focus{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:focus\:from-amber:focus{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.sm\:focus\:from-amber-active:focus{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.sm\:focus\:from-ardoise:focus{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.sm\:focus\:from-ardoise-active:focus{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.sm\:focus\:from-blue-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:focus\:from-lightBlue-active:focus,.sm\:focus\:from-lightBlue:focus{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.sm\:focus\:from-deepBlue:focus{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.sm\:focus\:from-deepBlue-active:focus{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.sm\:focus\:from-gold:focus{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.sm\:focus\:from-gold-active:focus{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.sm\:focus\:from-grenadine:focus{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.sm\:focus\:from-grenadine-active:focus{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.sm\:focus\:from-kiwi:focus{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.sm\:focus\:from-kiwi-active:focus{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.sm\:focus\:from-lilas:focus{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.sm\:focus\:from-lilas-active:focus{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.sm\:focus\:from-mahogany:focus{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.sm\:focus\:from-mahogany-active:focus{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.sm\:focus\:from-ocher:focus{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.sm\:focus\:from-ocher-active:focus{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.sm\:focus\:from-pine:focus{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.sm\:focus\:from-pine-active:focus{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.sm\:focus\:from-platinum-active:focus,.sm\:focus\:from-platinum:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.sm\:focus\:from-prune:focus{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.sm\:focus\:from-prune-active:focus{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.sm\:focus\:from-sand:focus{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.sm\:focus\:from-sand-active:focus{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.sm\:focus\:from-sandPearl:focus{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.sm\:focus\:from-sandPearl-active:focus{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.sm\:focus\:from-silver:focus{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.sm\:focus\:from-silver-active:focus{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.sm\:focus\:from-skyBlue:focus{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.sm\:focus\:from-skyBlue-active:focus{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.sm\:focus\:from-southSea:focus{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.sm\:focus\:from-southSea-active:focus{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.sm\:focus\:from-turquoise:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:focus\:from-turquoise-active:focus{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.sm\:focus\:from-waterGreen:focus{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.sm\:focus\:from-waterGreen-active:focus{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.sm\:focus\:from-deepRed:focus{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.sm\:focus\:from-deepRed-active:focus{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.sm\:focus\:from-emerald:focus{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.sm\:focus\:from-emerald-active:focus{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.sm\:focus\:from-greenLight:focus{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.sm\:focus\:from-orange-active:focus{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.sm\:focus\:from-red-active:focus{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.sm\:focus\:from-white-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:focus\:from-white-button-active:focus,.sm\:focus\:from-white-button:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:focus\:from-code:focus{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.sm\:focus\:from-code-active:focus{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.sm\:focus\:from-gray-lighter:focus{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.sm\:focus\:from-gray-lighter-active:focus{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.sm\:focus\:from-gray-light:focus{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.sm\:focus\:from-gray-medium:focus{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.sm\:focus\:from-gray-darker:focus{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.sm\:focus\:from-gray-darker-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:focus\:from-api-default:focus{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.sm\:focus\:from-gray-xxl:focus{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.sm\:focus\:from-line-even:focus{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.sm\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.sm\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.sm\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.sm\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.sm\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.sm\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.sm\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.sm\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.sm\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.sm\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.sm\:focus\:via-gray-DEFAULT:focus,.sm\:focus\:via-gray:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.sm\:focus\:via-red:focus{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.sm\:focus\:via-orange:focus{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.sm\:focus\:via-yellow:focus{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.sm\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.sm\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.sm\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.sm\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.sm\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.sm\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.sm\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.sm\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.sm\:focus\:via-green-DEFAULT:focus,.sm\:focus\:via-green:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.sm\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.sm\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.sm\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.sm\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.sm\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.sm\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.sm\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.sm\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.sm\:focus\:via-teal-DEFAULT:focus,.sm\:focus\:via-teal:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.sm\:focus\:via-blue-50:focus{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.sm\:focus\:via-blue-100:focus{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.sm\:focus\:via-blue-200:focus{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.sm\:focus\:via-blue-300:focus{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.sm\:focus\:via-blue-400:focus{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.sm\:focus\:via-blue-500:focus{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.sm\:focus\:via-blue-600:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:focus\:via-blue-700:focus{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.sm\:focus\:via-blue-800:focus{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.sm\:focus\:via-blue-900:focus{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.sm\:focus\:via-blue-DEFAULT:focus,.sm\:focus\:via-blue:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.sm\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.sm\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.sm\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.sm\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.sm\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.sm\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.sm\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.sm\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.sm\:focus\:via-indigo-DEFAULT:focus,.sm\:focus\:via-indigo:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.sm\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.sm\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.sm\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.sm\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.sm\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.sm\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.sm\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.sm\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.sm\:focus\:via-purple-DEFAULT:focus,.sm\:focus\:via-purple:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.sm\:focus\:via-pink:focus{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.sm\:focus\:via-inherit:focus{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:focus\:via-amber:focus{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.sm\:focus\:via-amber-active:focus{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.sm\:focus\:via-ardoise:focus{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.sm\:focus\:via-ardoise-active:focus{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.sm\:focus\:via-blue-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:focus\:via-lightBlue-active:focus,.sm\:focus\:via-lightBlue:focus{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.sm\:focus\:via-deepBlue:focus{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.sm\:focus\:via-deepBlue-active:focus{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.sm\:focus\:via-gold:focus{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.sm\:focus\:via-gold-active:focus{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.sm\:focus\:via-grenadine:focus{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.sm\:focus\:via-grenadine-active:focus{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.sm\:focus\:via-kiwi:focus{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.sm\:focus\:via-kiwi-active:focus{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.sm\:focus\:via-lilas:focus{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.sm\:focus\:via-lilas-active:focus{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.sm\:focus\:via-mahogany:focus{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.sm\:focus\:via-mahogany-active:focus{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.sm\:focus\:via-ocher:focus{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.sm\:focus\:via-ocher-active:focus{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.sm\:focus\:via-pine:focus{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.sm\:focus\:via-pine-active:focus{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.sm\:focus\:via-platinum-active:focus,.sm\:focus\:via-platinum:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.sm\:focus\:via-prune:focus{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.sm\:focus\:via-prune-active:focus{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.sm\:focus\:via-sand:focus{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.sm\:focus\:via-sand-active:focus{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.sm\:focus\:via-sandPearl:focus{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.sm\:focus\:via-sandPearl-active:focus{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.sm\:focus\:via-silver:focus{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.sm\:focus\:via-silver-active:focus{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.sm\:focus\:via-skyBlue:focus{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.sm\:focus\:via-skyBlue-active:focus{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.sm\:focus\:via-southSea:focus{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.sm\:focus\:via-southSea-active:focus{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.sm\:focus\:via-turquoise:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:focus\:via-turquoise-active:focus{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.sm\:focus\:via-waterGreen:focus{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.sm\:focus\:via-waterGreen-active:focus{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.sm\:focus\:via-deepRed:focus{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.sm\:focus\:via-deepRed-active:focus{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.sm\:focus\:via-emerald:focus{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.sm\:focus\:via-emerald-active:focus{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.sm\:focus\:via-greenLight:focus{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.sm\:focus\:via-orange-active:focus{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.sm\:focus\:via-red-active:focus{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.sm\:focus\:via-white-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:focus\:via-white-button-active:focus,.sm\:focus\:via-white-button:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.sm\:focus\:via-code:focus{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.sm\:focus\:via-code-active:focus{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.sm\:focus\:via-gray-lighter:focus{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.sm\:focus\:via-gray-lighter-active:focus{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.sm\:focus\:via-gray-light:focus{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.sm\:focus\:via-gray-medium:focus{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.sm\:focus\:via-gray-darker:focus{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.sm\:focus\:via-gray-darker-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.sm\:focus\:via-api-default:focus{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.sm\:focus\:via-gray-xxl:focus{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.sm\:focus\:via-line-even:focus{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.sm\:focus\:to-transparent:focus{--gradient-to-color:transparent}.sm\:focus\:to-current:focus{--gradient-to-color:currentColor}.sm\:focus\:to-black:focus{--gradient-to-color:#000}.sm\:focus\:to-white:focus{--gradient-to-color:#fff}.sm\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.sm\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.sm\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.sm\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.sm\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.sm\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.sm\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.sm\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.sm\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.sm\:focus\:to-gray-DEFAULT:focus,.sm\:focus\:to-gray:focus{--gradient-to-color:#718096}.sm\:focus\:to-red:focus{--gradient-to-color:#d64343}.sm\:focus\:to-orange:focus{--gradient-to-color:#eb6437}.sm\:focus\:to-yellow:focus{--gradient-to-color:#f8da30}.sm\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.sm\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.sm\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.sm\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.sm\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.sm\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.sm\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.sm\:focus\:to-green-800:focus{--gradient-to-color:#276749}.sm\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.sm\:focus\:to-green-DEFAULT:focus,.sm\:focus\:to-green:focus{--gradient-to-color:#38a169}.sm\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.sm\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.sm\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.sm\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.sm\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.sm\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.sm\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.sm\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.sm\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.sm\:focus\:to-teal-DEFAULT:focus,.sm\:focus\:to-teal:focus{--gradient-to-color:#319795}.sm\:focus\:to-blue-50:focus{--gradient-to-color:#d1eaff}.sm\:focus\:to-blue-100:focus{--gradient-to-color:#a8d7ff}.sm\:focus\:to-blue-200:focus{--gradient-to-color:#80c4ff}.sm\:focus\:to-blue-300:focus{--gradient-to-color:#57b0ff}.sm\:focus\:to-blue-400:focus{--gradient-to-color:#2e9dff}.sm\:focus\:to-blue-500:focus{--gradient-to-color:#058aff}.sm\:focus\:to-blue-600:focus{--gradient-to-color:#0075db}.sm\:focus\:to-blue-700:focus{--gradient-to-color:#005fb3}.sm\:focus\:to-blue-800:focus{--gradient-to-color:#00498a}.sm\:focus\:to-blue-900:focus{--gradient-to-color:#003461}.sm\:focus\:to-blue-DEFAULT:focus,.sm\:focus\:to-blue:focus{--gradient-to-color:#0075db}.sm\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.sm\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.sm\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.sm\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.sm\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.sm\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.sm\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.sm\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.sm\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.sm\:focus\:to-indigo-DEFAULT:focus,.sm\:focus\:to-indigo:focus{--gradient-to-color:#5a67d8}.sm\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.sm\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.sm\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.sm\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.sm\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.sm\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.sm\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.sm\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.sm\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.sm\:focus\:to-purple-DEFAULT:focus,.sm\:focus\:to-purple:focus{--gradient-to-color:#805ad5}.sm\:focus\:to-pink:focus{--gradient-to-color:#d81b60}.sm\:focus\:to-inherit:focus{--gradient-to-color:inherit}.sm\:focus\:to-amber:focus{--gradient-to-color:#d78737}.sm\:focus\:to-amber-active:focus{--gradient-to-color:#e3872b}.sm\:focus\:to-ardoise:focus{--gradient-to-color:#596a82}.sm\:focus\:to-ardoise-active:focus{--gradient-to-color:#476794}.sm\:focus\:to-blue-active:focus{--gradient-to-color:#14a5c2}.sm\:focus\:to-lightBlue-active:focus,.sm\:focus\:to-lightBlue:focus{--gradient-to-color:rgba(0,85,138,0.1)}.sm\:focus\:to-deepBlue:focus{--gradient-to-color:#0e346c}.sm\:focus\:to-deepBlue-active:focus{--gradient-to-color:#0a3f8f}.sm\:focus\:to-gold:focus{--gradient-to-color:#bd9e56}.sm\:focus\:to-gold-active:focus{--gradient-to-color:#c9a34a}.sm\:focus\:to-grenadine:focus{--gradient-to-color:#c35078}.sm\:focus\:to-grenadine-active:focus{--gradient-to-color:#cf4475}.sm\:focus\:to-kiwi:focus{--gradient-to-color:#9a9f1e}.sm\:focus\:to-kiwi-active:focus{--gradient-to-color:#a3a815}.sm\:focus\:to-lilas:focus{--gradient-to-color:#7ea1d3}.sm\:focus\:to-lilas-active:focus{--gradient-to-color:#75a0db}.sm\:focus\:to-mahogany:focus{--gradient-to-color:#57142e}.sm\:focus\:to-mahogany-active:focus{--gradient-to-color:#610a2b}.sm\:focus\:to-ocher:focus{--gradient-to-color:#c29614}.sm\:focus\:to-ocher-active:focus{--gradient-to-color:#cd9c0a}.sm\:focus\:to-pine:focus{--gradient-to-color:#144d52}.sm\:focus\:to-pine-active:focus{--gradient-to-color:#0a555c}.sm\:focus\:to-platinum-active:focus,.sm\:focus\:to-platinum:focus{--gradient-to-color:#000}.sm\:focus\:to-prune:focus{--gradient-to-color:#661456}.sm\:focus\:to-prune-active:focus{--gradient-to-color:#72085d}.sm\:focus\:to-sand:focus{--gradient-to-color:#d7be88}.sm\:focus\:to-sand-active:focus{--gradient-to-color:#dfc181}.sm\:focus\:to-sandPearl:focus{--gradient-to-color:#f0e5d6}.sm\:focus\:to-sandPearl-active:focus{--gradient-to-color:#f2e6d4}.sm\:focus\:to-silver:focus{--gradient-to-color:#b1b2b4}.sm\:focus\:to-silver-active:focus{--gradient-to-color:#a9afbc}.sm\:focus\:to-skyBlue:focus{--gradient-to-color:#98d2d7}.sm\:focus\:to-skyBlue-active:focus{--gradient-to-color:#91d8de}.sm\:focus\:to-southSea:focus{--gradient-to-color:#9dc9cd}.sm\:focus\:to-southSea-active:focus{--gradient-to-color:#95ced5}.sm\:focus\:to-turquoise:focus{--gradient-to-color:#14a5c2}.sm\:focus\:to-turquoise-active:focus{--gradient-to-color:#0aaccd}.sm\:focus\:to-waterGreen:focus{--gradient-to-color:#007571}.sm\:focus\:to-waterGreen-active:focus{--gradient-to-color:#00a8a3}.sm\:focus\:to-deepRed:focus{--gradient-to-color:#c32222}.sm\:focus\:to-deepRed-active:focus{--gradient-to-color:#cf1717}.sm\:focus\:to-emerald:focus{--gradient-to-color:#14a33a}.sm\:focus\:to-emerald-active:focus{--gradient-to-color:#0bad36}.sm\:focus\:to-greenLight:focus{--gradient-to-color:#7cb342}.sm\:focus\:to-orange-active:focus{--gradient-to-color:#f65f2c}.sm\:focus\:to-red-active:focus{--gradient-to-color:#e13737}.sm\:focus\:to-white-active:focus{--gradient-to-color:#14a5c2}.sm\:focus\:to-white-button-active:focus,.sm\:focus\:to-white-button:focus{--gradient-to-color:#fff}.sm\:focus\:to-code:focus{--gradient-to-color:#3f3d57}.sm\:focus\:to-code-active:focus{--gradient-to-color:#37354b}.sm\:focus\:to-gray-lighter:focus{--gradient-to-color:#f7f7f7}.sm\:focus\:to-gray-lighter-active:focus{--gradient-to-color:#ebebeb}.sm\:focus\:to-gray-light:focus{--gradient-to-color:#d4d1d1}.sm\:focus\:to-gray-medium:focus{--gradient-to-color:#a8a0a0}.sm\:focus\:to-gray-darker:focus{--gradient-to-color:#504747}.sm\:focus\:to-gray-darker-active:focus{--gradient-to-color:#14a5c2}.sm\:focus\:to-api-default:focus{--gradient-to-color:#507192}.sm\:focus\:to-gray-xxl:focus{--gradient-to-color:#2c3e50}.sm\:focus\:to-line-even:focus{--gradient-to-color:#f3f6f7}.sm\:bg-opacity-0{--bg-opacity:0}.sm\:bg-opacity-25{--bg-opacity:0.25}.sm\:bg-opacity-50{--bg-opacity:0.5}.sm\:bg-opacity-75{--bg-opacity:0.75}.sm\:bg-opacity-100{--bg-opacity:1}.sm\:hover\:bg-opacity-0:hover{--bg-opacity:0}.sm\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.sm\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.sm\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.sm\:hover\:bg-opacity-100:hover{--bg-opacity:1}.sm\:focus\:bg-opacity-0:focus{--bg-opacity:0}.sm\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.sm\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.sm\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.sm\:focus\:bg-opacity-100:focus{--bg-opacity:1}.sm\:bg-bottom{background-position:bottom}.sm\:bg-center{background-position:50%}.sm\:bg-left{background-position:0}.sm\:bg-left-bottom{background-position:0 100%}.sm\:bg-left-top{background-position:0 0}.sm\:bg-right{background-position:100%}.sm\:bg-right-bottom{background-position:100% 100%}.sm\:bg-right-top{background-position:100% 0}.sm\:bg-top{background-position:top}.sm\:bg-repeat{background-repeat:repeat}.sm\:bg-no-repeat{background-repeat:no-repeat}.sm\:bg-repeat-x{background-repeat:repeat-x}.sm\:bg-repeat-y{background-repeat:repeat-y}.sm\:bg-repeat-round{background-repeat:round}.sm\:bg-repeat-space{background-repeat:space}.sm\:bg-auto{background-size:auto}.sm\:bg-cover{background-size:cover}.sm\:bg-contain{background-size:contain}.sm\:border-collapse{border-collapse:collapse}.sm\:border-separate{border-collapse:separate}.sm\:border-transparent{border-color:transparent}.sm\:border-current{border-color:currentColor}.sm\:border-black{border-color:#000}.sm\:border-white{border-color:#fff}.sm\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.sm\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.sm\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.sm\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.sm\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.sm\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.sm\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.sm\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.sm\:border-gray,.sm\:border-gray-DEFAULT{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:border-red{border-color:#d64343}.sm\:border-orange{border-color:#eb6437}.sm\:border-yellow{border-color:#f8da30}.sm\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.sm\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.sm\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.sm\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.sm\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.sm\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.sm\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.sm\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.sm\:border-green,.sm\:border-green-DEFAULT{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.sm\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.sm\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.sm\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.sm\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.sm\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.sm\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.sm\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.sm\:border-teal,.sm\:border-teal-DEFAULT{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:border-blue-50{border-color:#d1eaff}.sm\:border-blue-100{border-color:#a8d7ff}.sm\:border-blue-200{border-color:#80c4ff}.sm\:border-blue-300{border-color:#57b0ff}.sm\:border-blue-400{border-color:#2e9dff}.sm\:border-blue-500{border-color:#058aff}.sm\:border-blue-600{border-color:#0075db}.sm\:border-blue-700{border-color:#005fb3}.sm\:border-blue-800{border-color:#00498a}.sm\:border-blue-900{border-color:#003461}.sm\:border-blue,.sm\:border-blue-DEFAULT{border-color:#0075db}.sm\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.sm\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.sm\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.sm\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.sm\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.sm\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.sm\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.sm\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.sm\:border-indigo,.sm\:border-indigo-DEFAULT{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.sm\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.sm\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.sm\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.sm\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.sm\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.sm\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.sm\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.sm\:border-purple,.sm\:border-purple-DEFAULT{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:border-pink{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.sm\:border-inherit{border-color:inherit}.sm\:border-amber{border-color:#d78737}.sm\:border-amber-active{border-color:#e3872b}.sm\:border-ardoise{border-color:#596a82}.sm\:border-ardoise-active{border-color:#476794}.sm\:border-blue-active{border-color:#14a5c2}.sm\:border-lightBlue,.sm\:border-lightBlue-active{border-color:rgba(0,85,138,.1)}.sm\:border-deepBlue{border-color:#0e346c}.sm\:border-deepBlue-active{border-color:#0a3f8f}.sm\:border-gold{border-color:#bd9e56}.sm\:border-gold-active{border-color:#c9a34a}.sm\:border-grenadine{border-color:#c35078}.sm\:border-grenadine-active{border-color:#cf4475}.sm\:border-kiwi{border-color:#9a9f1e}.sm\:border-kiwi-active{border-color:#a3a815}.sm\:border-lilas{border-color:#7ea1d3}.sm\:border-lilas-active{border-color:#75a0db}.sm\:border-mahogany{border-color:#57142e}.sm\:border-mahogany-active{border-color:#610a2b}.sm\:border-ocher{border-color:#c29614}.sm\:border-ocher-active{border-color:#cd9c0a}.sm\:border-pine{border-color:#144d52}.sm\:border-pine-active{border-color:#0a555c}.sm\:border-platinum,.sm\:border-platinum-active{border-color:#000}.sm\:border-prune{border-color:#661456}.sm\:border-prune-active{border-color:#72085d}.sm\:border-sand{border-color:#d7be88}.sm\:border-sand-active{border-color:#dfc181}.sm\:border-sandPearl{border-color:#f0e5d6}.sm\:border-sandPearl-active{border-color:#f2e6d4}.sm\:border-silver{border-color:#b1b2b4}.sm\:border-silver-active{border-color:#a9afbc}.sm\:border-skyBlue{border-color:#98d2d7}.sm\:border-skyBlue-active{border-color:#91d8de}.sm\:border-southSea{border-color:#9dc9cd}.sm\:border-southSea-active{border-color:#95ced5}.sm\:border-turquoise{border-color:#14a5c2}.sm\:border-turquoise-active{border-color:#0aaccd}.sm\:border-waterGreen{border-color:#007571}.sm\:border-waterGreen-active{border-color:#00a8a3}.sm\:border-deepRed{border-color:#c32222}.sm\:border-deepRed-active{border-color:#cf1717}.sm\:border-emerald{border-color:#14a33a}.sm\:border-emerald-active{border-color:#0bad36}.sm\:border-greenLight{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.sm\:border-orange-active{border-color:#f65f2c}.sm\:border-red-active{border-color:#e13737}.sm\:border-white-active{border-color:#14a5c2}.sm\:border-white-button,.sm\:border-white-button-active{border-color:#fff}.sm\:border-code{border-color:#3f3d57}.sm\:border-code-active{border-color:#37354b}.sm\:border-gray-lighter{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.sm\:border-gray-lighter-active{border-color:#ebebeb}.sm\:border-gray-light{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.sm\:border-gray-medium{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.sm\:border-gray-darker{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.sm\:border-gray-darker-active{border-color:#14a5c2}.sm\:border-api-default{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.sm\:border-gray-xxl{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.sm\:border-line-even{border-color:#f3f6f7}.sm\:border-DEFAULT{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.sm\:hover\:border-transparent:hover{border-color:transparent}.sm\:hover\:border-current:hover{border-color:currentColor}.sm\:hover\:border-black:hover{border-color:#000}.sm\:hover\:border-white:hover{border-color:#fff}.sm\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.sm\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.sm\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.sm\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.sm\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.sm\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.sm\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.sm\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.sm\:hover\:border-gray-DEFAULT:hover,.sm\:hover\:border-gray:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:hover\:border-red:hover{border-color:#d64343}.sm\:hover\:border-orange:hover{border-color:#eb6437}.sm\:hover\:border-yellow:hover{border-color:#f8da30}.sm\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.sm\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.sm\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.sm\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.sm\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.sm\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.sm\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.sm\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.sm\:hover\:border-green-DEFAULT:hover,.sm\:hover\:border-green:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.sm\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.sm\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.sm\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.sm\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.sm\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.sm\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.sm\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.sm\:hover\:border-teal-DEFAULT:hover,.sm\:hover\:border-teal:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:hover\:border-blue-50:hover{border-color:#d1eaff}.sm\:hover\:border-blue-100:hover{border-color:#a8d7ff}.sm\:hover\:border-blue-200:hover{border-color:#80c4ff}.sm\:hover\:border-blue-300:hover{border-color:#57b0ff}.sm\:hover\:border-blue-400:hover{border-color:#2e9dff}.sm\:hover\:border-blue-500:hover{border-color:#058aff}.sm\:hover\:border-blue-600:hover{border-color:#0075db}.sm\:hover\:border-blue-700:hover{border-color:#005fb3}.sm\:hover\:border-blue-800:hover{border-color:#00498a}.sm\:hover\:border-blue-900:hover{border-color:#003461}.sm\:hover\:border-blue-DEFAULT:hover,.sm\:hover\:border-blue:hover{border-color:#0075db}.sm\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.sm\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.sm\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.sm\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.sm\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.sm\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.sm\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.sm\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.sm\:hover\:border-indigo-DEFAULT:hover,.sm\:hover\:border-indigo:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.sm\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.sm\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.sm\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.sm\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.sm\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.sm\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.sm\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.sm\:hover\:border-purple-DEFAULT:hover,.sm\:hover\:border-purple:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:hover\:border-pink:hover{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.sm\:hover\:border-inherit:hover{border-color:inherit}.sm\:hover\:border-amber:hover{border-color:#d78737}.sm\:hover\:border-amber-active:hover{border-color:#e3872b}.sm\:hover\:border-ardoise:hover{border-color:#596a82}.sm\:hover\:border-ardoise-active:hover{border-color:#476794}.sm\:hover\:border-blue-active:hover{border-color:#14a5c2}.sm\:hover\:border-lightBlue-active:hover,.sm\:hover\:border-lightBlue:hover{border-color:rgba(0,85,138,.1)}.sm\:hover\:border-deepBlue:hover{border-color:#0e346c}.sm\:hover\:border-deepBlue-active:hover{border-color:#0a3f8f}.sm\:hover\:border-gold:hover{border-color:#bd9e56}.sm\:hover\:border-gold-active:hover{border-color:#c9a34a}.sm\:hover\:border-grenadine:hover{border-color:#c35078}.sm\:hover\:border-grenadine-active:hover{border-color:#cf4475}.sm\:hover\:border-kiwi:hover{border-color:#9a9f1e}.sm\:hover\:border-kiwi-active:hover{border-color:#a3a815}.sm\:hover\:border-lilas:hover{border-color:#7ea1d3}.sm\:hover\:border-lilas-active:hover{border-color:#75a0db}.sm\:hover\:border-mahogany:hover{border-color:#57142e}.sm\:hover\:border-mahogany-active:hover{border-color:#610a2b}.sm\:hover\:border-ocher:hover{border-color:#c29614}.sm\:hover\:border-ocher-active:hover{border-color:#cd9c0a}.sm\:hover\:border-pine:hover{border-color:#144d52}.sm\:hover\:border-pine-active:hover{border-color:#0a555c}.sm\:hover\:border-platinum-active:hover,.sm\:hover\:border-platinum:hover{border-color:#000}.sm\:hover\:border-prune:hover{border-color:#661456}.sm\:hover\:border-prune-active:hover{border-color:#72085d}.sm\:hover\:border-sand:hover{border-color:#d7be88}.sm\:hover\:border-sand-active:hover{border-color:#dfc181}.sm\:hover\:border-sandPearl:hover{border-color:#f0e5d6}.sm\:hover\:border-sandPearl-active:hover{border-color:#f2e6d4}.sm\:hover\:border-silver:hover{border-color:#b1b2b4}.sm\:hover\:border-silver-active:hover{border-color:#a9afbc}.sm\:hover\:border-skyBlue:hover{border-color:#98d2d7}.sm\:hover\:border-skyBlue-active:hover{border-color:#91d8de}.sm\:hover\:border-southSea:hover{border-color:#9dc9cd}.sm\:hover\:border-southSea-active:hover{border-color:#95ced5}.sm\:hover\:border-turquoise:hover{border-color:#14a5c2}.sm\:hover\:border-turquoise-active:hover{border-color:#0aaccd}.sm\:hover\:border-waterGreen:hover{border-color:#007571}.sm\:hover\:border-waterGreen-active:hover{border-color:#00a8a3}.sm\:hover\:border-deepRed:hover{border-color:#c32222}.sm\:hover\:border-deepRed-active:hover{border-color:#cf1717}.sm\:hover\:border-emerald:hover{border-color:#14a33a}.sm\:hover\:border-emerald-active:hover{border-color:#0bad36}.sm\:hover\:border-greenLight:hover{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.sm\:hover\:border-orange-active:hover{border-color:#f65f2c}.sm\:hover\:border-red-active:hover{border-color:#e13737}.sm\:hover\:border-white-active:hover{border-color:#14a5c2}.sm\:hover\:border-white-button-active:hover,.sm\:hover\:border-white-button:hover{border-color:#fff}.sm\:hover\:border-code:hover{border-color:#3f3d57}.sm\:hover\:border-code-active:hover{border-color:#37354b}.sm\:hover\:border-gray-lighter:hover{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.sm\:hover\:border-gray-lighter-active:hover{border-color:#ebebeb}.sm\:hover\:border-gray-light:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.sm\:hover\:border-gray-medium:hover{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.sm\:hover\:border-gray-darker:hover{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.sm\:hover\:border-gray-darker-active:hover{border-color:#14a5c2}.sm\:hover\:border-api-default:hover{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.sm\:hover\:border-gray-xxl:hover{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.sm\:hover\:border-line-even:hover{border-color:#f3f6f7}.sm\:hover\:border-DEFAULT:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.sm\:focus\:border-transparent:focus{border-color:transparent}.sm\:focus\:border-current:focus{border-color:currentColor}.sm\:focus\:border-black:focus{border-color:#000}.sm\:focus\:border-white:focus{border-color:#fff}.sm\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.sm\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.sm\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.sm\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.sm\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.sm\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.sm\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.sm\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.sm\:focus\:border-gray-DEFAULT:focus,.sm\:focus\:border-gray:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:focus\:border-red:focus{border-color:#d64343}.sm\:focus\:border-orange:focus{border-color:#eb6437}.sm\:focus\:border-yellow:focus{border-color:#f8da30}.sm\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.sm\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.sm\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.sm\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.sm\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.sm\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.sm\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.sm\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.sm\:focus\:border-green-DEFAULT:focus,.sm\:focus\:border-green:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.sm\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.sm\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.sm\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.sm\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.sm\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.sm\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.sm\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.sm\:focus\:border-teal-DEFAULT:focus,.sm\:focus\:border-teal:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:focus\:border-blue-50:focus{border-color:#d1eaff}.sm\:focus\:border-blue-100:focus{border-color:#a8d7ff}.sm\:focus\:border-blue-200:focus{border-color:#80c4ff}.sm\:focus\:border-blue-300:focus{border-color:#57b0ff}.sm\:focus\:border-blue-400:focus{border-color:#2e9dff}.sm\:focus\:border-blue-500:focus{border-color:#058aff}.sm\:focus\:border-blue-600:focus{border-color:#0075db}.sm\:focus\:border-blue-700:focus{border-color:#005fb3}.sm\:focus\:border-blue-800:focus{border-color:#00498a}.sm\:focus\:border-blue-900:focus{border-color:#003461}.sm\:focus\:border-blue-DEFAULT:focus,.sm\:focus\:border-blue:focus{border-color:#0075db}.sm\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.sm\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.sm\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.sm\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.sm\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.sm\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.sm\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.sm\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.sm\:focus\:border-indigo-DEFAULT:focus,.sm\:focus\:border-indigo:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.sm\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.sm\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.sm\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.sm\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.sm\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.sm\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.sm\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.sm\:focus\:border-purple-DEFAULT:focus,.sm\:focus\:border-purple:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:focus\:border-pink:focus{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.sm\:focus\:border-inherit:focus{border-color:inherit}.sm\:focus\:border-amber:focus{border-color:#d78737}.sm\:focus\:border-amber-active:focus{border-color:#e3872b}.sm\:focus\:border-ardoise:focus{border-color:#596a82}.sm\:focus\:border-ardoise-active:focus{border-color:#476794}.sm\:focus\:border-blue-active:focus{border-color:#14a5c2}.sm\:focus\:border-lightBlue-active:focus,.sm\:focus\:border-lightBlue:focus{border-color:rgba(0,85,138,.1)}.sm\:focus\:border-deepBlue:focus{border-color:#0e346c}.sm\:focus\:border-deepBlue-active:focus{border-color:#0a3f8f}.sm\:focus\:border-gold:focus{border-color:#bd9e56}.sm\:focus\:border-gold-active:focus{border-color:#c9a34a}.sm\:focus\:border-grenadine:focus{border-color:#c35078}.sm\:focus\:border-grenadine-active:focus{border-color:#cf4475}.sm\:focus\:border-kiwi:focus{border-color:#9a9f1e}.sm\:focus\:border-kiwi-active:focus{border-color:#a3a815}.sm\:focus\:border-lilas:focus{border-color:#7ea1d3}.sm\:focus\:border-lilas-active:focus{border-color:#75a0db}.sm\:focus\:border-mahogany:focus{border-color:#57142e}.sm\:focus\:border-mahogany-active:focus{border-color:#610a2b}.sm\:focus\:border-ocher:focus{border-color:#c29614}.sm\:focus\:border-ocher-active:focus{border-color:#cd9c0a}.sm\:focus\:border-pine:focus{border-color:#144d52}.sm\:focus\:border-pine-active:focus{border-color:#0a555c}.sm\:focus\:border-platinum-active:focus,.sm\:focus\:border-platinum:focus{border-color:#000}.sm\:focus\:border-prune:focus{border-color:#661456}.sm\:focus\:border-prune-active:focus{border-color:#72085d}.sm\:focus\:border-sand:focus{border-color:#d7be88}.sm\:focus\:border-sand-active:focus{border-color:#dfc181}.sm\:focus\:border-sandPearl:focus{border-color:#f0e5d6}.sm\:focus\:border-sandPearl-active:focus{border-color:#f2e6d4}.sm\:focus\:border-silver:focus{border-color:#b1b2b4}.sm\:focus\:border-silver-active:focus{border-color:#a9afbc}.sm\:focus\:border-skyBlue:focus{border-color:#98d2d7}.sm\:focus\:border-skyBlue-active:focus{border-color:#91d8de}.sm\:focus\:border-southSea:focus{border-color:#9dc9cd}.sm\:focus\:border-southSea-active:focus{border-color:#95ced5}.sm\:focus\:border-turquoise:focus{border-color:#14a5c2}.sm\:focus\:border-turquoise-active:focus{border-color:#0aaccd}.sm\:focus\:border-waterGreen:focus{border-color:#007571}.sm\:focus\:border-waterGreen-active:focus{border-color:#00a8a3}.sm\:focus\:border-deepRed:focus{border-color:#c32222}.sm\:focus\:border-deepRed-active:focus{border-color:#cf1717}.sm\:focus\:border-emerald:focus{border-color:#14a33a}.sm\:focus\:border-emerald-active:focus{border-color:#0bad36}.sm\:focus\:border-greenLight:focus{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.sm\:focus\:border-orange-active:focus{border-color:#f65f2c}.sm\:focus\:border-red-active:focus{border-color:#e13737}.sm\:focus\:border-white-active:focus{border-color:#14a5c2}.sm\:focus\:border-white-button-active:focus,.sm\:focus\:border-white-button:focus{border-color:#fff}.sm\:focus\:border-code:focus{border-color:#3f3d57}.sm\:focus\:border-code-active:focus{border-color:#37354b}.sm\:focus\:border-gray-lighter:focus{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.sm\:focus\:border-gray-lighter-active:focus{border-color:#ebebeb}.sm\:focus\:border-gray-light:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.sm\:focus\:border-gray-medium:focus{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.sm\:focus\:border-gray-darker:focus{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.sm\:focus\:border-gray-darker-active:focus{border-color:#14a5c2}.sm\:focus\:border-api-default:focus{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.sm\:focus\:border-gray-xxl:focus{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.sm\:focus\:border-line-even:focus{border-color:#f3f6f7}.sm\:focus\:border-DEFAULT:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.sm\:border-opacity-0{--border-opacity:0}.sm\:border-opacity-25{--border-opacity:0.25}.sm\:border-opacity-50{--border-opacity:0.5}.sm\:border-opacity-75{--border-opacity:0.75}.sm\:border-opacity-100{--border-opacity:1}.sm\:hover\:border-opacity-0:hover{--border-opacity:0}.sm\:hover\:border-opacity-25:hover{--border-opacity:0.25}.sm\:hover\:border-opacity-50:hover{--border-opacity:0.5}.sm\:hover\:border-opacity-75:hover{--border-opacity:0.75}.sm\:hover\:border-opacity-100:hover{--border-opacity:1}.sm\:focus\:border-opacity-0:focus{--border-opacity:0}.sm\:focus\:border-opacity-25:focus{--border-opacity:0.25}.sm\:focus\:border-opacity-50:focus{--border-opacity:0.5}.sm\:focus\:border-opacity-75:focus{--border-opacity:0.75}.sm\:focus\:border-opacity-100:focus{--border-opacity:1}.sm\:rounded-none{border-radius:0}.sm\:rounded-sm{border-radius:.125rem}.sm\:rounded{border-radius:.25rem}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:rounded-2xl{border-radius:1rem}.sm\:rounded-3xl{border-radius:1.5rem}.sm\:rounded-full{border-radius:100%}.sm\:rounded-xs{border-radius:.15rem}.sm\:rounded-small{border-radius:.3125rem}.sm\:rounded-DEFAULT{border-radius:.5rem}.sm\:rounded-medium{border-radius:1rem}.sm\:rounded-large{border-radius:2rem}.sm\:rounded-half{border-radius:50%}.sm\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.sm\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.sm\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.sm\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.sm\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.sm\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.sm\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.sm\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.sm\:rounded-t{border-top-left-radius:.25rem}.sm\:rounded-r,.sm\:rounded-t{border-top-right-radius:.25rem}.sm\:rounded-b,.sm\:rounded-r{border-bottom-right-radius:.25rem}.sm\:rounded-b,.sm\:rounded-l{border-bottom-left-radius:.25rem}.sm\:rounded-l{border-top-left-radius:.25rem}.sm\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.sm\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.sm\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.sm\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.sm\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.sm\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.sm\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.sm\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.sm\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.sm\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.sm\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.sm\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.sm\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.sm\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.sm\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.sm\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.sm\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.sm\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.sm\:rounded-t-full{border-top-left-radius:100%;border-top-right-radius:100%}.sm\:rounded-r-full{border-top-right-radius:100%;border-bottom-right-radius:100%}.sm\:rounded-b-full{border-bottom-right-radius:100%;border-bottom-left-radius:100%}.sm\:rounded-l-full{border-top-left-radius:100%;border-bottom-left-radius:100%}.sm\:rounded-t-xs{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.sm\:rounded-r-xs{border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.sm\:rounded-b-xs{border-bottom-right-radius:.15rem;border-bottom-left-radius:.15rem}.sm\:rounded-l-xs{border-top-left-radius:.15rem;border-bottom-left-radius:.15rem}.sm\:rounded-t-small{border-top-left-radius:.3125rem;border-top-right-radius:.3125rem}.sm\:rounded-r-small{border-top-right-radius:.3125rem;border-bottom-right-radius:.3125rem}.sm\:rounded-b-small{border-bottom-right-radius:.3125rem;border-bottom-left-radius:.3125rem}.sm\:rounded-l-small{border-top-left-radius:.3125rem;border-bottom-left-radius:.3125rem}.sm\:rounded-t-DEFAULT{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.sm\:rounded-r-DEFAULT{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.sm\:rounded-b-DEFAULT{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-l-DEFAULT{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-t-medium{border-top-left-radius:1rem;border-top-right-radius:1rem}.sm\:rounded-r-medium{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.sm\:rounded-b-medium{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.sm\:rounded-l-medium{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.sm\:rounded-t-large{border-top-left-radius:2rem;border-top-right-radius:2rem}.sm\:rounded-r-large{border-top-right-radius:2rem;border-bottom-right-radius:2rem}.sm\:rounded-b-large{border-bottom-right-radius:2rem;border-bottom-left-radius:2rem}.sm\:rounded-l-large{border-top-left-radius:2rem;border-bottom-left-radius:2rem}.sm\:rounded-t-half{border-top-left-radius:50%;border-top-right-radius:50%}.sm\:rounded-r-half{border-top-right-radius:50%;border-bottom-right-radius:50%}.sm\:rounded-b-half{border-bottom-right-radius:50%;border-bottom-left-radius:50%}.sm\:rounded-l-half{border-top-left-radius:50%;border-bottom-left-radius:50%}.sm\:rounded-tl-none{border-top-left-radius:0}.sm\:rounded-tr-none{border-top-right-radius:0}.sm\:rounded-br-none{border-bottom-right-radius:0}.sm\:rounded-bl-none{border-bottom-left-radius:0}.sm\:rounded-tl-sm{border-top-left-radius:.125rem}.sm\:rounded-tr-sm{border-top-right-radius:.125rem}.sm\:rounded-br-sm{border-bottom-right-radius:.125rem}.sm\:rounded-bl-sm{border-bottom-left-radius:.125rem}.sm\:rounded-tl{border-top-left-radius:.25rem}.sm\:rounded-tr{border-top-right-radius:.25rem}.sm\:rounded-br{border-bottom-right-radius:.25rem}.sm\:rounded-bl{border-bottom-left-radius:.25rem}.sm\:rounded-tl-md{border-top-left-radius:.375rem}.sm\:rounded-tr-md{border-top-right-radius:.375rem}.sm\:rounded-br-md{border-bottom-right-radius:.375rem}.sm\:rounded-bl-md{border-bottom-left-radius:.375rem}.sm\:rounded-tl-lg{border-top-left-radius:.5rem}.sm\:rounded-tr-lg{border-top-right-radius:.5rem}.sm\:rounded-br-lg{border-bottom-right-radius:.5rem}.sm\:rounded-bl-lg{border-bottom-left-radius:.5rem}.sm\:rounded-tl-xl{border-top-left-radius:.75rem}.sm\:rounded-tr-xl{border-top-right-radius:.75rem}.sm\:rounded-br-xl{border-bottom-right-radius:.75rem}.sm\:rounded-bl-xl{border-bottom-left-radius:.75rem}.sm\:rounded-tl-2xl{border-top-left-radius:1rem}.sm\:rounded-tr-2xl{border-top-right-radius:1rem}.sm\:rounded-br-2xl{border-bottom-right-radius:1rem}.sm\:rounded-bl-2xl{border-bottom-left-radius:1rem}.sm\:rounded-tl-3xl{border-top-left-radius:1.5rem}.sm\:rounded-tr-3xl{border-top-right-radius:1.5rem}.sm\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.sm\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.sm\:rounded-tl-full{border-top-left-radius:100%}.sm\:rounded-tr-full{border-top-right-radius:100%}.sm\:rounded-br-full{border-bottom-right-radius:100%}.sm\:rounded-bl-full{border-bottom-left-radius:100%}.sm\:rounded-tl-xs{border-top-left-radius:.15rem}.sm\:rounded-tr-xs{border-top-right-radius:.15rem}.sm\:rounded-br-xs{border-bottom-right-radius:.15rem}.sm\:rounded-bl-xs{border-bottom-left-radius:.15rem}.sm\:rounded-tl-small{border-top-left-radius:.3125rem}.sm\:rounded-tr-small{border-top-right-radius:.3125rem}.sm\:rounded-br-small{border-bottom-right-radius:.3125rem}.sm\:rounded-bl-small{border-bottom-left-radius:.3125rem}.sm\:rounded-tl-DEFAULT{border-top-left-radius:.5rem}.sm\:rounded-tr-DEFAULT{border-top-right-radius:.5rem}.sm\:rounded-br-DEFAULT{border-bottom-right-radius:.5rem}.sm\:rounded-bl-DEFAULT{border-bottom-left-radius:.5rem}.sm\:rounded-tl-medium{border-top-left-radius:1rem}.sm\:rounded-tr-medium{border-top-right-radius:1rem}.sm\:rounded-br-medium{border-bottom-right-radius:1rem}.sm\:rounded-bl-medium{border-bottom-left-radius:1rem}.sm\:rounded-tl-large{border-top-left-radius:2rem}.sm\:rounded-tr-large{border-top-right-radius:2rem}.sm\:rounded-br-large{border-bottom-right-radius:2rem}.sm\:rounded-bl-large{border-bottom-left-radius:2rem}.sm\:rounded-tl-half{border-top-left-radius:50%}.sm\:rounded-tr-half{border-top-right-radius:50%}.sm\:rounded-br-half{border-bottom-right-radius:50%}.sm\:rounded-bl-half{border-bottom-left-radius:50%}.sm\:border-solid{border-style:solid}.sm\:border-dashed{border-style:dashed}.sm\:border-dotted{border-style:dotted}.sm\:border-double{border-style:double}.sm\:border-none{border-style:none}.sm\:border-0{border-width:0}.sm\:border-1{border-width:1px}.sm\:border-2{border-width:2px}.sm\:border-4{border-width:4px}.sm\:border-5{border-width:5px}.sm\:border-8{border-width:8px}.sm\:border,.sm\:border-DEFAULT{border-width:1px}.sm\:border-t-0{border-top-width:0}.sm\:border-r-0{border-right-width:0}.sm\:border-b-0{border-bottom-width:0}.sm\:border-l-0{border-left-width:0}.sm\:border-t-1{border-top-width:1px}.sm\:border-r-1{border-right-width:1px}.sm\:border-b-1{border-bottom-width:1px}.sm\:border-l-1{border-left-width:1px}.sm\:border-t-2{border-top-width:2px}.sm\:border-r-2{border-right-width:2px}.sm\:border-b-2{border-bottom-width:2px}.sm\:border-l-2{border-left-width:2px}.sm\:border-t-4{border-top-width:4px}.sm\:border-r-4{border-right-width:4px}.sm\:border-b-4{border-bottom-width:4px}.sm\:border-l-4{border-left-width:4px}.sm\:border-t-5{border-top-width:5px}.sm\:border-r-5{border-right-width:5px}.sm\:border-b-5{border-bottom-width:5px}.sm\:border-l-5{border-left-width:5px}.sm\:border-t-8{border-top-width:8px}.sm\:border-r-8{border-right-width:8px}.sm\:border-b-8{border-bottom-width:8px}.sm\:border-l-8{border-left-width:8px}.sm\:border-t{border-top-width:1px}.sm\:border-r{border-right-width:1px}.sm\:border-b{border-bottom-width:1px}.sm\:border-l{border-left-width:1px}.sm\:border-t-DEFAULT{border-top-width:1px}.sm\:border-r-DEFAULT{border-right-width:1px}.sm\:border-b-DEFAULT{border-bottom-width:1px}.sm\:border-l-DEFAULT{border-left-width:1px}.sm\:box-border{box-sizing:border-box}.sm\:box-content{box-sizing:content-box}.sm\:cursor-auto{cursor:auto}.sm\:cursor-default{cursor:default}.sm\:cursor-pointer{cursor:pointer}.sm\:cursor-wait{cursor:wait}.sm\:cursor-text{cursor:text}.sm\:cursor-move{cursor:move}.sm\:cursor-not-allowed{cursor:not-allowed}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:table{display:table}.sm\:table-caption{display:table-caption}.sm\:table-cell{display:table-cell}.sm\:table-column{display:table-column}.sm\:table-column-group{display:table-column-group}.sm\:table-footer-group{display:table-footer-group}.sm\:table-header-group{display:table-header-group}.sm\:table-row-group{display:table-row-group}.sm\:table-row{display:table-row}.sm\:flow-root{display:flow-root}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:contents{display:contents}.sm\:hidden{display:none}.sm\:flex-row{flex-direction:row}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-col{flex-direction:column}.sm\:flex-col-reverse{flex-direction:column-reverse}.sm\:flex-wrap{flex-wrap:wrap}.sm\:flex-wrap-reverse{flex-wrap:wrap-reverse}.sm\:flex-no-wrap{flex-wrap:nowrap}.sm\:place-items-auto{place-items:auto}.sm\:place-items-start{place-items:start}.sm\:place-items-end{place-items:end}.sm\:place-items-center{place-items:center}.sm\:place-items-stretch{place-items:stretch}.sm\:place-content-center{place-content:center}.sm\:place-content-start{place-content:start}.sm\:place-content-end{place-content:end}.sm\:place-content-between{place-content:space-between}.sm\:place-content-around{place-content:space-around}.sm\:place-content-evenly{place-content:space-evenly}.sm\:place-content-stretch{place-content:stretch}.sm\:place-self-auto{place-self:auto}.sm\:place-self-start{place-self:start}.sm\:place-self-end{place-self:end}.sm\:place-self-center{place-self:center}.sm\:place-self-stretch{place-self:stretch}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:items-baseline{align-items:baseline}.sm\:items-stretch{align-items:stretch}.sm\:content-center{align-content:center}.sm\:content-start{align-content:flex-start}.sm\:content-end{align-content:flex-end}.sm\:content-between{align-content:space-between}.sm\:content-around{align-content:space-around}.sm\:content-evenly{align-content:space-evenly}.sm\:self-auto{align-self:auto}.sm\:self-start{align-self:flex-start}.sm\:self-end{align-self:flex-end}.sm\:self-center{align-self:center}.sm\:self-stretch{align-self:stretch}.sm\:justify-items-auto{justify-items:auto}.sm\:justify-items-start{justify-items:start}.sm\:justify-items-end{justify-items:end}.sm\:justify-items-center{justify-items:center}.sm\:justify-items-stretch{justify-items:stretch}.sm\:justify-start{justify-content:flex-start}.sm\:justify-end{justify-content:flex-end}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-around{justify-content:space-around}.sm\:justify-evenly{justify-content:space-evenly}.sm\:justify-self-auto{justify-self:auto}.sm\:justify-self-start{justify-self:start}.sm\:justify-self-end{justify-self:end}.sm\:justify-self-center{justify-self:center}.sm\:justify-self-stretch{justify-self:stretch}.sm\:flex-1{flex:1 1 0%}.sm\:flex-2{flex:2 2 0%}.sm\:flex-3{flex:3 3 0%}.sm\:flex-auto{flex:1 1 auto}.sm\:flex-initial{flex:0 1 auto}.sm\:flex-none{flex:none}.sm\:flex-grow-0{flex-grow:0}.sm\:flex-grow{flex-grow:1}.sm\:flex-shrink-0{flex-shrink:0}.sm\:flex-shrink{flex-shrink:1}.sm\:order-1{order:1}.sm\:order-2{order:2}.sm\:order-3{order:3}.sm\:order-4{order:4}.sm\:order-5{order:5}.sm\:order-6{order:6}.sm\:order-7{order:7}.sm\:order-8{order:8}.sm\:order-9{order:9}.sm\:order-10{order:10}.sm\:order-11{order:11}.sm\:order-12{order:12}.sm\:order-first{order:-9999}.sm\:order-last{order:9999}.sm\:order-none{order:0}.sm\:float-right{float:right}.sm\:float-left{float:left}.sm\:float-none{float:none}.sm\:clearfix:after{content:"";display:table;clear:both}.sm\:clear-left{clear:left}.sm\:clear-right{clear:right}.sm\:clear-both{clear:both}.sm\:clear-none{clear:none}.sm\:font-brand,.sm\:font-sans,.sm\:font-serif{font-family:Source Sans Pro,sans-serif}.sm\:font-inconsolata{font-family:Inconsolata}.sm\:font-source{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.sm\:font-hairline{font-weight:100}.sm\:font-thin{font-weight:200}.sm\:font-light{font-weight:300}.sm\:font-normal{font-weight:400}.sm\:font-medium{font-weight:500}.sm\:font-semibold{font-weight:600}.sm\:font-bold{font-weight:700}.sm\:font-extrabold{font-weight:800}.sm\:font-black{font-weight:900}.sm\:hover\:font-hairline:hover{font-weight:100}.sm\:hover\:font-thin:hover{font-weight:200}.sm\:hover\:font-light:hover{font-weight:300}.sm\:hover\:font-normal:hover{font-weight:400}.sm\:hover\:font-medium:hover{font-weight:500}.sm\:hover\:font-semibold:hover{font-weight:600}.sm\:hover\:font-bold:hover{font-weight:700}.sm\:hover\:font-extrabold:hover{font-weight:800}.sm\:hover\:font-black:hover{font-weight:900}.sm\:focus\:font-hairline:focus{font-weight:100}.sm\:focus\:font-thin:focus{font-weight:200}.sm\:focus\:font-light:focus{font-weight:300}.sm\:focus\:font-normal:focus{font-weight:400}.sm\:focus\:font-medium:focus{font-weight:500}.sm\:focus\:font-semibold:focus{font-weight:600}.sm\:focus\:font-bold:focus{font-weight:700}.sm\:focus\:font-extrabold:focus{font-weight:800}.sm\:focus\:font-black:focus{font-weight:900}.sm\:h-0{height:0}.sm\:h-1{height:.25rem}.sm\:h-2{height:.5rem}.sm\:h-3{height:.75rem}.sm\:h-4{height:1rem}.sm\:h-5{height:1.25rem}.sm\:h-6{height:1.5rem}.sm\:h-7{height:1.75rem}.sm\:h-8{height:2rem}.sm\:h-9{height:2.25rem}.sm\:h-10{height:2.5rem}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-15{height:3.75rem}.sm\:h-16{height:4rem}.sm\:h-20{height:5rem}.sm\:h-22{height:5.5rem}.sm\:h-24{height:6rem}.sm\:h-25{height:6.25rem}.sm\:h-26{height:6.5rem}.sm\:h-28{height:8rem}.sm\:h-30{height:8.5rem}.sm\:h-32{height:9rem}.sm\:h-40{height:10rem}.sm\:h-48{height:12rem}.sm\:h-52{height:13rem}.sm\:h-56{height:14rem}.sm\:h-60{height:15rem}.sm\:h-64{height:16rem}.sm\:h-68{height:17rem}.sm\:h-auto{height:auto}.sm\:h-px{height:1px}.sm\:h-0\.5{height:.125rem}.sm\:h-1\.5{height:.375rem}.sm\:h-2\.5{height:.625rem}.sm\:h-7\.5{height:1.875rem}.sm\:h-full{height:100%}.sm\:h-screen{height:100vh}.sm\:text-micro{font-size:.5rem}.sm\:text-xxs{font-size:.625rem}.sm\:text-xs{font-size:.75rem}.sm\:text-sm{font-size:.875rem}.sm\:text-base{font-size:1rem}.sm\:text-md{font-size:1.125rem}.sm\:text-lg{font-size:1.25rem}.sm\:text-xl{font-size:1.5rem}.sm\:text-2xl{font-size:1.75rem}.sm\:text-3xl{font-size:2rem}.sm\:text-4xl{font-size:2.25rem}.sm\:text-5xl{font-size:2.75rem}.sm\:text-7xl{font-size:3.75rem}.sm\:text-11xl{font-size:4.75rem}.sm\:leading-3{line-height:.75rem}.sm\:leading-4{line-height:1rem}.sm\:leading-5{line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:leading-7{line-height:1.75rem}.sm\:leading-8{line-height:2rem}.sm\:leading-9{line-height:2.25rem}.sm\:leading-10{line-height:2.5rem}.sm\:leading-none{line-height:1}.sm\:leading-tight{line-height:1.25}.sm\:leading-snug{line-height:1.375}.sm\:leading-normal{line-height:1.5}.sm\:leading-relaxed{line-height:1.625}.sm\:leading-loose{line-height:2}.sm\:list-inside{list-style-position:inside}.sm\:list-outside{list-style-position:outside}.sm\:list-none{list-style-type:none}.sm\:list-disc{list-style-type:disc}.sm\:list-decimal{list-style-type:decimal}.sm\:m-0{margin:0}.sm\:m-1{margin:.25rem}.sm\:m-2{margin:.5rem}.sm\:m-3{margin:.75rem}.sm\:m-4{margin:1rem}.sm\:m-5{margin:1.25rem}.sm\:m-6{margin:1.5rem}.sm\:m-7{margin:1.75rem}.sm\:m-8{margin:2rem}.sm\:m-9{margin:2.25rem}.sm\:m-10{margin:2.5rem}.sm\:m-11{margin:2.75rem}.sm\:m-12{margin:3rem}.sm\:m-15{margin:3.75rem}.sm\:m-16{margin:4rem}.sm\:m-20{margin:5rem}.sm\:m-22{margin:5.5rem}.sm\:m-24{margin:6rem}.sm\:m-25{margin:6.25rem}.sm\:m-26{margin:6.5rem}.sm\:m-28{margin:8rem}.sm\:m-30{margin:8.5rem}.sm\:m-32{margin:9rem}.sm\:m-40{margin:10rem}.sm\:m-48{margin:12rem}.sm\:m-52{margin:13rem}.sm\:m-56{margin:14rem}.sm\:m-60{margin:15rem}.sm\:m-64{margin:16rem}.sm\:m-68{margin:17rem}.sm\:m-px{margin:1px}.sm\:-m-px{margin:-1px}.sm\:-m-2px{margin:-2px}.sm\:m-auto{margin:auto}.sm\:m-0\.5{margin:.125rem}.sm\:m-1\.5{margin:.375rem}.sm\:m-2\.5{margin:.625rem}.sm\:m-7\.5{margin:1.875rem}.sm\:-m-1{margin:-.25rem}.sm\:-m-2{margin:-.5rem}.sm\:-m-3{margin:-.75rem}.sm\:-m-4{margin:-1rem}.sm\:-m-5{margin:-1.25rem}.sm\:-m-6{margin:-1.5rem}.sm\:-m-7{margin:-1.75rem}.sm\:-m-8{margin:-2rem}.sm\:-m-9{margin:-2.25rem}.sm\:-m-10{margin:-2.5rem}.sm\:-m-11{margin:-2.75rem}.sm\:-m-12{margin:-3rem}.sm\:-m-15{margin:-3.75rem}.sm\:-m-16{margin:-4rem}.sm\:-m-20{margin:-5rem}.sm\:-m-22{margin:-5.5rem}.sm\:-m-24{margin:-6rem}.sm\:-m-25{margin:-6.25rem}.sm\:-m-26{margin:-6.5rem}.sm\:-m-28{margin:-8rem}.sm\:-m-30{margin:-8.5rem}.sm\:-m-32{margin:-9rem}.sm\:-m-40{margin:-10rem}.sm\:-m-48{margin:-12rem}.sm\:-m-52{margin:-13rem}.sm\:-m-56{margin:-14rem}.sm\:-m-60{margin:-15rem}.sm\:-m-64{margin:-16rem}.sm\:-m-68{margin:-17rem}.sm\:-m-0\.5{margin:-.125rem}.sm\:-m-1\.5{margin:-.375rem}.sm\:-m-2\.5{margin:-.625rem}.sm\:-m-7\.5{margin:-1.875rem}.sm\:my-0{margin-top:0;margin-bottom:0}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-1{margin-top:.25rem;margin-bottom:.25rem}.sm\:mx-1{margin-left:.25rem;margin-right:.25rem}.sm\:my-2{margin-top:.5rem;margin-bottom:.5rem}.sm\:mx-2{margin-left:.5rem;margin-right:.5rem}.sm\:my-3{margin-top:.75rem;margin-bottom:.75rem}.sm\:mx-3{margin-left:.75rem;margin-right:.75rem}.sm\:my-4{margin-top:1rem;margin-bottom:1rem}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.sm\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.sm\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:my-7{margin-top:1.75rem;margin-bottom:1.75rem}.sm\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:mx-8{margin-left:2rem;margin-right:2rem}.sm\:my-9{margin-top:2.25rem;margin-bottom:2.25rem}.sm\:mx-9{margin-left:2.25rem;margin-right:2.25rem}.sm\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.sm\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.sm\:my-11{margin-top:2.75rem;margin-bottom:2.75rem}.sm\:mx-11{margin-left:2.75rem;margin-right:2.75rem}.sm\:my-12{margin-top:3rem;margin-bottom:3rem}.sm\:mx-12{margin-left:3rem;margin-right:3rem}.sm\:my-15{margin-top:3.75rem;margin-bottom:3.75rem}.sm\:mx-15{margin-left:3.75rem;margin-right:3.75rem}.sm\:my-16{margin-top:4rem;margin-bottom:4rem}.sm\:mx-16{margin-left:4rem;margin-right:4rem}.sm\:my-20{margin-top:5rem;margin-bottom:5rem}.sm\:mx-20{margin-left:5rem;margin-right:5rem}.sm\:my-22{margin-top:5.5rem;margin-bottom:5.5rem}.sm\:mx-22{margin-left:5.5rem;margin-right:5.5rem}.sm\:my-24{margin-top:6rem;margin-bottom:6rem}.sm\:mx-24{margin-left:6rem;margin-right:6rem}.sm\:my-25{margin-top:6.25rem;margin-bottom:6.25rem}.sm\:mx-25{margin-left:6.25rem;margin-right:6.25rem}.sm\:my-26{margin-top:6.5rem;margin-bottom:6.5rem}.sm\:mx-26{margin-left:6.5rem;margin-right:6.5rem}.sm\:my-28{margin-top:8rem;margin-bottom:8rem}.sm\:mx-28{margin-left:8rem;margin-right:8rem}.sm\:my-30{margin-top:8.5rem;margin-bottom:8.5rem}.sm\:mx-30{margin-left:8.5rem;margin-right:8.5rem}.sm\:my-32{margin-top:9rem;margin-bottom:9rem}.sm\:mx-32{margin-left:9rem;margin-right:9rem}.sm\:my-40{margin-top:10rem;margin-bottom:10rem}.sm\:mx-40{margin-left:10rem;margin-right:10rem}.sm\:my-48{margin-top:12rem;margin-bottom:12rem}.sm\:mx-48{margin-left:12rem;margin-right:12rem}.sm\:my-52{margin-top:13rem;margin-bottom:13rem}.sm\:mx-52{margin-left:13rem;margin-right:13rem}.sm\:my-56{margin-top:14rem;margin-bottom:14rem}.sm\:mx-56{margin-left:14rem;margin-right:14rem}.sm\:my-60{margin-top:15rem;margin-bottom:15rem}.sm\:mx-60{margin-left:15rem;margin-right:15rem}.sm\:my-64{margin-top:16rem;margin-bottom:16rem}.sm\:mx-64{margin-left:16rem;margin-right:16rem}.sm\:my-68{margin-top:17rem;margin-bottom:17rem}.sm\:mx-68{margin-left:17rem;margin-right:17rem}.sm\:my-px{margin-top:1px;margin-bottom:1px}.sm\:mx-px{margin-left:1px;margin-right:1px}.sm\:-my-px{margin-top:-1px;margin-bottom:-1px}.sm\:-mx-px{margin-left:-1px;margin-right:-1px}.sm\:-my-2px{margin-top:-2px;margin-bottom:-2px}.sm\:-mx-2px{margin-left:-2px;margin-right:-2px}.sm\:my-auto{margin-top:auto;margin-bottom:auto}.sm\:mx-auto{margin-left:auto;margin-right:auto}.sm\:my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.sm\:mx-0\.5{margin-left:.125rem;margin-right:.125rem}.sm\:my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.sm\:mx-1\.5{margin-left:.375rem;margin-right:.375rem}.sm\:my-2\.5{margin-top:.625rem;margin-bottom:.625rem}.sm\:mx-2\.5{margin-left:.625rem;margin-right:.625rem}.sm\:my-7\.5{margin-top:1.875rem;margin-bottom:1.875rem}.sm\:mx-7\.5{margin-left:1.875rem;margin-right:1.875rem}.sm\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.sm\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.sm\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.sm\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.sm\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.sm\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.sm\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.sm\:-mx-4{margin-left:-1rem;margin-right:-1rem}.sm\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.sm\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.sm\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-7{margin-top:-1.75rem;margin-bottom:-1.75rem}.sm\:-mx-7{margin-left:-1.75rem;margin-right:-1.75rem}.sm\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.sm\:-mx-8{margin-left:-2rem;margin-right:-2rem}.sm\:-my-9{margin-top:-2.25rem;margin-bottom:-2.25rem}.sm\:-mx-9{margin-left:-2.25rem;margin-right:-2.25rem}.sm\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.sm\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.sm\:-my-11{margin-top:-2.75rem;margin-bottom:-2.75rem}.sm\:-mx-11{margin-left:-2.75rem;margin-right:-2.75rem}.sm\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.sm\:-mx-12{margin-left:-3rem;margin-right:-3rem}.sm\:-my-15{margin-top:-3.75rem;margin-bottom:-3.75rem}.sm\:-mx-15{margin-left:-3.75rem;margin-right:-3.75rem}.sm\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.sm\:-mx-16{margin-left:-4rem;margin-right:-4rem}.sm\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.sm\:-mx-20{margin-left:-5rem;margin-right:-5rem}.sm\:-my-22{margin-top:-5.5rem;margin-bottom:-5.5rem}.sm\:-mx-22{margin-left:-5.5rem;margin-right:-5.5rem}.sm\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.sm\:-mx-24{margin-left:-6rem;margin-right:-6rem}.sm\:-my-25{margin-top:-6.25rem;margin-bottom:-6.25rem}.sm\:-mx-25{margin-left:-6.25rem;margin-right:-6.25rem}.sm\:-my-26{margin-top:-6.5rem;margin-bottom:-6.5rem}.sm\:-mx-26{margin-left:-6.5rem;margin-right:-6.5rem}.sm\:-my-28{margin-top:-8rem;margin-bottom:-8rem}.sm\:-mx-28{margin-left:-8rem;margin-right:-8rem}.sm\:-my-30{margin-top:-8.5rem;margin-bottom:-8.5rem}.sm\:-mx-30{margin-left:-8.5rem;margin-right:-8.5rem}.sm\:-my-32{margin-top:-9rem;margin-bottom:-9rem}.sm\:-mx-32{margin-left:-9rem;margin-right:-9rem}.sm\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.sm\:-mx-40{margin-left:-10rem;margin-right:-10rem}.sm\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.sm\:-mx-48{margin-left:-12rem;margin-right:-12rem}.sm\:-my-52{margin-top:-13rem;margin-bottom:-13rem}.sm\:-mx-52{margin-left:-13rem;margin-right:-13rem}.sm\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.sm\:-mx-56{margin-left:-14rem;margin-right:-14rem}.sm\:-my-60{margin-top:-15rem;margin-bottom:-15rem}.sm\:-mx-60{margin-left:-15rem;margin-right:-15rem}.sm\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.sm\:-mx-64{margin-left:-16rem;margin-right:-16rem}.sm\:-my-68{margin-top:-17rem;margin-bottom:-17rem}.sm\:-mx-68{margin-left:-17rem;margin-right:-17rem}.sm\:-my-0\.5{margin-top:-.125rem;margin-bottom:-.125rem}.sm\:-mx-0\.5{margin-left:-.125rem;margin-right:-.125rem}.sm\:-my-1\.5{margin-top:-.375rem;margin-bottom:-.375rem}.sm\:-mx-1\.5{margin-left:-.375rem;margin-right:-.375rem}.sm\:-my-2\.5{margin-top:-.625rem;margin-bottom:-.625rem}.sm\:-mx-2\.5{margin-left:-.625rem;margin-right:-.625rem}.sm\:-my-7\.5{margin-top:-1.875rem;margin-bottom:-1.875rem}.sm\:-mx-7\.5{margin-left:-1.875rem;margin-right:-1.875rem}.sm\:mt-0{margin-top:0}.sm\:mr-0{margin-right:0}.sm\:mb-0{margin-bottom:0}.sm\:ml-0{margin-left:0}.sm\:mt-1{margin-top:.25rem}.sm\:mr-1{margin-right:.25rem}.sm\:mb-1{margin-bottom:.25rem}.sm\:ml-1{margin-left:.25rem}.sm\:mt-2{margin-top:.5rem}.sm\:mr-2{margin-right:.5rem}.sm\:mb-2{margin-bottom:.5rem}.sm\:ml-2{margin-left:.5rem}.sm\:mt-3{margin-top:.75rem}.sm\:mr-3{margin-right:.75rem}.sm\:mb-3{margin-bottom:.75rem}.sm\:ml-3{margin-left:.75rem}.sm\:mt-4{margin-top:1rem}.sm\:mr-4{margin-right:1rem}.sm\:mb-4{margin-bottom:1rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-5{margin-top:1.25rem}.sm\:mr-5{margin-right:1.25rem}.sm\:mb-5{margin-bottom:1.25rem}.sm\:ml-5{margin-left:1.25rem}.sm\:mt-6{margin-top:1.5rem}.sm\:mr-6{margin-right:1.5rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-7{margin-top:1.75rem}.sm\:mr-7{margin-right:1.75rem}.sm\:mb-7{margin-bottom:1.75rem}.sm\:ml-7{margin-left:1.75rem}.sm\:mt-8{margin-top:2rem}.sm\:mr-8{margin-right:2rem}.sm\:mb-8{margin-bottom:2rem}.sm\:ml-8{margin-left:2rem}.sm\:mt-9{margin-top:2.25rem}.sm\:mr-9{margin-right:2.25rem}.sm\:mb-9{margin-bottom:2.25rem}.sm\:ml-9{margin-left:2.25rem}.sm\:mt-10{margin-top:2.5rem}.sm\:mr-10{margin-right:2.5rem}.sm\:mb-10{margin-bottom:2.5rem}.sm\:ml-10{margin-left:2.5rem}.sm\:mt-11{margin-top:2.75rem}.sm\:mr-11{margin-right:2.75rem}.sm\:mb-11{margin-bottom:2.75rem}.sm\:ml-11{margin-left:2.75rem}.sm\:mt-12{margin-top:3rem}.sm\:mr-12{margin-right:3rem}.sm\:mb-12{margin-bottom:3rem}.sm\:ml-12{margin-left:3rem}.sm\:mt-15{margin-top:3.75rem}.sm\:mr-15{margin-right:3.75rem}.sm\:mb-15{margin-bottom:3.75rem}.sm\:ml-15{margin-left:3.75rem}.sm\:mt-16{margin-top:4rem}.sm\:mr-16{margin-right:4rem}.sm\:mb-16{margin-bottom:4rem}.sm\:ml-16{margin-left:4rem}.sm\:mt-20{margin-top:5rem}.sm\:mr-20{margin-right:5rem}.sm\:mb-20{margin-bottom:5rem}.sm\:ml-20{margin-left:5rem}.sm\:mt-22{margin-top:5.5rem}.sm\:mr-22{margin-right:5.5rem}.sm\:mb-22{margin-bottom:5.5rem}.sm\:ml-22{margin-left:5.5rem}.sm\:mt-24{margin-top:6rem}.sm\:mr-24{margin-right:6rem}.sm\:mb-24{margin-bottom:6rem}.sm\:ml-24{margin-left:6rem}.sm\:mt-25{margin-top:6.25rem}.sm\:mr-25{margin-right:6.25rem}.sm\:mb-25{margin-bottom:6.25rem}.sm\:ml-25{margin-left:6.25rem}.sm\:mt-26{margin-top:6.5rem}.sm\:mr-26{margin-right:6.5rem}.sm\:mb-26{margin-bottom:6.5rem}.sm\:ml-26{margin-left:6.5rem}.sm\:mt-28{margin-top:8rem}.sm\:mr-28{margin-right:8rem}.sm\:mb-28{margin-bottom:8rem}.sm\:ml-28{margin-left:8rem}.sm\:mt-30{margin-top:8.5rem}.sm\:mr-30{margin-right:8.5rem}.sm\:mb-30{margin-bottom:8.5rem}.sm\:ml-30{margin-left:8.5rem}.sm\:mt-32{margin-top:9rem}.sm\:mr-32{margin-right:9rem}.sm\:mb-32{margin-bottom:9rem}.sm\:ml-32{margin-left:9rem}.sm\:mt-40{margin-top:10rem}.sm\:mr-40{margin-right:10rem}.sm\:mb-40{margin-bottom:10rem}.sm\:ml-40{margin-left:10rem}.sm\:mt-48{margin-top:12rem}.sm\:mr-48{margin-right:12rem}.sm\:mb-48{margin-bottom:12rem}.sm\:ml-48{margin-left:12rem}.sm\:mt-52{margin-top:13rem}.sm\:mr-52{margin-right:13rem}.sm\:mb-52{margin-bottom:13rem}.sm\:ml-52{margin-left:13rem}.sm\:mt-56{margin-top:14rem}.sm\:mr-56{margin-right:14rem}.sm\:mb-56{margin-bottom:14rem}.sm\:ml-56{margin-left:14rem}.sm\:mt-60{margin-top:15rem}.sm\:mr-60{margin-right:15rem}.sm\:mb-60{margin-bottom:15rem}.sm\:ml-60{margin-left:15rem}.sm\:mt-64{margin-top:16rem}.sm\:mr-64{margin-right:16rem}.sm\:mb-64{margin-bottom:16rem}.sm\:ml-64{margin-left:16rem}.sm\:mt-68{margin-top:17rem}.sm\:mr-68{margin-right:17rem}.sm\:mb-68{margin-bottom:17rem}.sm\:ml-68{margin-left:17rem}.sm\:mt-px{margin-top:1px}.sm\:mr-px{margin-right:1px}.sm\:mb-px{margin-bottom:1px}.sm\:ml-px{margin-left:1px}.sm\:-mt-px{margin-top:-1px}.sm\:-mr-px{margin-right:-1px}.sm\:-mb-px{margin-bottom:-1px}.sm\:-ml-px{margin-left:-1px}.sm\:-mt-2px{margin-top:-2px}.sm\:-mr-2px{margin-right:-2px}.sm\:-mb-2px{margin-bottom:-2px}.sm\:-ml-2px{margin-left:-2px}.sm\:mt-auto{margin-top:auto}.sm\:mr-auto{margin-right:auto}.sm\:mb-auto{margin-bottom:auto}.sm\:ml-auto{margin-left:auto}.sm\:mt-0\.5{margin-top:.125rem}.sm\:mr-0\.5{margin-right:.125rem}.sm\:mb-0\.5{margin-bottom:.125rem}.sm\:ml-0\.5{margin-left:.125rem}.sm\:mt-1\.5{margin-top:.375rem}.sm\:mr-1\.5{margin-right:.375rem}.sm\:mb-1\.5{margin-bottom:.375rem}.sm\:ml-1\.5{margin-left:.375rem}.sm\:mt-2\.5{margin-top:.625rem}.sm\:mr-2\.5{margin-right:.625rem}.sm\:mb-2\.5{margin-bottom:.625rem}.sm\:ml-2\.5{margin-left:.625rem}.sm\:mt-7\.5{margin-top:1.875rem}.sm\:mr-7\.5{margin-right:1.875rem}.sm\:mb-7\.5{margin-bottom:1.875rem}.sm\:ml-7\.5{margin-left:1.875rem}.sm\:-mt-1{margin-top:-.25rem}.sm\:-mr-1{margin-right:-.25rem}.sm\:-mb-1{margin-bottom:-.25rem}.sm\:-ml-1{margin-left:-.25rem}.sm\:-mt-2{margin-top:-.5rem}.sm\:-mr-2{margin-right:-.5rem}.sm\:-mb-2{margin-bottom:-.5rem}.sm\:-ml-2{margin-left:-.5rem}.sm\:-mt-3{margin-top:-.75rem}.sm\:-mr-3{margin-right:-.75rem}.sm\:-mb-3{margin-bottom:-.75rem}.sm\:-ml-3{margin-left:-.75rem}.sm\:-mt-4{margin-top:-1rem}.sm\:-mr-4{margin-right:-1rem}.sm\:-mb-4{margin-bottom:-1rem}.sm\:-ml-4{margin-left:-1rem}.sm\:-mt-5{margin-top:-1.25rem}.sm\:-mr-5{margin-right:-1.25rem}.sm\:-mb-5{margin-bottom:-1.25rem}.sm\:-ml-5{margin-left:-1.25rem}.sm\:-mt-6{margin-top:-1.5rem}.sm\:-mr-6{margin-right:-1.5rem}.sm\:-mb-6{margin-bottom:-1.5rem}.sm\:-ml-6{margin-left:-1.5rem}.sm\:-mt-7{margin-top:-1.75rem}.sm\:-mr-7{margin-right:-1.75rem}.sm\:-mb-7{margin-bottom:-1.75rem}.sm\:-ml-7{margin-left:-1.75rem}.sm\:-mt-8{margin-top:-2rem}.sm\:-mr-8{margin-right:-2rem}.sm\:-mb-8{margin-bottom:-2rem}.sm\:-ml-8{margin-left:-2rem}.sm\:-mt-9{margin-top:-2.25rem}.sm\:-mr-9{margin-right:-2.25rem}.sm\:-mb-9{margin-bottom:-2.25rem}.sm\:-ml-9{margin-left:-2.25rem}.sm\:-mt-10{margin-top:-2.5rem}.sm\:-mr-10{margin-right:-2.5rem}.sm\:-mb-10{margin-bottom:-2.5rem}.sm\:-ml-10{margin-left:-2.5rem}.sm\:-mt-11{margin-top:-2.75rem}.sm\:-mr-11{margin-right:-2.75rem}.sm\:-mb-11{margin-bottom:-2.75rem}.sm\:-ml-11{margin-left:-2.75rem}.sm\:-mt-12{margin-top:-3rem}.sm\:-mr-12{margin-right:-3rem}.sm\:-mb-12{margin-bottom:-3rem}.sm\:-ml-12{margin-left:-3rem}.sm\:-mt-15{margin-top:-3.75rem}.sm\:-mr-15{margin-right:-3.75rem}.sm\:-mb-15{margin-bottom:-3.75rem}.sm\:-ml-15{margin-left:-3.75rem}.sm\:-mt-16{margin-top:-4rem}.sm\:-mr-16{margin-right:-4rem}.sm\:-mb-16{margin-bottom:-4rem}.sm\:-ml-16{margin-left:-4rem}.sm\:-mt-20{margin-top:-5rem}.sm\:-mr-20{margin-right:-5rem}.sm\:-mb-20{margin-bottom:-5rem}.sm\:-ml-20{margin-left:-5rem}.sm\:-mt-22{margin-top:-5.5rem}.sm\:-mr-22{margin-right:-5.5rem}.sm\:-mb-22{margin-bottom:-5.5rem}.sm\:-ml-22{margin-left:-5.5rem}.sm\:-mt-24{margin-top:-6rem}.sm\:-mr-24{margin-right:-6rem}.sm\:-mb-24{margin-bottom:-6rem}.sm\:-ml-24{margin-left:-6rem}.sm\:-mt-25{margin-top:-6.25rem}.sm\:-mr-25{margin-right:-6.25rem}.sm\:-mb-25{margin-bottom:-6.25rem}.sm\:-ml-25{margin-left:-6.25rem}.sm\:-mt-26{margin-top:-6.5rem}.sm\:-mr-26{margin-right:-6.5rem}.sm\:-mb-26{margin-bottom:-6.5rem}.sm\:-ml-26{margin-left:-6.5rem}.sm\:-mt-28{margin-top:-8rem}.sm\:-mr-28{margin-right:-8rem}.sm\:-mb-28{margin-bottom:-8rem}.sm\:-ml-28{margin-left:-8rem}.sm\:-mt-30{margin-top:-8.5rem}.sm\:-mr-30{margin-right:-8.5rem}.sm\:-mb-30{margin-bottom:-8.5rem}.sm\:-ml-30{margin-left:-8.5rem}.sm\:-mt-32{margin-top:-9rem}.sm\:-mr-32{margin-right:-9rem}.sm\:-mb-32{margin-bottom:-9rem}.sm\:-ml-32{margin-left:-9rem}.sm\:-mt-40{margin-top:-10rem}.sm\:-mr-40{margin-right:-10rem}.sm\:-mb-40{margin-bottom:-10rem}.sm\:-ml-40{margin-left:-10rem}.sm\:-mt-48{margin-top:-12rem}.sm\:-mr-48{margin-right:-12rem}.sm\:-mb-48{margin-bottom:-12rem}.sm\:-ml-48{margin-left:-12rem}.sm\:-mt-52{margin-top:-13rem}.sm\:-mr-52{margin-right:-13rem}.sm\:-mb-52{margin-bottom:-13rem}.sm\:-ml-52{margin-left:-13rem}.sm\:-mt-56{margin-top:-14rem}.sm\:-mr-56{margin-right:-14rem}.sm\:-mb-56{margin-bottom:-14rem}.sm\:-ml-56{margin-left:-14rem}.sm\:-mt-60{margin-top:-15rem}.sm\:-mr-60{margin-right:-15rem}.sm\:-mb-60{margin-bottom:-15rem}.sm\:-ml-60{margin-left:-15rem}.sm\:-mt-64{margin-top:-16rem}.sm\:-mr-64{margin-right:-16rem}.sm\:-mb-64{margin-bottom:-16rem}.sm\:-ml-64{margin-left:-16rem}.sm\:-mt-68{margin-top:-17rem}.sm\:-mr-68{margin-right:-17rem}.sm\:-mb-68{margin-bottom:-17rem}.sm\:-ml-68{margin-left:-17rem}.sm\:-mt-0\.5{margin-top:-.125rem}.sm\:-mr-0\.5{margin-right:-.125rem}.sm\:-mb-0\.5{margin-bottom:-.125rem}.sm\:-ml-0\.5{margin-left:-.125rem}.sm\:-mt-1\.5{margin-top:-.375rem}.sm\:-mr-1\.5{margin-right:-.375rem}.sm\:-mb-1\.5{margin-bottom:-.375rem}.sm\:-ml-1\.5{margin-left:-.375rem}.sm\:-mt-2\.5{margin-top:-.625rem}.sm\:-mr-2\.5{margin-right:-.625rem}.sm\:-mb-2\.5{margin-bottom:-.625rem}.sm\:-ml-2\.5{margin-left:-.625rem}.sm\:-mt-7\.5{margin-top:-1.875rem}.sm\:-mr-7\.5{margin-right:-1.875rem}.sm\:-mb-7\.5{margin-bottom:-1.875rem}.sm\:-ml-7\.5{margin-left:-1.875rem}.sm\:max-h-0{max-height:0}.sm\:max-h-1{max-height:.25rem}.sm\:max-h-2{max-height:.5rem}.sm\:max-h-3{max-height:.75rem}.sm\:max-h-4{max-height:1rem}.sm\:max-h-5{max-height:1.25rem}.sm\:max-h-6{max-height:1.5rem}.sm\:max-h-7{max-height:1.75rem}.sm\:max-h-8{max-height:2rem}.sm\:max-h-9{max-height:2.25rem}.sm\:max-h-10{max-height:2.5rem}.sm\:max-h-11{max-height:2.75rem}.sm\:max-h-12{max-height:3rem}.sm\:max-h-15{max-height:3.75rem}.sm\:max-h-16{max-height:4rem}.sm\:max-h-20{max-height:5rem}.sm\:max-h-22{max-height:5.5rem}.sm\:max-h-24{max-height:6rem}.sm\:max-h-25{max-height:6.25rem}.sm\:max-h-26{max-height:6.5rem}.sm\:max-h-28{max-height:8rem}.sm\:max-h-30{max-height:8.5rem}.sm\:max-h-32{max-height:9rem}.sm\:max-h-40{max-height:10rem}.sm\:max-h-48{max-height:12rem}.sm\:max-h-52{max-height:13rem}.sm\:max-h-56{max-height:14rem}.sm\:max-h-60{max-height:15rem}.sm\:max-h-64{max-height:16rem}.sm\:max-h-68{max-height:17rem}.sm\:max-h-px{max-height:1px}.sm\:max-h-0\.5{max-height:.125rem}.sm\:max-h-1\.5{max-height:.375rem}.sm\:max-h-2\.5{max-height:.625rem}.sm\:max-h-7\.5{max-height:1.875rem}.sm\:max-h-full{max-height:100%}.sm\:max-h-screen{max-height:100vh}.sm\:max-w-none{max-width:none}.sm\:max-w-xs{max-width:20rem}.sm\:max-w-sm{max-width:30rem}.sm\:max-w-md{max-width:40rem}.sm\:max-w-lg{max-width:50rem}.sm\:max-w-xl{max-width:60rem}.sm\:max-w-2xl{max-width:70rem}.sm\:max-w-3xl{max-width:80rem}.sm\:max-w-4xl{max-width:90rem}.sm\:max-w-5xl{max-width:100rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-full{max-width:100%}.sm\:max-w-screen-sm{max-width:40.01em}.sm\:max-w-screen-md{max-width:50.01em}.sm\:max-w-screen-lg{max-width:64.01em}.sm\:max-w-screen-xl{max-width:76.26em}.sm\:max-w-1\/4{max-width:25%}.sm\:max-w-1\/2{max-width:50%}.sm\:max-w-3\/5{max-width:60%}.sm\:max-w-4\/5{max-width:80%}.sm\:max-w-9\/10{max-width:90%}.sm\:max-w-site-mini{max-width:17.5rem}.sm\:max-w-site-small{max-width:31.25rem}.sm\:max-w-site-medium{max-width:43.75rem}.sm\:max-w-site-large{max-width:56.25rem}.sm\:max-w-site-xxl{max-width:90rem}.sm\:max-w-site{max-width:73.75rem}.sm\:max-w-screen{max-width:100vw}.sm\:min-h-0{min-height:0}.sm\:min-h-full{min-height:100%}.sm\:min-h-screen{min-height:100vh}.sm\:min-w-0{min-width:0}.sm\:min-w-full{min-width:100%}.sm\:min-w-min{min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content}.sm\:min-w-max{min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content}.sm\:min-w-site{min-width:18.75rem}.sm\:min-w-input-mini{min-width:17.5rem}.sm\:min-w-input-small{min-width:31.25rem}.sm\:min-w-input-medium{min-width:36.3125rem}.sm\:min-w-input-large{min-width:61.45rem}.sm\:min-w-button-mini{min-width:5.5rem}.sm\:min-w-button-small{min-width:7rem}.sm\:min-w-button-medium{min-width:9.875rem}.sm\:min-w-button-large{min-width:10rem}.sm\:object-contain{-o-object-fit:contain;object-fit:contain}.sm\:object-cover{-o-object-fit:cover;object-fit:cover}.sm\:object-fill{-o-object-fit:fill;object-fit:fill}.sm\:object-none{-o-object-fit:none;object-fit:none}.sm\:object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.sm\:object-bottom{-o-object-position:bottom;object-position:bottom}.sm\:object-center{-o-object-position:center;object-position:center}.sm\:object-left{-o-object-position:left;object-position:left}.sm\:object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.sm\:object-left-top{-o-object-position:left top;object-position:left top}.sm\:object-right{-o-object-position:right;object-position:right}.sm\:object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.sm\:object-right-top{-o-object-position:right top;object-position:right top}.sm\:object-top{-o-object-position:top;object-position:top}.sm\:opacity-0{opacity:0}.sm\:opacity-25{opacity:.25}.sm\:opacity-50{opacity:.5}.sm\:opacity-75{opacity:.75}.sm\:opacity-100{opacity:1}.sm\:hover\:opacity-0:hover{opacity:0}.sm\:hover\:opacity-25:hover{opacity:.25}.sm\:hover\:opacity-50:hover{opacity:.5}.sm\:hover\:opacity-75:hover{opacity:.75}.sm\:hover\:opacity-100:hover{opacity:1}.sm\:focus\:opacity-0:focus{opacity:0}.sm\:focus\:opacity-25:focus{opacity:.25}.sm\:focus\:opacity-50:focus{opacity:.5}.sm\:focus\:opacity-75:focus{opacity:.75}.sm\:focus\:opacity-100:focus{opacity:1}.group:hover .sm\:group-hover\:opacity-0{opacity:0}.group:hover .sm\:group-hover\:opacity-25{opacity:.25}.group:hover .sm\:group-hover\:opacity-50{opacity:.5}.group:hover .sm\:group-hover\:opacity-75{opacity:.75}.group:hover .sm\:group-hover\:opacity-100{opacity:1}.sm\:outline-none{outline:2px solid transparent;outline-offset:2px}.sm\:outline-white{outline:2px dotted #fff;outline-offset:2px}.sm\:outline-black{outline:2px dotted #000;outline-offset:2px}.sm\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.sm\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.sm\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.sm\:overflow-auto{overflow:auto}.sm\:overflow-hidden{overflow:hidden}.sm\:overflow-visible{overflow:visible}.sm\:overflow-scroll{overflow:scroll}.sm\:overflow-x-auto{overflow-x:auto}.sm\:overflow-y-auto{overflow-y:auto}.sm\:overflow-x-hidden{overflow-x:hidden}.sm\:overflow-y-hidden{overflow-y:hidden}.sm\:overflow-x-visible{overflow-x:visible}.sm\:overflow-y-visible{overflow-y:visible}.sm\:overflow-x-scroll{overflow-x:scroll}.sm\:overflow-y-scroll{overflow-y:scroll}.sm\:scrolling-touch{-webkit-overflow-scrolling:touch}.sm\:scrolling-auto{-webkit-overflow-scrolling:auto}.sm\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.sm\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.sm\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.sm\:overscroll-y-auto{overscroll-behavior-y:auto}.sm\:overscroll-y-contain{overscroll-behavior-y:contain}.sm\:overscroll-y-none{overscroll-behavior-y:none}.sm\:overscroll-x-auto{overscroll-behavior-x:auto}.sm\:overscroll-x-contain{overscroll-behavior-x:contain}.sm\:overscroll-x-none{overscroll-behavior-x:none}.sm\:p-0{padding:0}.sm\:p-1{padding:.25rem}.sm\:p-2{padding:.5rem}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-5{padding:1.25rem}.sm\:p-6{padding:1.5rem}.sm\:p-7{padding:1.75rem}.sm\:p-8{padding:2rem}.sm\:p-9{padding:2.25rem}.sm\:p-10{padding:2.5rem}.sm\:p-11{padding:2.75rem}.sm\:p-12{padding:3rem}.sm\:p-15{padding:3.75rem}.sm\:p-16{padding:4rem}.sm\:p-20{padding:5rem}.sm\:p-22{padding:5.5rem}.sm\:p-24{padding:6rem}.sm\:p-25{padding:6.25rem}.sm\:p-26{padding:6.5rem}.sm\:p-28{padding:8rem}.sm\:p-30{padding:8.5rem}.sm\:p-32{padding:9rem}.sm\:p-40{padding:10rem}.sm\:p-48{padding:12rem}.sm\:p-52{padding:13rem}.sm\:p-56{padding:14rem}.sm\:p-60{padding:15rem}.sm\:p-64{padding:16rem}.sm\:p-68{padding:17rem}.sm\:p-px{padding:1px}.sm\:p-0\.5{padding:.125rem}.sm\:p-1\.5{padding:.375rem}.sm\:p-2\.5{padding:.625rem}.sm\:p-7\.5{padding:1.875rem}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:px-0{padding-left:0;padding-right:0}.sm\:py-1{padding-top:.25rem;padding-bottom:.25rem}.sm\:px-1{padding-left:.25rem;padding-right:.25rem}.sm\:py-2{padding-top:.5rem;padding-bottom:.5rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-7{padding-top:1.75rem;padding-bottom:1.75rem}.sm\:px-7{padding-left:1.75rem;padding-right:1.75rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:py-9{padding-top:2.25rem;padding-bottom:2.25rem}.sm\:px-9{padding-left:2.25rem;padding-right:2.25rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:px-10{padding-left:2.5rem;padding-right:2.5rem}.sm\:py-11{padding-top:2.75rem;padding-bottom:2.75rem}.sm\:px-11{padding-left:2.75rem;padding-right:2.75rem}.sm\:py-12{padding-top:3rem;padding-bottom:3rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:py-15{padding-top:3.75rem;padding-bottom:3.75rem}.sm\:px-15{padding-left:3.75rem;padding-right:3.75rem}.sm\:py-16{padding-top:4rem;padding-bottom:4rem}.sm\:px-16{padding-left:4rem;padding-right:4rem}.sm\:py-20{padding-top:5rem;padding-bottom:5rem}.sm\:px-20{padding-left:5rem;padding-right:5rem}.sm\:py-22{padding-top:5.5rem;padding-bottom:5.5rem}.sm\:px-22{padding-left:5.5rem;padding-right:5.5rem}.sm\:py-24{padding-top:6rem;padding-bottom:6rem}.sm\:px-24{padding-left:6rem;padding-right:6rem}.sm\:py-25{padding-top:6.25rem;padding-bottom:6.25rem}.sm\:px-25{padding-left:6.25rem;padding-right:6.25rem}.sm\:py-26{padding-top:6.5rem;padding-bottom:6.5rem}.sm\:px-26{padding-left:6.5rem;padding-right:6.5rem}.sm\:py-28{padding-top:8rem;padding-bottom:8rem}.sm\:px-28{padding-left:8rem;padding-right:8rem}.sm\:py-30{padding-top:8.5rem;padding-bottom:8.5rem}.sm\:px-30{padding-left:8.5rem;padding-right:8.5rem}.sm\:py-32{padding-top:9rem;padding-bottom:9rem}.sm\:px-32{padding-left:9rem;padding-right:9rem}.sm\:py-40{padding-top:10rem;padding-bottom:10rem}.sm\:px-40{padding-left:10rem;padding-right:10rem}.sm\:py-48{padding-top:12rem;padding-bottom:12rem}.sm\:px-48{padding-left:12rem;padding-right:12rem}.sm\:py-52{padding-top:13rem;padding-bottom:13rem}.sm\:px-52{padding-left:13rem;padding-right:13rem}.sm\:py-56{padding-top:14rem;padding-bottom:14rem}.sm\:px-56{padding-left:14rem;padding-right:14rem}.sm\:py-60{padding-top:15rem;padding-bottom:15rem}.sm\:px-60{padding-left:15rem;padding-right:15rem}.sm\:py-64{padding-top:16rem;padding-bottom:16rem}.sm\:px-64{padding-left:16rem;padding-right:16rem}.sm\:py-68{padding-top:17rem;padding-bottom:17rem}.sm\:px-68{padding-left:17rem;padding-right:17rem}.sm\:py-px{padding-top:1px;padding-bottom:1px}.sm\:px-px{padding-left:1px;padding-right:1px}.sm\:py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.sm\:px-0\.5{padding-left:.125rem;padding-right:.125rem}.sm\:py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.sm\:px-1\.5{padding-left:.375rem;padding-right:.375rem}.sm\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.sm\:px-2\.5{padding-left:.625rem;padding-right:.625rem}.sm\:py-7\.5{padding-top:1.875rem;padding-bottom:1.875rem}.sm\:px-7\.5{padding-left:1.875rem;padding-right:1.875rem}.sm\:pt-0{padding-top:0}.sm\:pr-0{padding-right:0}.sm\:pb-0{padding-bottom:0}.sm\:pl-0{padding-left:0}.sm\:pt-1{padding-top:.25rem}.sm\:pr-1{padding-right:.25rem}.sm\:pb-1{padding-bottom:.25rem}.sm\:pl-1{padding-left:.25rem}.sm\:pt-2{padding-top:.5rem}.sm\:pr-2{padding-right:.5rem}.sm\:pb-2{padding-bottom:.5rem}.sm\:pl-2{padding-left:.5rem}.sm\:pt-3{padding-top:.75rem}.sm\:pr-3{padding-right:.75rem}.sm\:pb-3{padding-bottom:.75rem}.sm\:pl-3{padding-left:.75rem}.sm\:pt-4{padding-top:1rem}.sm\:pr-4{padding-right:1rem}.sm\:pb-4{padding-bottom:1rem}.sm\:pl-4{padding-left:1rem}.sm\:pt-5{padding-top:1.25rem}.sm\:pr-5{padding-right:1.25rem}.sm\:pb-5{padding-bottom:1.25rem}.sm\:pl-5{padding-left:1.25rem}.sm\:pt-6{padding-top:1.5rem}.sm\:pr-6{padding-right:1.5rem}.sm\:pb-6{padding-bottom:1.5rem}.sm\:pl-6{padding-left:1.5rem}.sm\:pt-7{padding-top:1.75rem}.sm\:pr-7{padding-right:1.75rem}.sm\:pb-7{padding-bottom:1.75rem}.sm\:pl-7{padding-left:1.75rem}.sm\:pt-8{padding-top:2rem}.sm\:pr-8{padding-right:2rem}.sm\:pb-8{padding-bottom:2rem}.sm\:pl-8{padding-left:2rem}.sm\:pt-9{padding-top:2.25rem}.sm\:pr-9{padding-right:2.25rem}.sm\:pb-9{padding-bottom:2.25rem}.sm\:pl-9{padding-left:2.25rem}.sm\:pt-10{padding-top:2.5rem}.sm\:pr-10{padding-right:2.5rem}.sm\:pb-10{padding-bottom:2.5rem}.sm\:pl-10{padding-left:2.5rem}.sm\:pt-11{padding-top:2.75rem}.sm\:pr-11{padding-right:2.75rem}.sm\:pb-11{padding-bottom:2.75rem}.sm\:pl-11{padding-left:2.75rem}.sm\:pt-12{padding-top:3rem}.sm\:pr-12{padding-right:3rem}.sm\:pb-12{padding-bottom:3rem}.sm\:pl-12{padding-left:3rem}.sm\:pt-15{padding-top:3.75rem}.sm\:pr-15{padding-right:3.75rem}.sm\:pb-15{padding-bottom:3.75rem}.sm\:pl-15{padding-left:3.75rem}.sm\:pt-16{padding-top:4rem}.sm\:pr-16{padding-right:4rem}.sm\:pb-16{padding-bottom:4rem}.sm\:pl-16{padding-left:4rem}.sm\:pt-20{padding-top:5rem}.sm\:pr-20{padding-right:5rem}.sm\:pb-20{padding-bottom:5rem}.sm\:pl-20{padding-left:5rem}.sm\:pt-22{padding-top:5.5rem}.sm\:pr-22{padding-right:5.5rem}.sm\:pb-22{padding-bottom:5.5rem}.sm\:pl-22{padding-left:5.5rem}.sm\:pt-24{padding-top:6rem}.sm\:pr-24{padding-right:6rem}.sm\:pb-24{padding-bottom:6rem}.sm\:pl-24{padding-left:6rem}.sm\:pt-25{padding-top:6.25rem}.sm\:pr-25{padding-right:6.25rem}.sm\:pb-25{padding-bottom:6.25rem}.sm\:pl-25{padding-left:6.25rem}.sm\:pt-26{padding-top:6.5rem}.sm\:pr-26{padding-right:6.5rem}.sm\:pb-26{padding-bottom:6.5rem}.sm\:pl-26{padding-left:6.5rem}.sm\:pt-28{padding-top:8rem}.sm\:pr-28{padding-right:8rem}.sm\:pb-28{padding-bottom:8rem}.sm\:pl-28{padding-left:8rem}.sm\:pt-30{padding-top:8.5rem}.sm\:pr-30{padding-right:8.5rem}.sm\:pb-30{padding-bottom:8.5rem}.sm\:pl-30{padding-left:8.5rem}.sm\:pt-32{padding-top:9rem}.sm\:pr-32{padding-right:9rem}.sm\:pb-32{padding-bottom:9rem}.sm\:pl-32{padding-left:9rem}.sm\:pt-40{padding-top:10rem}.sm\:pr-40{padding-right:10rem}.sm\:pb-40{padding-bottom:10rem}.sm\:pl-40{padding-left:10rem}.sm\:pt-48{padding-top:12rem}.sm\:pr-48{padding-right:12rem}.sm\:pb-48{padding-bottom:12rem}.sm\:pl-48{padding-left:12rem}.sm\:pt-52{padding-top:13rem}.sm\:pr-52{padding-right:13rem}.sm\:pb-52{padding-bottom:13rem}.sm\:pl-52{padding-left:13rem}.sm\:pt-56{padding-top:14rem}.sm\:pr-56{padding-right:14rem}.sm\:pb-56{padding-bottom:14rem}.sm\:pl-56{padding-left:14rem}.sm\:pt-60{padding-top:15rem}.sm\:pr-60{padding-right:15rem}.sm\:pb-60{padding-bottom:15rem}.sm\:pl-60{padding-left:15rem}.sm\:pt-64{padding-top:16rem}.sm\:pr-64{padding-right:16rem}.sm\:pb-64{padding-bottom:16rem}.sm\:pl-64{padding-left:16rem}.sm\:pt-68{padding-top:17rem}.sm\:pr-68{padding-right:17rem}.sm\:pb-68{padding-bottom:17rem}.sm\:pl-68{padding-left:17rem}.sm\:pt-px{padding-top:1px}.sm\:pr-px{padding-right:1px}.sm\:pb-px{padding-bottom:1px}.sm\:pl-px{padding-left:1px}.sm\:pt-0\.5{padding-top:.125rem}.sm\:pr-0\.5{padding-right:.125rem}.sm\:pb-0\.5{padding-bottom:.125rem}.sm\:pl-0\.5{padding-left:.125rem}.sm\:pt-1\.5{padding-top:.375rem}.sm\:pr-1\.5{padding-right:.375rem}.sm\:pb-1\.5{padding-bottom:.375rem}.sm\:pl-1\.5{padding-left:.375rem}.sm\:pt-2\.5{padding-top:.625rem}.sm\:pr-2\.5{padding-right:.625rem}.sm\:pb-2\.5{padding-bottom:.625rem}.sm\:pl-2\.5{padding-left:.625rem}.sm\:pt-7\.5{padding-top:1.875rem}.sm\:pr-7\.5{padding-right:1.875rem}.sm\:pb-7\.5{padding-bottom:1.875rem}.sm\:pl-7\.5{padding-left:1.875rem}.sm\:placeholder-transparent::-moz-placeholder{color:transparent}.sm\:placeholder-transparent:-ms-input-placeholder{color:transparent}.sm\:placeholder-transparent::placeholder{color:transparent}.sm\:placeholder-current::-moz-placeholder{color:currentColor}.sm\:placeholder-current:-ms-input-placeholder{color:currentColor}.sm\:placeholder-current::placeholder{color:currentColor}.sm\:placeholder-black::-moz-placeholder{color:#000}.sm\:placeholder-black:-ms-input-placeholder{color:#000}.sm\:placeholder-black::placeholder{color:#000}.sm\:placeholder-white::-moz-placeholder{color:#fff}.sm\:placeholder-white:-ms-input-placeholder{color:#fff}.sm\:placeholder-white::placeholder{color:#fff}.sm\:placeholder-gray-100::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:placeholder-gray-200::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:placeholder-gray-300::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:placeholder-gray-400::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:placeholder-gray-500::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:placeholder-gray-600::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-700::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:placeholder-gray-800::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:placeholder-gray-900::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:placeholder-gray-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-DEFAULT::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-red::-moz-placeholder{color:#d64343}.sm\:placeholder-red:-ms-input-placeholder{color:#d64343}.sm\:placeholder-red::placeholder{color:#d64343}.sm\:placeholder-orange::-moz-placeholder{color:#eb6437}.sm\:placeholder-orange:-ms-input-placeholder{color:#eb6437}.sm\:placeholder-orange::placeholder{color:#eb6437}.sm\:placeholder-yellow::-moz-placeholder{color:#f8da30}.sm\:placeholder-yellow:-ms-input-placeholder{color:#f8da30}.sm\:placeholder-yellow::placeholder{color:#f8da30}.sm\:placeholder-green-100::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:placeholder-green-200::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:placeholder-green-300::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:placeholder-green-400::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:placeholder-green-500::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:placeholder-green-600::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-700::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:placeholder-green-800::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:placeholder-green-900::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:placeholder-green-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-DEFAULT::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-teal-100::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:placeholder-teal-200::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:placeholder-teal-300::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:placeholder-teal-400::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:placeholder-teal-500::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:placeholder-teal-600::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-700::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:placeholder-teal-800::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:placeholder-teal-900::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:placeholder-teal-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-DEFAULT::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-blue-50::-moz-placeholder{color:#d1eaff}.sm\:placeholder-blue-50:-ms-input-placeholder{color:#d1eaff}.sm\:placeholder-blue-50::placeholder{color:#d1eaff}.sm\:placeholder-blue-100::-moz-placeholder{color:#a8d7ff}.sm\:placeholder-blue-100:-ms-input-placeholder{color:#a8d7ff}.sm\:placeholder-blue-100::placeholder{color:#a8d7ff}.sm\:placeholder-blue-200::-moz-placeholder{color:#80c4ff}.sm\:placeholder-blue-200:-ms-input-placeholder{color:#80c4ff}.sm\:placeholder-blue-200::placeholder{color:#80c4ff}.sm\:placeholder-blue-300::-moz-placeholder{color:#57b0ff}.sm\:placeholder-blue-300:-ms-input-placeholder{color:#57b0ff}.sm\:placeholder-blue-300::placeholder{color:#57b0ff}.sm\:placeholder-blue-400::-moz-placeholder{color:#2e9dff}.sm\:placeholder-blue-400:-ms-input-placeholder{color:#2e9dff}.sm\:placeholder-blue-400::placeholder{color:#2e9dff}.sm\:placeholder-blue-500::-moz-placeholder{color:#058aff}.sm\:placeholder-blue-500:-ms-input-placeholder{color:#058aff}.sm\:placeholder-blue-500::placeholder{color:#058aff}.sm\:placeholder-blue-600::-moz-placeholder{color:#0075db}.sm\:placeholder-blue-600:-ms-input-placeholder{color:#0075db}.sm\:placeholder-blue-600::placeholder{color:#0075db}.sm\:placeholder-blue-700::-moz-placeholder{color:#005fb3}.sm\:placeholder-blue-700:-ms-input-placeholder{color:#005fb3}.sm\:placeholder-blue-700::placeholder{color:#005fb3}.sm\:placeholder-blue-800::-moz-placeholder{color:#00498a}.sm\:placeholder-blue-800:-ms-input-placeholder{color:#00498a}.sm\:placeholder-blue-800::placeholder{color:#00498a}.sm\:placeholder-blue-900::-moz-placeholder{color:#003461}.sm\:placeholder-blue-900:-ms-input-placeholder{color:#003461}.sm\:placeholder-blue-900::placeholder{color:#003461}.sm\:placeholder-blue-DEFAULT::-moz-placeholder{color:#0075db}.sm\:placeholder-blue-DEFAULT:-ms-input-placeholder{color:#0075db}.sm\:placeholder-blue-DEFAULT::placeholder{color:#0075db}.sm\:placeholder-blue::-moz-placeholder{color:#0075db}.sm\:placeholder-blue:-ms-input-placeholder{color:#0075db}.sm\:placeholder-blue::placeholder{color:#0075db}.sm\:placeholder-indigo-100::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:placeholder-indigo-200::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:placeholder-indigo-300::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:placeholder-indigo-400::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:placeholder-indigo-500::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:placeholder-indigo-600::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-700::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:placeholder-indigo-800::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:placeholder-indigo-900::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:placeholder-indigo-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-DEFAULT::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-purple-100::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:placeholder-purple-200::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:placeholder-purple-300::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:placeholder-purple-400::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:placeholder-purple-500::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:placeholder-purple-600::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-700::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:placeholder-purple-800::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:placeholder-purple-900::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:placeholder-purple-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-DEFAULT::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-pink::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.sm\:placeholder-pink:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.sm\:placeholder-pink::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.sm\:placeholder-inherit::-moz-placeholder{color:inherit}.sm\:placeholder-inherit:-ms-input-placeholder{color:inherit}.sm\:placeholder-inherit::placeholder{color:inherit}.sm\:placeholder-amber::-moz-placeholder{color:#d78737}.sm\:placeholder-amber:-ms-input-placeholder{color:#d78737}.sm\:placeholder-amber::placeholder{color:#d78737}.sm\:placeholder-amber-active::-moz-placeholder{color:#e3872b}.sm\:placeholder-amber-active:-ms-input-placeholder{color:#e3872b}.sm\:placeholder-amber-active::placeholder{color:#e3872b}.sm\:placeholder-ardoise::-moz-placeholder{color:#596a82}.sm\:placeholder-ardoise:-ms-input-placeholder{color:#596a82}.sm\:placeholder-ardoise::placeholder{color:#596a82}.sm\:placeholder-ardoise-active::-moz-placeholder{color:#476794}.sm\:placeholder-ardoise-active:-ms-input-placeholder{color:#476794}.sm\:placeholder-ardoise-active::placeholder{color:#476794}.sm\:placeholder-blue-active::-moz-placeholder{color:#14a5c2}.sm\:placeholder-blue-active:-ms-input-placeholder{color:#14a5c2}.sm\:placeholder-blue-active::placeholder{color:#14a5c2}.sm\:placeholder-lightBlue::-moz-placeholder{color:rgba(0,85,138,.1)}.sm\:placeholder-lightBlue:-ms-input-placeholder{color:rgba(0,85,138,.1)}.sm\:placeholder-lightBlue::placeholder{color:rgba(0,85,138,.1)}.sm\:placeholder-lightBlue-active::-moz-placeholder{color:rgba(0,85,138,.1)}.sm\:placeholder-lightBlue-active:-ms-input-placeholder{color:rgba(0,85,138,.1)}.sm\:placeholder-lightBlue-active::placeholder{color:rgba(0,85,138,.1)}.sm\:placeholder-deepBlue::-moz-placeholder{color:#0e346c}.sm\:placeholder-deepBlue:-ms-input-placeholder{color:#0e346c}.sm\:placeholder-deepBlue::placeholder{color:#0e346c}.sm\:placeholder-deepBlue-active::-moz-placeholder{color:#0a3f8f}.sm\:placeholder-deepBlue-active:-ms-input-placeholder{color:#0a3f8f}.sm\:placeholder-deepBlue-active::placeholder{color:#0a3f8f}.sm\:placeholder-gold::-moz-placeholder{color:#bd9e56}.sm\:placeholder-gold:-ms-input-placeholder{color:#bd9e56}.sm\:placeholder-gold::placeholder{color:#bd9e56}.sm\:placeholder-gold-active::-moz-placeholder{color:#c9a34a}.sm\:placeholder-gold-active:-ms-input-placeholder{color:#c9a34a}.sm\:placeholder-gold-active::placeholder{color:#c9a34a}.sm\:placeholder-grenadine::-moz-placeholder{color:#c35078}.sm\:placeholder-grenadine:-ms-input-placeholder{color:#c35078}.sm\:placeholder-grenadine::placeholder{color:#c35078}.sm\:placeholder-grenadine-active::-moz-placeholder{color:#cf4475}.sm\:placeholder-grenadine-active:-ms-input-placeholder{color:#cf4475}.sm\:placeholder-grenadine-active::placeholder{color:#cf4475}.sm\:placeholder-kiwi::-moz-placeholder{color:#9a9f1e}.sm\:placeholder-kiwi:-ms-input-placeholder{color:#9a9f1e}.sm\:placeholder-kiwi::placeholder{color:#9a9f1e}.sm\:placeholder-kiwi-active::-moz-placeholder{color:#a3a815}.sm\:placeholder-kiwi-active:-ms-input-placeholder{color:#a3a815}.sm\:placeholder-kiwi-active::placeholder{color:#a3a815}.sm\:placeholder-lilas::-moz-placeholder{color:#7ea1d3}.sm\:placeholder-lilas:-ms-input-placeholder{color:#7ea1d3}.sm\:placeholder-lilas::placeholder{color:#7ea1d3}.sm\:placeholder-lilas-active::-moz-placeholder{color:#75a0db}.sm\:placeholder-lilas-active:-ms-input-placeholder{color:#75a0db}.sm\:placeholder-lilas-active::placeholder{color:#75a0db}.sm\:placeholder-mahogany::-moz-placeholder{color:#57142e}.sm\:placeholder-mahogany:-ms-input-placeholder{color:#57142e}.sm\:placeholder-mahogany::placeholder{color:#57142e}.sm\:placeholder-mahogany-active::-moz-placeholder{color:#610a2b}.sm\:placeholder-mahogany-active:-ms-input-placeholder{color:#610a2b}.sm\:placeholder-mahogany-active::placeholder{color:#610a2b}.sm\:placeholder-ocher::-moz-placeholder{color:#c29614}.sm\:placeholder-ocher:-ms-input-placeholder{color:#c29614}.sm\:placeholder-ocher::placeholder{color:#c29614}.sm\:placeholder-ocher-active::-moz-placeholder{color:#cd9c0a}.sm\:placeholder-ocher-active:-ms-input-placeholder{color:#cd9c0a}.sm\:placeholder-ocher-active::placeholder{color:#cd9c0a}.sm\:placeholder-pine::-moz-placeholder{color:#144d52}.sm\:placeholder-pine:-ms-input-placeholder{color:#144d52}.sm\:placeholder-pine::placeholder{color:#144d52}.sm\:placeholder-pine-active::-moz-placeholder{color:#0a555c}.sm\:placeholder-pine-active:-ms-input-placeholder{color:#0a555c}.sm\:placeholder-pine-active::placeholder{color:#0a555c}.sm\:placeholder-platinum::-moz-placeholder{color:#000}.sm\:placeholder-platinum:-ms-input-placeholder{color:#000}.sm\:placeholder-platinum::placeholder{color:#000}.sm\:placeholder-platinum-active::-moz-placeholder{color:#000}.sm\:placeholder-platinum-active:-ms-input-placeholder{color:#000}.sm\:placeholder-platinum-active::placeholder{color:#000}.sm\:placeholder-prune::-moz-placeholder{color:#661456}.sm\:placeholder-prune:-ms-input-placeholder{color:#661456}.sm\:placeholder-prune::placeholder{color:#661456}.sm\:placeholder-prune-active::-moz-placeholder{color:#72085d}.sm\:placeholder-prune-active:-ms-input-placeholder{color:#72085d}.sm\:placeholder-prune-active::placeholder{color:#72085d}.sm\:placeholder-sand::-moz-placeholder{color:#d7be88}.sm\:placeholder-sand:-ms-input-placeholder{color:#d7be88}.sm\:placeholder-sand::placeholder{color:#d7be88}.sm\:placeholder-sand-active::-moz-placeholder{color:#dfc181}.sm\:placeholder-sand-active:-ms-input-placeholder{color:#dfc181}.sm\:placeholder-sand-active::placeholder{color:#dfc181}.sm\:placeholder-sandPearl::-moz-placeholder{color:#f0e5d6}.sm\:placeholder-sandPearl:-ms-input-placeholder{color:#f0e5d6}.sm\:placeholder-sandPearl::placeholder{color:#f0e5d6}.sm\:placeholder-sandPearl-active::-moz-placeholder{color:#f2e6d4}.sm\:placeholder-sandPearl-active:-ms-input-placeholder{color:#f2e6d4}.sm\:placeholder-sandPearl-active::placeholder{color:#f2e6d4}.sm\:placeholder-silver::-moz-placeholder{color:#b1b2b4}.sm\:placeholder-silver:-ms-input-placeholder{color:#b1b2b4}.sm\:placeholder-silver::placeholder{color:#b1b2b4}.sm\:placeholder-silver-active::-moz-placeholder{color:#a9afbc}.sm\:placeholder-silver-active:-ms-input-placeholder{color:#a9afbc}.sm\:placeholder-silver-active::placeholder{color:#a9afbc}.sm\:placeholder-skyBlue::-moz-placeholder{color:#98d2d7}.sm\:placeholder-skyBlue:-ms-input-placeholder{color:#98d2d7}.sm\:placeholder-skyBlue::placeholder{color:#98d2d7}.sm\:placeholder-skyBlue-active::-moz-placeholder{color:#91d8de}.sm\:placeholder-skyBlue-active:-ms-input-placeholder{color:#91d8de}.sm\:placeholder-skyBlue-active::placeholder{color:#91d8de}.sm\:placeholder-southSea::-moz-placeholder{color:#9dc9cd}.sm\:placeholder-southSea:-ms-input-placeholder{color:#9dc9cd}.sm\:placeholder-southSea::placeholder{color:#9dc9cd}.sm\:placeholder-southSea-active::-moz-placeholder{color:#95ced5}.sm\:placeholder-southSea-active:-ms-input-placeholder{color:#95ced5}.sm\:placeholder-southSea-active::placeholder{color:#95ced5}.sm\:placeholder-turquoise::-moz-placeholder{color:#14a5c2}.sm\:placeholder-turquoise:-ms-input-placeholder{color:#14a5c2}.sm\:placeholder-turquoise::placeholder{color:#14a5c2}.sm\:placeholder-turquoise-active::-moz-placeholder{color:#0aaccd}.sm\:placeholder-turquoise-active:-ms-input-placeholder{color:#0aaccd}.sm\:placeholder-turquoise-active::placeholder{color:#0aaccd}.sm\:placeholder-waterGreen::-moz-placeholder{color:#007571}.sm\:placeholder-waterGreen:-ms-input-placeholder{color:#007571}.sm\:placeholder-waterGreen::placeholder{color:#007571}.sm\:placeholder-waterGreen-active::-moz-placeholder{color:#00a8a3}.sm\:placeholder-waterGreen-active:-ms-input-placeholder{color:#00a8a3}.sm\:placeholder-waterGreen-active::placeholder{color:#00a8a3}.sm\:placeholder-deepRed::-moz-placeholder{color:#c32222}.sm\:placeholder-deepRed:-ms-input-placeholder{color:#c32222}.sm\:placeholder-deepRed::placeholder{color:#c32222}.sm\:placeholder-deepRed-active::-moz-placeholder{color:#cf1717}.sm\:placeholder-deepRed-active:-ms-input-placeholder{color:#cf1717}.sm\:placeholder-deepRed-active::placeholder{color:#cf1717}.sm\:placeholder-emerald::-moz-placeholder{color:#14a33a}.sm\:placeholder-emerald:-ms-input-placeholder{color:#14a33a}.sm\:placeholder-emerald::placeholder{color:#14a33a}.sm\:placeholder-emerald-active::-moz-placeholder{color:#0bad36}.sm\:placeholder-emerald-active:-ms-input-placeholder{color:#0bad36}.sm\:placeholder-emerald-active::placeholder{color:#0bad36}.sm\:placeholder-greenLight::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.sm\:placeholder-greenLight:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.sm\:placeholder-greenLight::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.sm\:placeholder-orange-active::-moz-placeholder{color:#f65f2c}.sm\:placeholder-orange-active:-ms-input-placeholder{color:#f65f2c}.sm\:placeholder-orange-active::placeholder{color:#f65f2c}.sm\:placeholder-red-active::-moz-placeholder{color:#e13737}.sm\:placeholder-red-active:-ms-input-placeholder{color:#e13737}.sm\:placeholder-red-active::placeholder{color:#e13737}.sm\:placeholder-white-active::-moz-placeholder{color:#14a5c2}.sm\:placeholder-white-active:-ms-input-placeholder{color:#14a5c2}.sm\:placeholder-white-active::placeholder{color:#14a5c2}.sm\:placeholder-white-button::-moz-placeholder{color:#fff}.sm\:placeholder-white-button:-ms-input-placeholder{color:#fff}.sm\:placeholder-white-button::placeholder{color:#fff}.sm\:placeholder-white-button-active::-moz-placeholder{color:#fff}.sm\:placeholder-white-button-active:-ms-input-placeholder{color:#fff}.sm\:placeholder-white-button-active::placeholder{color:#fff}.sm\:placeholder-code::-moz-placeholder{color:#3f3d57}.sm\:placeholder-code:-ms-input-placeholder{color:#3f3d57}.sm\:placeholder-code::placeholder{color:#3f3d57}.sm\:placeholder-code-active::-moz-placeholder{color:#37354b}.sm\:placeholder-code-active:-ms-input-placeholder{color:#37354b}.sm\:placeholder-code-active::placeholder{color:#37354b}.sm\:placeholder-gray-lighter::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.sm\:placeholder-gray-lighter:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.sm\:placeholder-gray-lighter::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.sm\:placeholder-gray-lighter-active::-moz-placeholder{color:#ebebeb}.sm\:placeholder-gray-lighter-active:-ms-input-placeholder{color:#ebebeb}.sm\:placeholder-gray-lighter-active::placeholder{color:#ebebeb}.sm\:placeholder-gray-light::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.sm\:placeholder-gray-light:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.sm\:placeholder-gray-light::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.sm\:placeholder-gray-medium::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.sm\:placeholder-gray-medium:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.sm\:placeholder-gray-medium::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.sm\:placeholder-gray-darker::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.sm\:placeholder-gray-darker:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.sm\:placeholder-gray-darker::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.sm\:placeholder-gray-darker-active::-moz-placeholder{color:#14a5c2}.sm\:placeholder-gray-darker-active:-ms-input-placeholder{color:#14a5c2}.sm\:placeholder-gray-darker-active::placeholder{color:#14a5c2}.sm\:placeholder-api-default::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.sm\:placeholder-api-default:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.sm\:placeholder-api-default::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.sm\:placeholder-gray-xxl::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.sm\:placeholder-gray-xxl:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.sm\:placeholder-gray-xxl::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.sm\:placeholder-line-even::-moz-placeholder{color:#f3f6f7}.sm\:placeholder-line-even:-ms-input-placeholder{color:#f3f6f7}.sm\:placeholder-line-even::placeholder{color:#f3f6f7}.sm\:focus\:placeholder-transparent:focus::-moz-placeholder{color:transparent}.sm\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.sm\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.sm\:focus\:placeholder-current:focus::-moz-placeholder{color:currentColor}.sm\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.sm\:focus\:placeholder-current:focus::placeholder{color:currentColor}.sm\:focus\:placeholder-black:focus::-moz-placeholder{color:#000}.sm\:focus\:placeholder-black:focus:-ms-input-placeholder{color:#000}.sm\:focus\:placeholder-black:focus::placeholder{color:#000}.sm\:focus\:placeholder-white:focus::-moz-placeholder{color:#fff}.sm\:focus\:placeholder-white:focus:-ms-input-placeholder{color:#fff}.sm\:focus\:placeholder-white:focus::placeholder{color:#fff}.sm\:focus\:placeholder-gray-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-red:focus::-moz-placeholder{color:#d64343}.sm\:focus\:placeholder-red:focus:-ms-input-placeholder{color:#d64343}.sm\:focus\:placeholder-red:focus::placeholder{color:#d64343}.sm\:focus\:placeholder-orange:focus::-moz-placeholder{color:#eb6437}.sm\:focus\:placeholder-orange:focus:-ms-input-placeholder{color:#eb6437}.sm\:focus\:placeholder-orange:focus::placeholder{color:#eb6437}.sm\:focus\:placeholder-yellow:focus::-moz-placeholder{color:#f8da30}.sm\:focus\:placeholder-yellow:focus:-ms-input-placeholder{color:#f8da30}.sm\:focus\:placeholder-yellow:focus::placeholder{color:#f8da30}.sm\:focus\:placeholder-green-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-50:focus::-moz-placeholder{color:#d1eaff}.sm\:focus\:placeholder-blue-50:focus:-ms-input-placeholder{color:#d1eaff}.sm\:focus\:placeholder-blue-50:focus::placeholder{color:#d1eaff}.sm\:focus\:placeholder-blue-100:focus::-moz-placeholder{color:#a8d7ff}.sm\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{color:#a8d7ff}.sm\:focus\:placeholder-blue-100:focus::placeholder{color:#a8d7ff}.sm\:focus\:placeholder-blue-200:focus::-moz-placeholder{color:#80c4ff}.sm\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{color:#80c4ff}.sm\:focus\:placeholder-blue-200:focus::placeholder{color:#80c4ff}.sm\:focus\:placeholder-blue-300:focus::-moz-placeholder{color:#57b0ff}.sm\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{color:#57b0ff}.sm\:focus\:placeholder-blue-300:focus::placeholder{color:#57b0ff}.sm\:focus\:placeholder-blue-400:focus::-moz-placeholder{color:#2e9dff}.sm\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{color:#2e9dff}.sm\:focus\:placeholder-blue-400:focus::placeholder{color:#2e9dff}.sm\:focus\:placeholder-blue-500:focus::-moz-placeholder{color:#058aff}.sm\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{color:#058aff}.sm\:focus\:placeholder-blue-500:focus::placeholder{color:#058aff}.sm\:focus\:placeholder-blue-600:focus::-moz-placeholder{color:#0075db}.sm\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{color:#0075db}.sm\:focus\:placeholder-blue-600:focus::placeholder{color:#0075db}.sm\:focus\:placeholder-blue-700:focus::-moz-placeholder{color:#005fb3}.sm\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{color:#005fb3}.sm\:focus\:placeholder-blue-700:focus::placeholder{color:#005fb3}.sm\:focus\:placeholder-blue-800:focus::-moz-placeholder{color:#00498a}.sm\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{color:#00498a}.sm\:focus\:placeholder-blue-800:focus::placeholder{color:#00498a}.sm\:focus\:placeholder-blue-900:focus::-moz-placeholder{color:#003461}.sm\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{color:#003461}.sm\:focus\:placeholder-blue-900:focus::placeholder{color:#003461}.sm\:focus\:placeholder-blue-DEFAULT:focus::-moz-placeholder{color:#0075db}.sm\:focus\:placeholder-blue-DEFAULT:focus:-ms-input-placeholder{color:#0075db}.sm\:focus\:placeholder-blue-DEFAULT:focus::placeholder{color:#0075db}.sm\:focus\:placeholder-blue:focus::-moz-placeholder{color:#0075db}.sm\:focus\:placeholder-blue:focus:-ms-input-placeholder{color:#0075db}.sm\:focus\:placeholder-blue:focus::placeholder{color:#0075db}.sm\:focus\:placeholder-indigo-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink:focus::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink:focus::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.sm\:focus\:placeholder-inherit:focus::-moz-placeholder{color:inherit}.sm\:focus\:placeholder-inherit:focus:-ms-input-placeholder{color:inherit}.sm\:focus\:placeholder-inherit:focus::placeholder{color:inherit}.sm\:focus\:placeholder-amber:focus::-moz-placeholder{color:#d78737}.sm\:focus\:placeholder-amber:focus:-ms-input-placeholder{color:#d78737}.sm\:focus\:placeholder-amber:focus::placeholder{color:#d78737}.sm\:focus\:placeholder-amber-active:focus::-moz-placeholder{color:#e3872b}.sm\:focus\:placeholder-amber-active:focus:-ms-input-placeholder{color:#e3872b}.sm\:focus\:placeholder-amber-active:focus::placeholder{color:#e3872b}.sm\:focus\:placeholder-ardoise:focus::-moz-placeholder{color:#596a82}.sm\:focus\:placeholder-ardoise:focus:-ms-input-placeholder{color:#596a82}.sm\:focus\:placeholder-ardoise:focus::placeholder{color:#596a82}.sm\:focus\:placeholder-ardoise-active:focus::-moz-placeholder{color:#476794}.sm\:focus\:placeholder-ardoise-active:focus:-ms-input-placeholder{color:#476794}.sm\:focus\:placeholder-ardoise-active:focus::placeholder{color:#476794}.sm\:focus\:placeholder-blue-active:focus::-moz-placeholder{color:#14a5c2}.sm\:focus\:placeholder-blue-active:focus:-ms-input-placeholder{color:#14a5c2}.sm\:focus\:placeholder-blue-active:focus::placeholder{color:#14a5c2}.sm\:focus\:placeholder-lightBlue:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.sm\:focus\:placeholder-lightBlue:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.sm\:focus\:placeholder-lightBlue:focus::placeholder{color:rgba(0,85,138,.1)}.sm\:focus\:placeholder-lightBlue-active:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.sm\:focus\:placeholder-lightBlue-active:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.sm\:focus\:placeholder-lightBlue-active:focus::placeholder{color:rgba(0,85,138,.1)}.sm\:focus\:placeholder-deepBlue:focus::-moz-placeholder{color:#0e346c}.sm\:focus\:placeholder-deepBlue:focus:-ms-input-placeholder{color:#0e346c}.sm\:focus\:placeholder-deepBlue:focus::placeholder{color:#0e346c}.sm\:focus\:placeholder-deepBlue-active:focus::-moz-placeholder{color:#0a3f8f}.sm\:focus\:placeholder-deepBlue-active:focus:-ms-input-placeholder{color:#0a3f8f}.sm\:focus\:placeholder-deepBlue-active:focus::placeholder{color:#0a3f8f}.sm\:focus\:placeholder-gold:focus::-moz-placeholder{color:#bd9e56}.sm\:focus\:placeholder-gold:focus:-ms-input-placeholder{color:#bd9e56}.sm\:focus\:placeholder-gold:focus::placeholder{color:#bd9e56}.sm\:focus\:placeholder-gold-active:focus::-moz-placeholder{color:#c9a34a}.sm\:focus\:placeholder-gold-active:focus:-ms-input-placeholder{color:#c9a34a}.sm\:focus\:placeholder-gold-active:focus::placeholder{color:#c9a34a}.sm\:focus\:placeholder-grenadine:focus::-moz-placeholder{color:#c35078}.sm\:focus\:placeholder-grenadine:focus:-ms-input-placeholder{color:#c35078}.sm\:focus\:placeholder-grenadine:focus::placeholder{color:#c35078}.sm\:focus\:placeholder-grenadine-active:focus::-moz-placeholder{color:#cf4475}.sm\:focus\:placeholder-grenadine-active:focus:-ms-input-placeholder{color:#cf4475}.sm\:focus\:placeholder-grenadine-active:focus::placeholder{color:#cf4475}.sm\:focus\:placeholder-kiwi:focus::-moz-placeholder{color:#9a9f1e}.sm\:focus\:placeholder-kiwi:focus:-ms-input-placeholder{color:#9a9f1e}.sm\:focus\:placeholder-kiwi:focus::placeholder{color:#9a9f1e}.sm\:focus\:placeholder-kiwi-active:focus::-moz-placeholder{color:#a3a815}.sm\:focus\:placeholder-kiwi-active:focus:-ms-input-placeholder{color:#a3a815}.sm\:focus\:placeholder-kiwi-active:focus::placeholder{color:#a3a815}.sm\:focus\:placeholder-lilas:focus::-moz-placeholder{color:#7ea1d3}.sm\:focus\:placeholder-lilas:focus:-ms-input-placeholder{color:#7ea1d3}.sm\:focus\:placeholder-lilas:focus::placeholder{color:#7ea1d3}.sm\:focus\:placeholder-lilas-active:focus::-moz-placeholder{color:#75a0db}.sm\:focus\:placeholder-lilas-active:focus:-ms-input-placeholder{color:#75a0db}.sm\:focus\:placeholder-lilas-active:focus::placeholder{color:#75a0db}.sm\:focus\:placeholder-mahogany:focus::-moz-placeholder{color:#57142e}.sm\:focus\:placeholder-mahogany:focus:-ms-input-placeholder{color:#57142e}.sm\:focus\:placeholder-mahogany:focus::placeholder{color:#57142e}.sm\:focus\:placeholder-mahogany-active:focus::-moz-placeholder{color:#610a2b}.sm\:focus\:placeholder-mahogany-active:focus:-ms-input-placeholder{color:#610a2b}.sm\:focus\:placeholder-mahogany-active:focus::placeholder{color:#610a2b}.sm\:focus\:placeholder-ocher:focus::-moz-placeholder{color:#c29614}.sm\:focus\:placeholder-ocher:focus:-ms-input-placeholder{color:#c29614}.sm\:focus\:placeholder-ocher:focus::placeholder{color:#c29614}.sm\:focus\:placeholder-ocher-active:focus::-moz-placeholder{color:#cd9c0a}.sm\:focus\:placeholder-ocher-active:focus:-ms-input-placeholder{color:#cd9c0a}.sm\:focus\:placeholder-ocher-active:focus::placeholder{color:#cd9c0a}.sm\:focus\:placeholder-pine:focus::-moz-placeholder{color:#144d52}.sm\:focus\:placeholder-pine:focus:-ms-input-placeholder{color:#144d52}.sm\:focus\:placeholder-pine:focus::placeholder{color:#144d52}.sm\:focus\:placeholder-pine-active:focus::-moz-placeholder{color:#0a555c}.sm\:focus\:placeholder-pine-active:focus:-ms-input-placeholder{color:#0a555c}.sm\:focus\:placeholder-pine-active:focus::placeholder{color:#0a555c}.sm\:focus\:placeholder-platinum:focus::-moz-placeholder{color:#000}.sm\:focus\:placeholder-platinum:focus:-ms-input-placeholder{color:#000}.sm\:focus\:placeholder-platinum:focus::placeholder{color:#000}.sm\:focus\:placeholder-platinum-active:focus::-moz-placeholder{color:#000}.sm\:focus\:placeholder-platinum-active:focus:-ms-input-placeholder{color:#000}.sm\:focus\:placeholder-platinum-active:focus::placeholder{color:#000}.sm\:focus\:placeholder-prune:focus::-moz-placeholder{color:#661456}.sm\:focus\:placeholder-prune:focus:-ms-input-placeholder{color:#661456}.sm\:focus\:placeholder-prune:focus::placeholder{color:#661456}.sm\:focus\:placeholder-prune-active:focus::-moz-placeholder{color:#72085d}.sm\:focus\:placeholder-prune-active:focus:-ms-input-placeholder{color:#72085d}.sm\:focus\:placeholder-prune-active:focus::placeholder{color:#72085d}.sm\:focus\:placeholder-sand:focus::-moz-placeholder{color:#d7be88}.sm\:focus\:placeholder-sand:focus:-ms-input-placeholder{color:#d7be88}.sm\:focus\:placeholder-sand:focus::placeholder{color:#d7be88}.sm\:focus\:placeholder-sand-active:focus::-moz-placeholder{color:#dfc181}.sm\:focus\:placeholder-sand-active:focus:-ms-input-placeholder{color:#dfc181}.sm\:focus\:placeholder-sand-active:focus::placeholder{color:#dfc181}.sm\:focus\:placeholder-sandPearl:focus::-moz-placeholder{color:#f0e5d6}.sm\:focus\:placeholder-sandPearl:focus:-ms-input-placeholder{color:#f0e5d6}.sm\:focus\:placeholder-sandPearl:focus::placeholder{color:#f0e5d6}.sm\:focus\:placeholder-sandPearl-active:focus::-moz-placeholder{color:#f2e6d4}.sm\:focus\:placeholder-sandPearl-active:focus:-ms-input-placeholder{color:#f2e6d4}.sm\:focus\:placeholder-sandPearl-active:focus::placeholder{color:#f2e6d4}.sm\:focus\:placeholder-silver:focus::-moz-placeholder{color:#b1b2b4}.sm\:focus\:placeholder-silver:focus:-ms-input-placeholder{color:#b1b2b4}.sm\:focus\:placeholder-silver:focus::placeholder{color:#b1b2b4}.sm\:focus\:placeholder-silver-active:focus::-moz-placeholder{color:#a9afbc}.sm\:focus\:placeholder-silver-active:focus:-ms-input-placeholder{color:#a9afbc}.sm\:focus\:placeholder-silver-active:focus::placeholder{color:#a9afbc}.sm\:focus\:placeholder-skyBlue:focus::-moz-placeholder{color:#98d2d7}.sm\:focus\:placeholder-skyBlue:focus:-ms-input-placeholder{color:#98d2d7}.sm\:focus\:placeholder-skyBlue:focus::placeholder{color:#98d2d7}.sm\:focus\:placeholder-skyBlue-active:focus::-moz-placeholder{color:#91d8de}.sm\:focus\:placeholder-skyBlue-active:focus:-ms-input-placeholder{color:#91d8de}.sm\:focus\:placeholder-skyBlue-active:focus::placeholder{color:#91d8de}.sm\:focus\:placeholder-southSea:focus::-moz-placeholder{color:#9dc9cd}.sm\:focus\:placeholder-southSea:focus:-ms-input-placeholder{color:#9dc9cd}.sm\:focus\:placeholder-southSea:focus::placeholder{color:#9dc9cd}.sm\:focus\:placeholder-southSea-active:focus::-moz-placeholder{color:#95ced5}.sm\:focus\:placeholder-southSea-active:focus:-ms-input-placeholder{color:#95ced5}.sm\:focus\:placeholder-southSea-active:focus::placeholder{color:#95ced5}.sm\:focus\:placeholder-turquoise:focus::-moz-placeholder{color:#14a5c2}.sm\:focus\:placeholder-turquoise:focus:-ms-input-placeholder{color:#14a5c2}.sm\:focus\:placeholder-turquoise:focus::placeholder{color:#14a5c2}.sm\:focus\:placeholder-turquoise-active:focus::-moz-placeholder{color:#0aaccd}.sm\:focus\:placeholder-turquoise-active:focus:-ms-input-placeholder{color:#0aaccd}.sm\:focus\:placeholder-turquoise-active:focus::placeholder{color:#0aaccd}.sm\:focus\:placeholder-waterGreen:focus::-moz-placeholder{color:#007571}.sm\:focus\:placeholder-waterGreen:focus:-ms-input-placeholder{color:#007571}.sm\:focus\:placeholder-waterGreen:focus::placeholder{color:#007571}.sm\:focus\:placeholder-waterGreen-active:focus::-moz-placeholder{color:#00a8a3}.sm\:focus\:placeholder-waterGreen-active:focus:-ms-input-placeholder{color:#00a8a3}.sm\:focus\:placeholder-waterGreen-active:focus::placeholder{color:#00a8a3}.sm\:focus\:placeholder-deepRed:focus::-moz-placeholder{color:#c32222}.sm\:focus\:placeholder-deepRed:focus:-ms-input-placeholder{color:#c32222}.sm\:focus\:placeholder-deepRed:focus::placeholder{color:#c32222}.sm\:focus\:placeholder-deepRed-active:focus::-moz-placeholder{color:#cf1717}.sm\:focus\:placeholder-deepRed-active:focus:-ms-input-placeholder{color:#cf1717}.sm\:focus\:placeholder-deepRed-active:focus::placeholder{color:#cf1717}.sm\:focus\:placeholder-emerald:focus::-moz-placeholder{color:#14a33a}.sm\:focus\:placeholder-emerald:focus:-ms-input-placeholder{color:#14a33a}.sm\:focus\:placeholder-emerald:focus::placeholder{color:#14a33a}.sm\:focus\:placeholder-emerald-active:focus::-moz-placeholder{color:#0bad36}.sm\:focus\:placeholder-emerald-active:focus:-ms-input-placeholder{color:#0bad36}.sm\:focus\:placeholder-emerald-active:focus::placeholder{color:#0bad36}.sm\:focus\:placeholder-greenLight:focus::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.sm\:focus\:placeholder-greenLight:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.sm\:focus\:placeholder-greenLight:focus::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-active:focus::-moz-placeholder{color:#f65f2c}.sm\:focus\:placeholder-orange-active:focus:-ms-input-placeholder{color:#f65f2c}.sm\:focus\:placeholder-orange-active:focus::placeholder{color:#f65f2c}.sm\:focus\:placeholder-red-active:focus::-moz-placeholder{color:#e13737}.sm\:focus\:placeholder-red-active:focus:-ms-input-placeholder{color:#e13737}.sm\:focus\:placeholder-red-active:focus::placeholder{color:#e13737}.sm\:focus\:placeholder-white-active:focus::-moz-placeholder{color:#14a5c2}.sm\:focus\:placeholder-white-active:focus:-ms-input-placeholder{color:#14a5c2}.sm\:focus\:placeholder-white-active:focus::placeholder{color:#14a5c2}.sm\:focus\:placeholder-white-button:focus::-moz-placeholder{color:#fff}.sm\:focus\:placeholder-white-button:focus:-ms-input-placeholder{color:#fff}.sm\:focus\:placeholder-white-button:focus::placeholder{color:#fff}.sm\:focus\:placeholder-white-button-active:focus::-moz-placeholder{color:#fff}.sm\:focus\:placeholder-white-button-active:focus:-ms-input-placeholder{color:#fff}.sm\:focus\:placeholder-white-button-active:focus::placeholder{color:#fff}.sm\:focus\:placeholder-code:focus::-moz-placeholder{color:#3f3d57}.sm\:focus\:placeholder-code:focus:-ms-input-placeholder{color:#3f3d57}.sm\:focus\:placeholder-code:focus::placeholder{color:#3f3d57}.sm\:focus\:placeholder-code-active:focus::-moz-placeholder{color:#37354b}.sm\:focus\:placeholder-code-active:focus:-ms-input-placeholder{color:#37354b}.sm\:focus\:placeholder-code-active:focus::placeholder{color:#37354b}.sm\:focus\:placeholder-gray-lighter:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-lighter:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-lighter:focus::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-lighter-active:focus::-moz-placeholder{color:#ebebeb}.sm\:focus\:placeholder-gray-lighter-active:focus:-ms-input-placeholder{color:#ebebeb}.sm\:focus\:placeholder-gray-lighter-active:focus::placeholder{color:#ebebeb}.sm\:focus\:placeholder-gray-light:focus::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-light:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-light:focus::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-medium:focus::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-medium:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-medium:focus::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-darker:focus::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-darker:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-darker:focus::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-darker-active:focus::-moz-placeholder{color:#14a5c2}.sm\:focus\:placeholder-gray-darker-active:focus:-ms-input-placeholder{color:#14a5c2}.sm\:focus\:placeholder-gray-darker-active:focus::placeholder{color:#14a5c2}.sm\:focus\:placeholder-api-default:focus::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.sm\:focus\:placeholder-api-default:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.sm\:focus\:placeholder-api-default:focus::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-xxl:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-xxl:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-xxl:focus::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.sm\:focus\:placeholder-line-even:focus::-moz-placeholder{color:#f3f6f7}.sm\:focus\:placeholder-line-even:focus:-ms-input-placeholder{color:#f3f6f7}.sm\:focus\:placeholder-line-even:focus::placeholder{color:#f3f6f7}.sm\:placeholder-opacity-0::-moz-placeholder{--placeholder-opacity:0}.sm\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.sm\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.sm\:placeholder-opacity-25::-moz-placeholder{--placeholder-opacity:0.25}.sm\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.sm\:placeholder-opacity-50::-moz-placeholder{--placeholder-opacity:0.5}.sm\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.sm\:placeholder-opacity-75::-moz-placeholder{--placeholder-opacity:0.75}.sm\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.sm\:placeholder-opacity-100::-moz-placeholder{--placeholder-opacity:1}.sm\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.sm\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.sm\:focus\:placeholder-opacity-0:focus::-moz-placeholder{--placeholder-opacity:0}.sm\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.sm\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.sm\:focus\:placeholder-opacity-25:focus::-moz-placeholder{--placeholder-opacity:0.25}.sm\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.sm\:focus\:placeholder-opacity-50:focus::-moz-placeholder{--placeholder-opacity:0.5}.sm\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.sm\:focus\:placeholder-opacity-75:focus::-moz-placeholder{--placeholder-opacity:0.75}.sm\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.sm\:focus\:placeholder-opacity-100:focus::-moz-placeholder{--placeholder-opacity:1}.sm\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.sm\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.sm\:pointer-events-none{pointer-events:none}.sm\:pointer-events-auto{pointer-events:auto}.sm\:static{position:static}.sm\:fixed{position:fixed}.sm\:absolute{position:absolute}.sm\:relative{position:relative}.sm\:sticky{position:-webkit-sticky;position:sticky}.sm\:inset-0{top:0;right:0;bottom:0;left:0}.sm\:inset-1{top:.25rem;right:.25rem;bottom:.25rem;left:.25rem}.sm\:inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.sm\:inset-3{top:.75rem;right:.75rem;bottom:.75rem;left:.75rem}.sm\:inset-4{top:1rem;right:1rem;bottom:1rem;left:1rem}.sm\:inset-5{top:1.25rem;right:1.25rem;bottom:1.25rem;left:1.25rem}.sm\:inset-6{top:1.5rem;right:1.5rem;bottom:1.5rem;left:1.5rem}.sm\:inset-7{top:1.75rem;right:1.75rem;bottom:1.75rem;left:1.75rem}.sm\:inset-8{top:2rem;right:2rem;bottom:2rem;left:2rem}.sm\:inset-9{top:2.25rem;right:2.25rem;bottom:2.25rem;left:2.25rem}.sm\:inset-10{top:2.5rem;right:2.5rem;bottom:2.5rem;left:2.5rem}.sm\:inset-11{top:2.75rem;right:2.75rem;bottom:2.75rem;left:2.75rem}.sm\:inset-12{top:3rem;right:3rem;bottom:3rem;left:3rem}.sm\:inset-15{top:3.75rem;right:3.75rem;bottom:3.75rem;left:3.75rem}.sm\:inset-16{top:4rem;right:4rem;bottom:4rem;left:4rem}.sm\:inset-20{top:5rem;right:5rem;bottom:5rem;left:5rem}.sm\:inset-22{top:5.5rem;right:5.5rem;bottom:5.5rem;left:5.5rem}.sm\:inset-24{top:6rem;right:6rem;bottom:6rem;left:6rem}.sm\:inset-25{top:6.25rem;right:6.25rem;bottom:6.25rem;left:6.25rem}.sm\:inset-26{top:6.5rem;right:6.5rem;bottom:6.5rem;left:6.5rem}.sm\:inset-28{top:8rem;right:8rem;bottom:8rem;left:8rem}.sm\:inset-30{top:8.5rem;right:8.5rem;bottom:8.5rem;left:8.5rem}.sm\:inset-32{top:9rem;right:9rem;bottom:9rem;left:9rem}.sm\:inset-40{top:10rem;right:10rem;bottom:10rem;left:10rem}.sm\:inset-48{top:12rem;right:12rem;bottom:12rem;left:12rem}.sm\:inset-52{top:13rem;right:13rem;bottom:13rem;left:13rem}.sm\:inset-56{top:14rem;right:14rem;bottom:14rem;left:14rem}.sm\:inset-60{top:15rem;right:15rem;bottom:15rem;left:15rem}.sm\:inset-64{top:16rem;right:16rem;bottom:16rem;left:16rem}.sm\:inset-68{top:17rem;right:17rem;bottom:17rem;left:17rem}.sm\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.sm\:inset-px{top:1px;right:1px;bottom:1px;left:1px}.sm\:inset-0\.5{top:.125rem;right:.125rem;bottom:.125rem;left:.125rem}.sm\:inset-1\.5{top:.375rem;right:.375rem;bottom:.375rem;left:.375rem}.sm\:inset-2\.5{top:.625rem;right:.625rem;bottom:.625rem;left:.625rem}.sm\:inset-7\.5{top:1.875rem;right:1.875rem;bottom:1.875rem;left:1.875rem}.sm\:inset-y-0{top:0;bottom:0}.sm\:inset-x-0{right:0;left:0}.sm\:inset-y-1{top:.25rem;bottom:.25rem}.sm\:inset-x-1{right:.25rem;left:.25rem}.sm\:inset-y-2{top:.5rem;bottom:.5rem}.sm\:inset-x-2{right:.5rem;left:.5rem}.sm\:inset-y-3{top:.75rem;bottom:.75rem}.sm\:inset-x-3{right:.75rem;left:.75rem}.sm\:inset-y-4{top:1rem;bottom:1rem}.sm\:inset-x-4{right:1rem;left:1rem}.sm\:inset-y-5{top:1.25rem;bottom:1.25rem}.sm\:inset-x-5{right:1.25rem;left:1.25rem}.sm\:inset-y-6{top:1.5rem;bottom:1.5rem}.sm\:inset-x-6{right:1.5rem;left:1.5rem}.sm\:inset-y-7{top:1.75rem;bottom:1.75rem}.sm\:inset-x-7{right:1.75rem;left:1.75rem}.sm\:inset-y-8{top:2rem;bottom:2rem}.sm\:inset-x-8{right:2rem;left:2rem}.sm\:inset-y-9{top:2.25rem;bottom:2.25rem}.sm\:inset-x-9{right:2.25rem;left:2.25rem}.sm\:inset-y-10{top:2.5rem;bottom:2.5rem}.sm\:inset-x-10{right:2.5rem;left:2.5rem}.sm\:inset-y-11{top:2.75rem;bottom:2.75rem}.sm\:inset-x-11{right:2.75rem;left:2.75rem}.sm\:inset-y-12{top:3rem;bottom:3rem}.sm\:inset-x-12{right:3rem;left:3rem}.sm\:inset-y-15{top:3.75rem;bottom:3.75rem}.sm\:inset-x-15{right:3.75rem;left:3.75rem}.sm\:inset-y-16{top:4rem;bottom:4rem}.sm\:inset-x-16{right:4rem;left:4rem}.sm\:inset-y-20{top:5rem;bottom:5rem}.sm\:inset-x-20{right:5rem;left:5rem}.sm\:inset-y-22{top:5.5rem;bottom:5.5rem}.sm\:inset-x-22{right:5.5rem;left:5.5rem}.sm\:inset-y-24{top:6rem;bottom:6rem}.sm\:inset-x-24{right:6rem;left:6rem}.sm\:inset-y-25{top:6.25rem;bottom:6.25rem}.sm\:inset-x-25{right:6.25rem;left:6.25rem}.sm\:inset-y-26{top:6.5rem;bottom:6.5rem}.sm\:inset-x-26{right:6.5rem;left:6.5rem}.sm\:inset-y-28{top:8rem;bottom:8rem}.sm\:inset-x-28{right:8rem;left:8rem}.sm\:inset-y-30{top:8.5rem;bottom:8.5rem}.sm\:inset-x-30{right:8.5rem;left:8.5rem}.sm\:inset-y-32{top:9rem;bottom:9rem}.sm\:inset-x-32{right:9rem;left:9rem}.sm\:inset-y-40{top:10rem;bottom:10rem}.sm\:inset-x-40{right:10rem;left:10rem}.sm\:inset-y-48{top:12rem;bottom:12rem}.sm\:inset-x-48{right:12rem;left:12rem}.sm\:inset-y-52{top:13rem;bottom:13rem}.sm\:inset-x-52{right:13rem;left:13rem}.sm\:inset-y-56{top:14rem;bottom:14rem}.sm\:inset-x-56{right:14rem;left:14rem}.sm\:inset-y-60{top:15rem;bottom:15rem}.sm\:inset-x-60{right:15rem;left:15rem}.sm\:inset-y-64{top:16rem;bottom:16rem}.sm\:inset-x-64{right:16rem;left:16rem}.sm\:inset-y-68{top:17rem;bottom:17rem}.sm\:inset-x-68{right:17rem;left:17rem}.sm\:inset-y-auto{top:auto;bottom:auto}.sm\:inset-x-auto{right:auto;left:auto}.sm\:inset-y-px{top:1px;bottom:1px}.sm\:inset-x-px{right:1px;left:1px}.sm\:inset-y-0\.5{top:.125rem;bottom:.125rem}.sm\:inset-x-0\.5{right:.125rem;left:.125rem}.sm\:inset-y-1\.5{top:.375rem;bottom:.375rem}.sm\:inset-x-1\.5{right:.375rem;left:.375rem}.sm\:inset-y-2\.5{top:.625rem;bottom:.625rem}.sm\:inset-x-2\.5{right:.625rem;left:.625rem}.sm\:inset-y-7\.5{top:1.875rem;bottom:1.875rem}.sm\:inset-x-7\.5{right:1.875rem;left:1.875rem}.sm\:top-0{top:0}.sm\:right-0{right:0}.sm\:bottom-0{bottom:0}.sm\:left-0{left:0}.sm\:top-1{top:.25rem}.sm\:right-1{right:.25rem}.sm\:bottom-1{bottom:.25rem}.sm\:left-1{left:.25rem}.sm\:top-2{top:.5rem}.sm\:right-2{right:.5rem}.sm\:bottom-2{bottom:.5rem}.sm\:left-2{left:.5rem}.sm\:top-3{top:.75rem}.sm\:right-3{right:.75rem}.sm\:bottom-3{bottom:.75rem}.sm\:left-3{left:.75rem}.sm\:top-4{top:1rem}.sm\:right-4{right:1rem}.sm\:bottom-4{bottom:1rem}.sm\:left-4{left:1rem}.sm\:top-5{top:1.25rem}.sm\:right-5{right:1.25rem}.sm\:bottom-5{bottom:1.25rem}.sm\:left-5{left:1.25rem}.sm\:top-6{top:1.5rem}.sm\:right-6{right:1.5rem}.sm\:bottom-6{bottom:1.5rem}.sm\:left-6{left:1.5rem}.sm\:top-7{top:1.75rem}.sm\:right-7{right:1.75rem}.sm\:bottom-7{bottom:1.75rem}.sm\:left-7{left:1.75rem}.sm\:top-8{top:2rem}.sm\:right-8{right:2rem}.sm\:bottom-8{bottom:2rem}.sm\:left-8{left:2rem}.sm\:top-9{top:2.25rem}.sm\:right-9{right:2.25rem}.sm\:bottom-9{bottom:2.25rem}.sm\:left-9{left:2.25rem}.sm\:top-10{top:2.5rem}.sm\:right-10{right:2.5rem}.sm\:bottom-10{bottom:2.5rem}.sm\:left-10{left:2.5rem}.sm\:top-11{top:2.75rem}.sm\:right-11{right:2.75rem}.sm\:bottom-11{bottom:2.75rem}.sm\:left-11{left:2.75rem}.sm\:top-12{top:3rem}.sm\:right-12{right:3rem}.sm\:bottom-12{bottom:3rem}.sm\:left-12{left:3rem}.sm\:top-15{top:3.75rem}.sm\:right-15{right:3.75rem}.sm\:bottom-15{bottom:3.75rem}.sm\:left-15{left:3.75rem}.sm\:top-16{top:4rem}.sm\:right-16{right:4rem}.sm\:bottom-16{bottom:4rem}.sm\:left-16{left:4rem}.sm\:top-20{top:5rem}.sm\:right-20{right:5rem}.sm\:bottom-20{bottom:5rem}.sm\:left-20{left:5rem}.sm\:top-22{top:5.5rem}.sm\:right-22{right:5.5rem}.sm\:bottom-22{bottom:5.5rem}.sm\:left-22{left:5.5rem}.sm\:top-24{top:6rem}.sm\:right-24{right:6rem}.sm\:bottom-24{bottom:6rem}.sm\:left-24{left:6rem}.sm\:top-25{top:6.25rem}.sm\:right-25{right:6.25rem}.sm\:bottom-25{bottom:6.25rem}.sm\:left-25{left:6.25rem}.sm\:top-26{top:6.5rem}.sm\:right-26{right:6.5rem}.sm\:bottom-26{bottom:6.5rem}.sm\:left-26{left:6.5rem}.sm\:top-28{top:8rem}.sm\:right-28{right:8rem}.sm\:bottom-28{bottom:8rem}.sm\:left-28{left:8rem}.sm\:top-30{top:8.5rem}.sm\:right-30{right:8.5rem}.sm\:bottom-30{bottom:8.5rem}.sm\:left-30{left:8.5rem}.sm\:top-32{top:9rem}.sm\:right-32{right:9rem}.sm\:bottom-32{bottom:9rem}.sm\:left-32{left:9rem}.sm\:top-40{top:10rem}.sm\:right-40{right:10rem}.sm\:bottom-40{bottom:10rem}.sm\:left-40{left:10rem}.sm\:top-48{top:12rem}.sm\:right-48{right:12rem}.sm\:bottom-48{bottom:12rem}.sm\:left-48{left:12rem}.sm\:top-52{top:13rem}.sm\:right-52{right:13rem}.sm\:bottom-52{bottom:13rem}.sm\:left-52{left:13rem}.sm\:top-56{top:14rem}.sm\:right-56{right:14rem}.sm\:bottom-56{bottom:14rem}.sm\:left-56{left:14rem}.sm\:top-60{top:15rem}.sm\:right-60{right:15rem}.sm\:bottom-60{bottom:15rem}.sm\:left-60{left:15rem}.sm\:top-64{top:16rem}.sm\:right-64{right:16rem}.sm\:bottom-64{bottom:16rem}.sm\:left-64{left:16rem}.sm\:top-68{top:17rem}.sm\:right-68{right:17rem}.sm\:bottom-68{bottom:17rem}.sm\:left-68{left:17rem}.sm\:top-auto{top:auto}.sm\:right-auto{right:auto}.sm\:bottom-auto{bottom:auto}.sm\:left-auto{left:auto}.sm\:top-px{top:1px}.sm\:right-px{right:1px}.sm\:bottom-px{bottom:1px}.sm\:left-px{left:1px}.sm\:top-0\.5{top:.125rem}.sm\:right-0\.5{right:.125rem}.sm\:bottom-0\.5{bottom:.125rem}.sm\:left-0\.5{left:.125rem}.sm\:top-1\.5{top:.375rem}.sm\:right-1\.5{right:.375rem}.sm\:bottom-1\.5{bottom:.375rem}.sm\:left-1\.5{left:.375rem}.sm\:top-2\.5{top:.625rem}.sm\:right-2\.5{right:.625rem}.sm\:bottom-2\.5{bottom:.625rem}.sm\:left-2\.5{left:.625rem}.sm\:top-7\.5{top:1.875rem}.sm\:right-7\.5{right:1.875rem}.sm\:bottom-7\.5{bottom:1.875rem}.sm\:left-7\.5{left:1.875rem}.sm\:resize-none{resize:none}.sm\:resize-y{resize:vertical}.sm\:resize-x{resize:horizontal}.sm\:resize{resize:both}.sm\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.sm\:shadow-sm{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.sm\:shadow{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.sm\:shadow-md{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.sm\:shadow-lg{box-shadow:0 0 20px rgba(0,0,0,.15)}.sm\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:shadow-inner{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.sm\:shadow-outline{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.sm\:shadow-none{box-shadow:none}.sm\:shadow-strong{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.sm\:shadow-top{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.sm\:shadow-symbol{box-shadow:0 1px 2px rgba(10,16,20,.24)}.sm\:shadow-sidebar{box-shadow:0 0 25px rgba(0,0,0,.1)}.sm\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.sm\:hover\:shadow-sm:hover{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.sm\:hover\:shadow:hover{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.sm\:hover\:shadow-md:hover{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.sm\:hover\:shadow-lg:hover{box-shadow:0 0 20px rgba(0,0,0,.15)}.sm\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:hover\:shadow-inner:hover{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.sm\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.sm\:hover\:shadow-none:hover{box-shadow:none}.sm\:hover\:shadow-strong:hover{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.sm\:hover\:shadow-top:hover{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.sm\:hover\:shadow-symbol:hover{box-shadow:0 1px 2px rgba(10,16,20,.24)}.sm\:hover\:shadow-sidebar:hover{box-shadow:0 0 25px rgba(0,0,0,.1)}.sm\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.sm\:focus\:shadow-sm:focus{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.sm\:focus\:shadow:focus{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.sm\:focus\:shadow-md:focus{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.sm\:focus\:shadow-lg:focus{box-shadow:0 0 20px rgba(0,0,0,.15)}.sm\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:focus\:shadow-inner:focus{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.sm\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.sm\:focus\:shadow-none:focus{box-shadow:none}.sm\:focus\:shadow-strong:focus{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.sm\:focus\:shadow-top:focus{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.sm\:focus\:shadow-symbol:focus{box-shadow:0 1px 2px rgba(10,16,20,.24)}.sm\:focus\:shadow-sidebar:focus{box-shadow:0 0 25px rgba(0,0,0,.1)}.sm\:fill-current{fill:currentColor}.sm\:fill-transparent{fill:transparent}.sm\:stroke-current{stroke:currentColor}.sm\:stroke-0{stroke-width:0}.sm\:stroke-1{stroke-width:1}.sm\:stroke-2{stroke-width:2}.sm\:table-auto{table-layout:auto}.sm\:table-fixed{table-layout:fixed}.sm\:text-left{text-align:left}.sm\:text-center{text-align:center}.sm\:text-right{text-align:right}.sm\:text-justify{text-align:justify}.sm\:text-transparent{color:transparent}.sm\:text-current{color:currentColor}.sm\:text-black{color:#000}.sm\:text-white{color:#fff}.sm\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.sm\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.sm\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.sm\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.sm\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.sm\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.sm\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.sm\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.sm\:text-gray,.sm\:text-gray-DEFAULT{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:text-red{color:#d64343}.sm\:text-orange{color:#eb6437}.sm\:text-yellow{color:#f8da30}.sm\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.sm\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.sm\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.sm\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.sm\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.sm\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.sm\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.sm\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.sm\:text-green,.sm\:text-green-DEFAULT{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.sm\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.sm\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.sm\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.sm\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.sm\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.sm\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.sm\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.sm\:text-teal,.sm\:text-teal-DEFAULT{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:text-blue-50{color:#d1eaff}.sm\:text-blue-100{color:#a8d7ff}.sm\:text-blue-200{color:#80c4ff}.sm\:text-blue-300{color:#57b0ff}.sm\:text-blue-400{color:#2e9dff}.sm\:text-blue-500{color:#058aff}.sm\:text-blue-600{color:#0075db}.sm\:text-blue-700{color:#005fb3}.sm\:text-blue-800{color:#00498a}.sm\:text-blue-900{color:#003461}.sm\:text-blue,.sm\:text-blue-DEFAULT{color:#0075db}.sm\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.sm\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.sm\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.sm\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.sm\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.sm\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.sm\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.sm\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.sm\:text-indigo,.sm\:text-indigo-DEFAULT{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.sm\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.sm\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.sm\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.sm\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.sm\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.sm\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.sm\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.sm\:text-purple,.sm\:text-purple-DEFAULT{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:text-pink{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.sm\:text-inherit{color:inherit}.sm\:text-amber{color:#d78737}.sm\:text-amber-active{color:#e3872b}.sm\:text-ardoise{color:#596a82}.sm\:text-ardoise-active{color:#476794}.sm\:text-blue-active{color:#14a5c2}.sm\:text-lightBlue,.sm\:text-lightBlue-active{color:rgba(0,85,138,.1)}.sm\:text-deepBlue{color:#0e346c}.sm\:text-deepBlue-active{color:#0a3f8f}.sm\:text-gold{color:#bd9e56}.sm\:text-gold-active{color:#c9a34a}.sm\:text-grenadine{color:#c35078}.sm\:text-grenadine-active{color:#cf4475}.sm\:text-kiwi{color:#9a9f1e}.sm\:text-kiwi-active{color:#a3a815}.sm\:text-lilas{color:#7ea1d3}.sm\:text-lilas-active{color:#75a0db}.sm\:text-mahogany{color:#57142e}.sm\:text-mahogany-active{color:#610a2b}.sm\:text-ocher{color:#c29614}.sm\:text-ocher-active{color:#cd9c0a}.sm\:text-pine{color:#144d52}.sm\:text-pine-active{color:#0a555c}.sm\:text-platinum,.sm\:text-platinum-active{color:#000}.sm\:text-prune{color:#661456}.sm\:text-prune-active{color:#72085d}.sm\:text-sand{color:#d7be88}.sm\:text-sand-active{color:#dfc181}.sm\:text-sandPearl{color:#f0e5d6}.sm\:text-sandPearl-active{color:#f2e6d4}.sm\:text-silver{color:#b1b2b4}.sm\:text-silver-active{color:#a9afbc}.sm\:text-skyBlue{color:#98d2d7}.sm\:text-skyBlue-active{color:#91d8de}.sm\:text-southSea{color:#9dc9cd}.sm\:text-southSea-active{color:#95ced5}.sm\:text-turquoise{color:#14a5c2}.sm\:text-turquoise-active{color:#0aaccd}.sm\:text-waterGreen{color:#007571}.sm\:text-waterGreen-active{color:#00a8a3}.sm\:text-deepRed{color:#c32222}.sm\:text-deepRed-active{color:#cf1717}.sm\:text-emerald{color:#14a33a}.sm\:text-emerald-active{color:#0bad36}.sm\:text-greenLight{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.sm\:text-orange-active{color:#f65f2c}.sm\:text-red-active{color:#e13737}.sm\:text-white-active{color:#14a5c2}.sm\:text-white-button,.sm\:text-white-button-active{color:#fff}.sm\:text-code{color:#3f3d57}.sm\:text-code-active{color:#37354b}.sm\:text-gray-lighter{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.sm\:text-gray-lighter-active{color:#ebebeb}.sm\:text-gray-light{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.sm\:text-gray-medium{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.sm\:text-gray-darker{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.sm\:text-gray-darker-active{color:#14a5c2}.sm\:text-api-default{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.sm\:text-gray-xxl{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.sm\:text-line-even{color:#f3f6f7}.sm\:hover\:text-transparent:hover{color:transparent}.sm\:hover\:text-current:hover{color:currentColor}.sm\:hover\:text-black:hover{color:#000}.sm\:hover\:text-white:hover{color:#fff}.sm\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.sm\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.sm\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.sm\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.sm\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.sm\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.sm\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.sm\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.sm\:hover\:text-gray-DEFAULT:hover,.sm\:hover\:text-gray:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:hover\:text-red:hover{color:#d64343}.sm\:hover\:text-orange:hover{color:#eb6437}.sm\:hover\:text-yellow:hover{color:#f8da30}.sm\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.sm\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.sm\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.sm\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.sm\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.sm\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.sm\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.sm\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.sm\:hover\:text-green-DEFAULT:hover,.sm\:hover\:text-green:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.sm\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.sm\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.sm\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.sm\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.sm\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.sm\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.sm\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.sm\:hover\:text-teal-DEFAULT:hover,.sm\:hover\:text-teal:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:hover\:text-blue-50:hover{color:#d1eaff}.sm\:hover\:text-blue-100:hover{color:#a8d7ff}.sm\:hover\:text-blue-200:hover{color:#80c4ff}.sm\:hover\:text-blue-300:hover{color:#57b0ff}.sm\:hover\:text-blue-400:hover{color:#2e9dff}.sm\:hover\:text-blue-500:hover{color:#058aff}.sm\:hover\:text-blue-600:hover{color:#0075db}.sm\:hover\:text-blue-700:hover{color:#005fb3}.sm\:hover\:text-blue-800:hover{color:#00498a}.sm\:hover\:text-blue-900:hover{color:#003461}.sm\:hover\:text-blue-DEFAULT:hover,.sm\:hover\:text-blue:hover{color:#0075db}.sm\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.sm\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.sm\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.sm\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.sm\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.sm\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.sm\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.sm\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.sm\:hover\:text-indigo-DEFAULT:hover,.sm\:hover\:text-indigo:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.sm\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.sm\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.sm\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.sm\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.sm\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.sm\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.sm\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.sm\:hover\:text-purple-DEFAULT:hover,.sm\:hover\:text-purple:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:hover\:text-pink:hover{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.sm\:hover\:text-inherit:hover{color:inherit}.sm\:hover\:text-amber:hover{color:#d78737}.sm\:hover\:text-amber-active:hover{color:#e3872b}.sm\:hover\:text-ardoise:hover{color:#596a82}.sm\:hover\:text-ardoise-active:hover{color:#476794}.sm\:hover\:text-blue-active:hover{color:#14a5c2}.sm\:hover\:text-lightBlue-active:hover,.sm\:hover\:text-lightBlue:hover{color:rgba(0,85,138,.1)}.sm\:hover\:text-deepBlue:hover{color:#0e346c}.sm\:hover\:text-deepBlue-active:hover{color:#0a3f8f}.sm\:hover\:text-gold:hover{color:#bd9e56}.sm\:hover\:text-gold-active:hover{color:#c9a34a}.sm\:hover\:text-grenadine:hover{color:#c35078}.sm\:hover\:text-grenadine-active:hover{color:#cf4475}.sm\:hover\:text-kiwi:hover{color:#9a9f1e}.sm\:hover\:text-kiwi-active:hover{color:#a3a815}.sm\:hover\:text-lilas:hover{color:#7ea1d3}.sm\:hover\:text-lilas-active:hover{color:#75a0db}.sm\:hover\:text-mahogany:hover{color:#57142e}.sm\:hover\:text-mahogany-active:hover{color:#610a2b}.sm\:hover\:text-ocher:hover{color:#c29614}.sm\:hover\:text-ocher-active:hover{color:#cd9c0a}.sm\:hover\:text-pine:hover{color:#144d52}.sm\:hover\:text-pine-active:hover{color:#0a555c}.sm\:hover\:text-platinum-active:hover,.sm\:hover\:text-platinum:hover{color:#000}.sm\:hover\:text-prune:hover{color:#661456}.sm\:hover\:text-prune-active:hover{color:#72085d}.sm\:hover\:text-sand:hover{color:#d7be88}.sm\:hover\:text-sand-active:hover{color:#dfc181}.sm\:hover\:text-sandPearl:hover{color:#f0e5d6}.sm\:hover\:text-sandPearl-active:hover{color:#f2e6d4}.sm\:hover\:text-silver:hover{color:#b1b2b4}.sm\:hover\:text-silver-active:hover{color:#a9afbc}.sm\:hover\:text-skyBlue:hover{color:#98d2d7}.sm\:hover\:text-skyBlue-active:hover{color:#91d8de}.sm\:hover\:text-southSea:hover{color:#9dc9cd}.sm\:hover\:text-southSea-active:hover{color:#95ced5}.sm\:hover\:text-turquoise:hover{color:#14a5c2}.sm\:hover\:text-turquoise-active:hover{color:#0aaccd}.sm\:hover\:text-waterGreen:hover{color:#007571}.sm\:hover\:text-waterGreen-active:hover{color:#00a8a3}.sm\:hover\:text-deepRed:hover{color:#c32222}.sm\:hover\:text-deepRed-active:hover{color:#cf1717}.sm\:hover\:text-emerald:hover{color:#14a33a}.sm\:hover\:text-emerald-active:hover{color:#0bad36}.sm\:hover\:text-greenLight:hover{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.sm\:hover\:text-orange-active:hover{color:#f65f2c}.sm\:hover\:text-red-active:hover{color:#e13737}.sm\:hover\:text-white-active:hover{color:#14a5c2}.sm\:hover\:text-white-button-active:hover,.sm\:hover\:text-white-button:hover{color:#fff}.sm\:hover\:text-code:hover{color:#3f3d57}.sm\:hover\:text-code-active:hover{color:#37354b}.sm\:hover\:text-gray-lighter:hover{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.sm\:hover\:text-gray-lighter-active:hover{color:#ebebeb}.sm\:hover\:text-gray-light:hover{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.sm\:hover\:text-gray-medium:hover{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.sm\:hover\:text-gray-darker:hover{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.sm\:hover\:text-gray-darker-active:hover{color:#14a5c2}.sm\:hover\:text-api-default:hover{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.sm\:hover\:text-gray-xxl:hover{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.sm\:hover\:text-line-even:hover{color:#f3f6f7}.sm\:focus\:text-transparent:focus{color:transparent}.sm\:focus\:text-current:focus{color:currentColor}.sm\:focus\:text-black:focus{color:#000}.sm\:focus\:text-white:focus{color:#fff}.sm\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.sm\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.sm\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.sm\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.sm\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.sm\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.sm\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.sm\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.sm\:focus\:text-gray-DEFAULT:focus,.sm\:focus\:text-gray:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:focus\:text-red:focus{color:#d64343}.sm\:focus\:text-orange:focus{color:#eb6437}.sm\:focus\:text-yellow:focus{color:#f8da30}.sm\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.sm\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.sm\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.sm\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.sm\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.sm\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.sm\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.sm\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.sm\:focus\:text-green-DEFAULT:focus,.sm\:focus\:text-green:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.sm\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.sm\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.sm\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.sm\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.sm\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.sm\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.sm\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.sm\:focus\:text-teal-DEFAULT:focus,.sm\:focus\:text-teal:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:focus\:text-blue-50:focus{color:#d1eaff}.sm\:focus\:text-blue-100:focus{color:#a8d7ff}.sm\:focus\:text-blue-200:focus{color:#80c4ff}.sm\:focus\:text-blue-300:focus{color:#57b0ff}.sm\:focus\:text-blue-400:focus{color:#2e9dff}.sm\:focus\:text-blue-500:focus{color:#058aff}.sm\:focus\:text-blue-600:focus{color:#0075db}.sm\:focus\:text-blue-700:focus{color:#005fb3}.sm\:focus\:text-blue-800:focus{color:#00498a}.sm\:focus\:text-blue-900:focus{color:#003461}.sm\:focus\:text-blue-DEFAULT:focus,.sm\:focus\:text-blue:focus{color:#0075db}.sm\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.sm\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.sm\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.sm\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.sm\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.sm\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.sm\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.sm\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.sm\:focus\:text-indigo-DEFAULT:focus,.sm\:focus\:text-indigo:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.sm\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.sm\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.sm\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.sm\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.sm\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.sm\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.sm\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.sm\:focus\:text-purple-DEFAULT:focus,.sm\:focus\:text-purple:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:focus\:text-pink:focus{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.sm\:focus\:text-inherit:focus{color:inherit}.sm\:focus\:text-amber:focus{color:#d78737}.sm\:focus\:text-amber-active:focus{color:#e3872b}.sm\:focus\:text-ardoise:focus{color:#596a82}.sm\:focus\:text-ardoise-active:focus{color:#476794}.sm\:focus\:text-blue-active:focus{color:#14a5c2}.sm\:focus\:text-lightBlue-active:focus,.sm\:focus\:text-lightBlue:focus{color:rgba(0,85,138,.1)}.sm\:focus\:text-deepBlue:focus{color:#0e346c}.sm\:focus\:text-deepBlue-active:focus{color:#0a3f8f}.sm\:focus\:text-gold:focus{color:#bd9e56}.sm\:focus\:text-gold-active:focus{color:#c9a34a}.sm\:focus\:text-grenadine:focus{color:#c35078}.sm\:focus\:text-grenadine-active:focus{color:#cf4475}.sm\:focus\:text-kiwi:focus{color:#9a9f1e}.sm\:focus\:text-kiwi-active:focus{color:#a3a815}.sm\:focus\:text-lilas:focus{color:#7ea1d3}.sm\:focus\:text-lilas-active:focus{color:#75a0db}.sm\:focus\:text-mahogany:focus{color:#57142e}.sm\:focus\:text-mahogany-active:focus{color:#610a2b}.sm\:focus\:text-ocher:focus{color:#c29614}.sm\:focus\:text-ocher-active:focus{color:#cd9c0a}.sm\:focus\:text-pine:focus{color:#144d52}.sm\:focus\:text-pine-active:focus{color:#0a555c}.sm\:focus\:text-platinum-active:focus,.sm\:focus\:text-platinum:focus{color:#000}.sm\:focus\:text-prune:focus{color:#661456}.sm\:focus\:text-prune-active:focus{color:#72085d}.sm\:focus\:text-sand:focus{color:#d7be88}.sm\:focus\:text-sand-active:focus{color:#dfc181}.sm\:focus\:text-sandPearl:focus{color:#f0e5d6}.sm\:focus\:text-sandPearl-active:focus{color:#f2e6d4}.sm\:focus\:text-silver:focus{color:#b1b2b4}.sm\:focus\:text-silver-active:focus{color:#a9afbc}.sm\:focus\:text-skyBlue:focus{color:#98d2d7}.sm\:focus\:text-skyBlue-active:focus{color:#91d8de}.sm\:focus\:text-southSea:focus{color:#9dc9cd}.sm\:focus\:text-southSea-active:focus{color:#95ced5}.sm\:focus\:text-turquoise:focus{color:#14a5c2}.sm\:focus\:text-turquoise-active:focus{color:#0aaccd}.sm\:focus\:text-waterGreen:focus{color:#007571}.sm\:focus\:text-waterGreen-active:focus{color:#00a8a3}.sm\:focus\:text-deepRed:focus{color:#c32222}.sm\:focus\:text-deepRed-active:focus{color:#cf1717}.sm\:focus\:text-emerald:focus{color:#14a33a}.sm\:focus\:text-emerald-active:focus{color:#0bad36}.sm\:focus\:text-greenLight:focus{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.sm\:focus\:text-orange-active:focus{color:#f65f2c}.sm\:focus\:text-red-active:focus{color:#e13737}.sm\:focus\:text-white-active:focus{color:#14a5c2}.sm\:focus\:text-white-button-active:focus,.sm\:focus\:text-white-button:focus{color:#fff}.sm\:focus\:text-code:focus{color:#3f3d57}.sm\:focus\:text-code-active:focus{color:#37354b}.sm\:focus\:text-gray-lighter:focus{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.sm\:focus\:text-gray-lighter-active:focus{color:#ebebeb}.sm\:focus\:text-gray-light:focus{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.sm\:focus\:text-gray-medium:focus{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.sm\:focus\:text-gray-darker:focus{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.sm\:focus\:text-gray-darker-active:focus{color:#14a5c2}.sm\:focus\:text-api-default:focus{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.sm\:focus\:text-gray-xxl:focus{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.sm\:focus\:text-line-even:focus{color:#f3f6f7}.sm\:text-opacity-0{--text-opacity:0}.sm\:text-opacity-25{--text-opacity:0.25}.sm\:text-opacity-50{--text-opacity:0.5}.sm\:text-opacity-75{--text-opacity:0.75}.sm\:text-opacity-100{--text-opacity:1}.sm\:hover\:text-opacity-0:hover{--text-opacity:0}.sm\:hover\:text-opacity-25:hover{--text-opacity:0.25}.sm\:hover\:text-opacity-50:hover{--text-opacity:0.5}.sm\:hover\:text-opacity-75:hover{--text-opacity:0.75}.sm\:hover\:text-opacity-100:hover{--text-opacity:1}.sm\:focus\:text-opacity-0:focus{--text-opacity:0}.sm\:focus\:text-opacity-25:focus{--text-opacity:0.25}.sm\:focus\:text-opacity-50:focus{--text-opacity:0.5}.sm\:focus\:text-opacity-75:focus{--text-opacity:0.75}.sm\:focus\:text-opacity-100:focus{--text-opacity:1}.sm\:italic{font-style:italic}.sm\:not-italic{font-style:normal}.sm\:uppercase{text-transform:uppercase}.sm\:lowercase{text-transform:lowercase}.sm\:capitalize{text-transform:capitalize}.sm\:normal-case{text-transform:none}.sm\:underline{text-decoration:underline}.sm\:line-through{text-decoration:line-through}.sm\:no-underline{text-decoration:none}.sm\:hover\:underline:hover{text-decoration:underline}.sm\:hover\:line-through:hover{text-decoration:line-through}.sm\:hover\:no-underline:hover{text-decoration:none}.sm\:focus\:underline:focus{text-decoration:underline}.sm\:focus\:line-through:focus{text-decoration:line-through}.sm\:focus\:no-underline:focus{text-decoration:none}.sm\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sm\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.sm\:diagonal-fractions,.sm\:lining-nums,.sm\:oldstyle-nums,.sm\:ordinal,.sm\:proportional-nums,.sm\:slashed-zero,.sm\:stacked-fractions,.sm\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/);font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.sm\:normal-nums{font-variant-numeric:normal}.sm\:ordinal{--font-variant-numeric-ordinal:ordinal}.sm\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.sm\:lining-nums{--font-variant-numeric-figure:lining-nums}.sm\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.sm\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.sm\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.sm\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.sm\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.sm\:tracking-tighter{letter-spacing:-.05em}.sm\:tracking-tight{letter-spacing:-.025em}.sm\:tracking-normal{letter-spacing:0}.sm\:tracking-wide{letter-spacing:.025em}.sm\:tracking-wider{letter-spacing:.05em}.sm\:tracking-widest{letter-spacing:.1em}.sm\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sm\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sm\:select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.sm\:select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.sm\:align-baseline{vertical-align:baseline}.sm\:align-top{vertical-align:top}.sm\:align-middle{vertical-align:middle}.sm\:align-bottom{vertical-align:bottom}.sm\:align-text-top{vertical-align:text-top}.sm\:align-text-bottom{vertical-align:text-bottom}.sm\:visible{visibility:visible}.sm\:invisible{visibility:hidden}.sm\:whitespace-normal{white-space:normal}.sm\:whitespace-no-wrap{white-space:nowrap}.sm\:whitespace-pre{white-space:pre}.sm\:whitespace-pre-line{white-space:pre-line}.sm\:whitespace-pre-wrap{white-space:pre-wrap}.sm\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.sm\:break-words{word-wrap:break-word;overflow-wrap:break-word}.sm\:break-all{word-break:break-all}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:w-0{width:0}.sm\:w-1{width:.25rem}.sm\:w-2{width:.5rem}.sm\:w-3{width:.75rem}.sm\:w-4{width:1rem}.sm\:w-5{width:1.25rem}.sm\:w-6{width:1.5rem}.sm\:w-7{width:1.75rem}.sm\:w-8{width:2rem}.sm\:w-9{width:2.25rem}.sm\:w-10{width:2.5rem}.sm\:w-11{width:2.75rem}.sm\:w-12{width:3rem}.sm\:w-15{width:3.75rem}.sm\:w-16{width:4rem}.sm\:w-20{width:5rem}.sm\:w-22{width:5.5rem}.sm\:w-24{width:6rem}.sm\:w-25{width:6.25rem}.sm\:w-26{width:6.5rem}.sm\:w-28{width:8rem}.sm\:w-30{width:8.5rem}.sm\:w-32{width:9rem}.sm\:w-40{width:10rem}.sm\:w-48{width:12rem}.sm\:w-52{width:13rem}.sm\:w-56{width:14rem}.sm\:w-60{width:15rem}.sm\:w-64{width:16rem}.sm\:w-68{width:17rem}.sm\:w-auto{width:auto}.sm\:w-px{width:1px}.sm\:w-0\.5{width:.125rem}.sm\:w-1\.5{width:.375rem}.sm\:w-2\.5{width:.625rem}.sm\:w-7\.5{width:1.875rem}.sm\:w-1\/2{width:50%}.sm\:w-1\/3{width:33.333333%}.sm\:w-2\/3{width:66.666667%}.sm\:w-1\/4{width:25%}.sm\:w-2\/4{width:50%}.sm\:w-3\/4{width:75%}.sm\:w-1\/5{width:20%}.sm\:w-2\/5{width:40%}.sm\:w-3\/5{width:60%}.sm\:w-4\/5{width:80%}.sm\:w-1\/6{width:16.666667%}.sm\:w-2\/6{width:33.333333%}.sm\:w-3\/6{width:50%}.sm\:w-4\/6{width:66.666667%}.sm\:w-5\/6{width:83.333333%}.sm\:w-1\/12{width:8.333333%}.sm\:w-2\/12{width:16.666667%}.sm\:w-3\/12{width:25%}.sm\:w-4\/12{width:33.333333%}.sm\:w-5\/12{width:41.666667%}.sm\:w-6\/12{width:50%}.sm\:w-7\/12{width:58.333333%}.sm\:w-8\/12{width:66.666667%}.sm\:w-9\/12{width:75%}.sm\:w-10\/12{width:83.333333%}.sm\:w-11\/12{width:91.666667%}.sm\:w-full{width:100%}.sm\:w-screen{width:100vw}.sm\:w-3\/10{width:30%}.sm\:w-7\/10{width:70%}.sm\:w-9\/10{width:90%}.sm\:w-12\/25{width:48%}.sm\:z-0{z-index:0}.sm\:z-1{z-index:1}.sm\:z-2{z-index:2}.sm\:z-3{z-index:3}.sm\:z-4{z-index:4}.sm\:z-5{z-index:5}.sm\:z-6{z-index:6}.sm\:z-10{z-index:10}.sm\:z-20{z-index:20}.sm\:z-30{z-index:30}.sm\:z-40{z-index:40}.sm\:z-50{z-index:50}.sm\:z-auto{z-index:auto}.sm\:gap-0{grid-gap:0;gap:0}.sm\:gap-1{grid-gap:.25rem;gap:.25rem}.sm\:gap-2{grid-gap:.5rem;gap:.5rem}.sm\:gap-3{grid-gap:.75rem;gap:.75rem}.sm\:gap-4{grid-gap:1rem;gap:1rem}.sm\:gap-5{grid-gap:1.25rem;gap:1.25rem}.sm\:gap-6{grid-gap:1.5rem;gap:1.5rem}.sm\:gap-7{grid-gap:1.75rem;gap:1.75rem}.sm\:gap-8{grid-gap:2rem;gap:2rem}.sm\:gap-9{grid-gap:2.25rem;gap:2.25rem}.sm\:gap-10{grid-gap:2.5rem;gap:2.5rem}.sm\:gap-11{grid-gap:2.75rem;gap:2.75rem}.sm\:gap-12{grid-gap:3rem;gap:3rem}.sm\:gap-15{grid-gap:3.75rem;gap:3.75rem}.sm\:gap-16{grid-gap:4rem;gap:4rem}.sm\:gap-20{grid-gap:5rem;gap:5rem}.sm\:gap-22{grid-gap:5.5rem;gap:5.5rem}.sm\:gap-24{grid-gap:6rem;gap:6rem}.sm\:gap-25{grid-gap:6.25rem;gap:6.25rem}.sm\:gap-26{grid-gap:6.5rem;gap:6.5rem}.sm\:gap-28{grid-gap:8rem;gap:8rem}.sm\:gap-30{grid-gap:8.5rem;gap:8.5rem}.sm\:gap-32{grid-gap:9rem;gap:9rem}.sm\:gap-40{grid-gap:10rem;gap:10rem}.sm\:gap-48{grid-gap:12rem;gap:12rem}.sm\:gap-52{grid-gap:13rem;gap:13rem}.sm\:gap-56{grid-gap:14rem;gap:14rem}.sm\:gap-60{grid-gap:15rem;gap:15rem}.sm\:gap-64{grid-gap:16rem;gap:16rem}.sm\:gap-68{grid-gap:17rem;gap:17rem}.sm\:gap-px{grid-gap:1px;gap:1px}.sm\:gap-0\.5{grid-gap:.125rem;gap:.125rem}.sm\:gap-1\.5{grid-gap:.375rem;gap:.375rem}.sm\:gap-2\.5{grid-gap:.625rem;gap:.625rem}.sm\:gap-7\.5{grid-gap:1.875rem;gap:1.875rem}.sm\:col-gap-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.sm\:col-gap-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.sm\:col-gap-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.sm\:col-gap-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.sm\:col-gap-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.sm\:col-gap-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.sm\:col-gap-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.sm\:col-gap-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.sm\:col-gap-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.sm\:col-gap-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.sm\:col-gap-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.sm\:col-gap-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.sm\:col-gap-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.sm\:col-gap-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.sm\:col-gap-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.sm\:col-gap-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.sm\:col-gap-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.sm\:col-gap-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.sm\:col-gap-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.sm\:col-gap-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.sm\:col-gap-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.sm\:col-gap-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.sm\:col-gap-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.sm\:col-gap-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.sm\:col-gap-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.sm\:col-gap-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.sm\:col-gap-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.sm\:col-gap-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.sm\:col-gap-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.sm\:col-gap-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.sm\:col-gap-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.sm\:col-gap-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.sm\:col-gap-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.sm\:col-gap-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.sm\:col-gap-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.sm\:gap-x-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.sm\:gap-x-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.sm\:gap-x-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.sm\:gap-x-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.sm\:gap-x-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.sm\:gap-x-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.sm\:gap-x-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.sm\:gap-x-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.sm\:gap-x-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.sm\:gap-x-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.sm\:gap-x-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.sm\:gap-x-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.sm\:gap-x-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.sm\:gap-x-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.sm\:gap-x-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.sm\:gap-x-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.sm\:gap-x-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.sm\:gap-x-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.sm\:gap-x-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.sm\:gap-x-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.sm\:gap-x-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.sm\:gap-x-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.sm\:gap-x-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.sm\:gap-x-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.sm\:gap-x-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.sm\:gap-x-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.sm\:gap-x-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.sm\:gap-x-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.sm\:gap-x-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.sm\:gap-x-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.sm\:gap-x-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.sm\:gap-x-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.sm\:gap-x-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.sm\:gap-x-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.sm\:gap-x-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.sm\:row-gap-0{grid-row-gap:0;row-gap:0}.sm\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.sm\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.sm\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.sm\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.sm\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.sm\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.sm\:row-gap-7{grid-row-gap:1.75rem;row-gap:1.75rem}.sm\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.sm\:row-gap-9{grid-row-gap:2.25rem;row-gap:2.25rem}.sm\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.sm\:row-gap-11{grid-row-gap:2.75rem;row-gap:2.75rem}.sm\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.sm\:row-gap-15{grid-row-gap:3.75rem;row-gap:3.75rem}.sm\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.sm\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.sm\:row-gap-22{grid-row-gap:5.5rem;row-gap:5.5rem}.sm\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.sm\:row-gap-25{grid-row-gap:6.25rem;row-gap:6.25rem}.sm\:row-gap-26{grid-row-gap:6.5rem;row-gap:6.5rem}.sm\:row-gap-28{grid-row-gap:8rem;row-gap:8rem}.sm\:row-gap-30{grid-row-gap:8.5rem;row-gap:8.5rem}.sm\:row-gap-32{grid-row-gap:9rem;row-gap:9rem}.sm\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.sm\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.sm\:row-gap-52{grid-row-gap:13rem;row-gap:13rem}.sm\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.sm\:row-gap-60{grid-row-gap:15rem;row-gap:15rem}.sm\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.sm\:row-gap-68{grid-row-gap:17rem;row-gap:17rem}.sm\:row-gap-px{grid-row-gap:1px;row-gap:1px}.sm\:row-gap-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.sm\:row-gap-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.sm\:row-gap-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.sm\:row-gap-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.sm\:gap-y-0{grid-row-gap:0;row-gap:0}.sm\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.sm\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.sm\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.sm\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.sm\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.sm\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.sm\:gap-y-7{grid-row-gap:1.75rem;row-gap:1.75rem}.sm\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.sm\:gap-y-9{grid-row-gap:2.25rem;row-gap:2.25rem}.sm\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.sm\:gap-y-11{grid-row-gap:2.75rem;row-gap:2.75rem}.sm\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.sm\:gap-y-15{grid-row-gap:3.75rem;row-gap:3.75rem}.sm\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.sm\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.sm\:gap-y-22{grid-row-gap:5.5rem;row-gap:5.5rem}.sm\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.sm\:gap-y-25{grid-row-gap:6.25rem;row-gap:6.25rem}.sm\:gap-y-26{grid-row-gap:6.5rem;row-gap:6.5rem}.sm\:gap-y-28{grid-row-gap:8rem;row-gap:8rem}.sm\:gap-y-30{grid-row-gap:8.5rem;row-gap:8.5rem}.sm\:gap-y-32{grid-row-gap:9rem;row-gap:9rem}.sm\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.sm\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.sm\:gap-y-52{grid-row-gap:13rem;row-gap:13rem}.sm\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.sm\:gap-y-60{grid-row-gap:15rem;row-gap:15rem}.sm\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.sm\:gap-y-68{grid-row-gap:17rem;row-gap:17rem}.sm\:gap-y-px{grid-row-gap:1px;row-gap:1px}.sm\:gap-y-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.sm\:gap-y-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.sm\:gap-y-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.sm\:gap-y-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.sm\:grid-flow-row{grid-auto-flow:row}.sm\:grid-flow-col{grid-auto-flow:column}.sm\:grid-flow-row-dense{grid-auto-flow:row dense}.sm\:grid-flow-col-dense{grid-auto-flow:column dense}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-none{grid-template-columns:none}.sm\:auto-cols-auto{grid-auto-columns:auto}.sm\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.sm\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.sm\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.sm\:col-auto{grid-column:auto}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-5{grid-column:span 5/span 5}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-7{grid-column:span 7/span 7}.sm\:col-span-8{grid-column:span 8/span 8}.sm\:col-span-9{grid-column:span 9/span 9}.sm\:col-span-10{grid-column:span 10/span 10}.sm\:col-span-11{grid-column:span 11/span 11}.sm\:col-span-12{grid-column:span 12/span 12}.sm\:col-span-full{grid-column:1/-1}.sm\:col-start-1{grid-column-start:1}.sm\:col-start-2{grid-column-start:2}.sm\:col-start-3{grid-column-start:3}.sm\:col-start-4{grid-column-start:4}.sm\:col-start-5{grid-column-start:5}.sm\:col-start-6{grid-column-start:6}.sm\:col-start-7{grid-column-start:7}.sm\:col-start-8{grid-column-start:8}.sm\:col-start-9{grid-column-start:9}.sm\:col-start-10{grid-column-start:10}.sm\:col-start-11{grid-column-start:11}.sm\:col-start-12{grid-column-start:12}.sm\:col-start-13{grid-column-start:13}.sm\:col-start-auto{grid-column-start:auto}.sm\:col-end-1{grid-column-end:1}.sm\:col-end-2{grid-column-end:2}.sm\:col-end-3{grid-column-end:3}.sm\:col-end-4{grid-column-end:4}.sm\:col-end-5{grid-column-end:5}.sm\:col-end-6{grid-column-end:6}.sm\:col-end-7{grid-column-end:7}.sm\:col-end-8{grid-column-end:8}.sm\:col-end-9{grid-column-end:9}.sm\:col-end-10{grid-column-end:10}.sm\:col-end-11{grid-column-end:11}.sm\:col-end-12{grid-column-end:12}.sm\:col-end-13{grid-column-end:13}.sm\:col-end-auto{grid-column-end:auto}.sm\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.sm\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.sm\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.sm\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.sm\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.sm\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.sm\:grid-rows-none{grid-template-rows:none}.sm\:auto-rows-auto{grid-auto-rows:auto}.sm\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.sm\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.sm\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.sm\:row-auto{grid-row:auto}.sm\:row-span-1{grid-row:span 1/span 1}.sm\:row-span-2{grid-row:span 2/span 2}.sm\:row-span-3{grid-row:span 3/span 3}.sm\:row-span-4{grid-row:span 4/span 4}.sm\:row-span-5{grid-row:span 5/span 5}.sm\:row-span-6{grid-row:span 6/span 6}.sm\:row-span-full{grid-row:1/-1}.sm\:row-start-1{grid-row-start:1}.sm\:row-start-2{grid-row-start:2}.sm\:row-start-3{grid-row-start:3}.sm\:row-start-4{grid-row-start:4}.sm\:row-start-5{grid-row-start:5}.sm\:row-start-6{grid-row-start:6}.sm\:row-start-7{grid-row-start:7}.sm\:row-start-auto{grid-row-start:auto}.sm\:row-end-1{grid-row-end:1}.sm\:row-end-2{grid-row-end:2}.sm\:row-end-3{grid-row-end:3}.sm\:row-end-4{grid-row-end:4}.sm\:row-end-5{grid-row-end:5}.sm\:row-end-6{grid-row-end:6}.sm\:row-end-7{grid-row-end:7}.sm\:row-end-auto{grid-row-end:auto}.sm\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.sm\:origin-center{transform-origin:center}.sm\:origin-top{transform-origin:top}.sm\:origin-top-right{transform-origin:top right}.sm\:origin-right{transform-origin:right}.sm\:origin-bottom-right{transform-origin:bottom right}.sm\:origin-bottom{transform-origin:bottom}.sm\:origin-bottom-left{transform-origin:bottom left}.sm\:origin-left{transform-origin:left}.sm\:origin-top-left{transform-origin:top left}.sm\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.sm\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.sm\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.sm\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.sm\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.sm\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.sm\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.sm\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.sm\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.sm\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.sm\:scale-x-0{--transform-scale-x:0}.sm\:scale-x-50{--transform-scale-x:.5}.sm\:scale-x-75{--transform-scale-x:.75}.sm\:scale-x-90{--transform-scale-x:.9}.sm\:scale-x-95{--transform-scale-x:.95}.sm\:scale-x-100{--transform-scale-x:1}.sm\:scale-x-105{--transform-scale-x:1.05}.sm\:scale-x-110{--transform-scale-x:1.1}.sm\:scale-x-125{--transform-scale-x:1.25}.sm\:scale-x-150{--transform-scale-x:1.5}.sm\:scale-y-0{--transform-scale-y:0}.sm\:scale-y-50{--transform-scale-y:.5}.sm\:scale-y-75{--transform-scale-y:.75}.sm\:scale-y-90{--transform-scale-y:.9}.sm\:scale-y-95{--transform-scale-y:.95}.sm\:scale-y-100{--transform-scale-y:1}.sm\:scale-y-105{--transform-scale-y:1.05}.sm\:scale-y-110{--transform-scale-y:1.1}.sm\:scale-y-125{--transform-scale-y:1.25}.sm\:scale-y-150{--transform-scale-y:1.5}.sm\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.sm\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.sm\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.sm\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.sm\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.sm\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.sm\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.sm\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.sm\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.sm\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.sm\:hover\:scale-x-0:hover{--transform-scale-x:0}.sm\:hover\:scale-x-50:hover{--transform-scale-x:.5}.sm\:hover\:scale-x-75:hover{--transform-scale-x:.75}.sm\:hover\:scale-x-90:hover{--transform-scale-x:.9}.sm\:hover\:scale-x-95:hover{--transform-scale-x:.95}.sm\:hover\:scale-x-100:hover{--transform-scale-x:1}.sm\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.sm\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.sm\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.sm\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.sm\:hover\:scale-y-0:hover{--transform-scale-y:0}.sm\:hover\:scale-y-50:hover{--transform-scale-y:.5}.sm\:hover\:scale-y-75:hover{--transform-scale-y:.75}.sm\:hover\:scale-y-90:hover{--transform-scale-y:.9}.sm\:hover\:scale-y-95:hover{--transform-scale-y:.95}.sm\:hover\:scale-y-100:hover{--transform-scale-y:1}.sm\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.sm\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.sm\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.sm\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.sm\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.sm\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.sm\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.sm\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.sm\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.sm\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.sm\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.sm\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.sm\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.sm\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.sm\:focus\:scale-x-0:focus{--transform-scale-x:0}.sm\:focus\:scale-x-50:focus{--transform-scale-x:.5}.sm\:focus\:scale-x-75:focus{--transform-scale-x:.75}.sm\:focus\:scale-x-90:focus{--transform-scale-x:.9}.sm\:focus\:scale-x-95:focus{--transform-scale-x:.95}.sm\:focus\:scale-x-100:focus{--transform-scale-x:1}.sm\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.sm\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.sm\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.sm\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.sm\:focus\:scale-y-0:focus{--transform-scale-y:0}.sm\:focus\:scale-y-50:focus{--transform-scale-y:.5}.sm\:focus\:scale-y-75:focus{--transform-scale-y:.75}.sm\:focus\:scale-y-90:focus{--transform-scale-y:.9}.sm\:focus\:scale-y-95:focus{--transform-scale-y:.95}.sm\:focus\:scale-y-100:focus{--transform-scale-y:1}.sm\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.sm\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.sm\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.sm\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.sm\:rotate-0{--transform-rotate:0}.sm\:rotate-90{--transform-rotate:90deg}.sm\:rotate-135{--transform-rotate:135deg}.sm\:rotate-180{--transform-rotate:180deg}.sm\:-rotate-180{--transform-rotate:-180deg}.sm\:-rotate-135{--transform-rotate:-135deg}.sm\:-rotate-90{--transform-rotate:-90deg}.sm\:hover\:rotate-0:hover{--transform-rotate:0}.sm\:hover\:rotate-90:hover{--transform-rotate:90deg}.sm\:hover\:rotate-135:hover{--transform-rotate:135deg}.sm\:hover\:rotate-180:hover{--transform-rotate:180deg}.sm\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.sm\:hover\:-rotate-135:hover{--transform-rotate:-135deg}.sm\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.sm\:focus\:rotate-0:focus{--transform-rotate:0}.sm\:focus\:rotate-90:focus{--transform-rotate:90deg}.sm\:focus\:rotate-135:focus{--transform-rotate:135deg}.sm\:focus\:rotate-180:focus{--transform-rotate:180deg}.sm\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.sm\:focus\:-rotate-135:focus{--transform-rotate:-135deg}.sm\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.sm\:translate-x-0{--transform-translate-x:0}.sm\:translate-x-1{--transform-translate-x:.25rem}.sm\:translate-x-2{--transform-translate-x:.5rem}.sm\:translate-x-3{--transform-translate-x:.75rem}.sm\:translate-x-4{--transform-translate-x:1rem}.sm\:translate-x-5{--transform-translate-x:1.25rem}.sm\:translate-x-6{--transform-translate-x:1.5rem}.sm\:translate-x-7{--transform-translate-x:1.75rem}.sm\:translate-x-8{--transform-translate-x:2rem}.sm\:translate-x-9{--transform-translate-x:2.25rem}.sm\:translate-x-10{--transform-translate-x:2.5rem}.sm\:translate-x-11{--transform-translate-x:2.75rem}.sm\:translate-x-12{--transform-translate-x:3rem}.sm\:translate-x-15{--transform-translate-x:3.75rem}.sm\:translate-x-16{--transform-translate-x:4rem}.sm\:translate-x-20{--transform-translate-x:5rem}.sm\:translate-x-22{--transform-translate-x:5.5rem}.sm\:translate-x-24{--transform-translate-x:6rem}.sm\:translate-x-25{--transform-translate-x:6.25rem}.sm\:translate-x-26{--transform-translate-x:6.5rem}.sm\:translate-x-28{--transform-translate-x:8rem}.sm\:translate-x-30{--transform-translate-x:8.5rem}.sm\:translate-x-32{--transform-translate-x:9rem}.sm\:translate-x-40{--transform-translate-x:10rem}.sm\:translate-x-48{--transform-translate-x:12rem}.sm\:translate-x-52{--transform-translate-x:13rem}.sm\:translate-x-56{--transform-translate-x:14rem}.sm\:translate-x-60{--transform-translate-x:15rem}.sm\:translate-x-64{--transform-translate-x:16rem}.sm\:translate-x-68{--transform-translate-x:17rem}.sm\:translate-x-px{--transform-translate-x:1px}.sm\:translate-x-0\.5{--transform-translate-x:.125rem}.sm\:translate-x-1\.5{--transform-translate-x:.375rem}.sm\:translate-x-2\.5{--transform-translate-x:.625rem}.sm\:translate-x-7\.5{--transform-translate-x:1.875rem}.sm\:-translate-x-1{--transform-translate-x:-0.25rem}.sm\:-translate-x-2{--transform-translate-x:-0.5rem}.sm\:-translate-x-3{--transform-translate-x:-0.75rem}.sm\:-translate-x-4{--transform-translate-x:-1rem}.sm\:-translate-x-5{--transform-translate-x:-1.25rem}.sm\:-translate-x-6{--transform-translate-x:-1.5rem}.sm\:-translate-x-7{--transform-translate-x:-1.75rem}.sm\:-translate-x-8{--transform-translate-x:-2rem}.sm\:-translate-x-9{--transform-translate-x:-2.25rem}.sm\:-translate-x-10{--transform-translate-x:-2.5rem}.sm\:-translate-x-11{--transform-translate-x:-2.75rem}.sm\:-translate-x-12{--transform-translate-x:-3rem}.sm\:-translate-x-15{--transform-translate-x:-3.75rem}.sm\:-translate-x-16{--transform-translate-x:-4rem}.sm\:-translate-x-20{--transform-translate-x:-5rem}.sm\:-translate-x-22{--transform-translate-x:-5.5rem}.sm\:-translate-x-24{--transform-translate-x:-6rem}.sm\:-translate-x-25{--transform-translate-x:-6.25rem}.sm\:-translate-x-26{--transform-translate-x:-6.5rem}.sm\:-translate-x-28{--transform-translate-x:-8rem}.sm\:-translate-x-30{--transform-translate-x:-8.5rem}.sm\:-translate-x-32{--transform-translate-x:-9rem}.sm\:-translate-x-40{--transform-translate-x:-10rem}.sm\:-translate-x-48{--transform-translate-x:-12rem}.sm\:-translate-x-52{--transform-translate-x:-13rem}.sm\:-translate-x-56{--transform-translate-x:-14rem}.sm\:-translate-x-60{--transform-translate-x:-15rem}.sm\:-translate-x-64{--transform-translate-x:-16rem}.sm\:-translate-x-68{--transform-translate-x:-17rem}.sm\:-translate-x-px{--transform-translate-x:-1px}.sm\:-translate-x-0\.5{--transform-translate-x:-0.125rem}.sm\:-translate-x-1\.5{--transform-translate-x:-0.375rem}.sm\:-translate-x-2\.5{--transform-translate-x:-0.625rem}.sm\:-translate-x-7\.5{--transform-translate-x:-1.875rem}.sm\:-translate-x-full{--transform-translate-x:-100%}.sm\:-translate-x-1\/2{--transform-translate-x:-50%}.sm\:translate-x-1\/2{--transform-translate-x:50%}.sm\:translate-x-full{--transform-translate-x:100%}.sm\:translate-y-0{--transform-translate-y:0}.sm\:translate-y-1{--transform-translate-y:.25rem}.sm\:translate-y-2{--transform-translate-y:.5rem}.sm\:translate-y-3{--transform-translate-y:.75rem}.sm\:translate-y-4{--transform-translate-y:1rem}.sm\:translate-y-5{--transform-translate-y:1.25rem}.sm\:translate-y-6{--transform-translate-y:1.5rem}.sm\:translate-y-7{--transform-translate-y:1.75rem}.sm\:translate-y-8{--transform-translate-y:2rem}.sm\:translate-y-9{--transform-translate-y:2.25rem}.sm\:translate-y-10{--transform-translate-y:2.5rem}.sm\:translate-y-11{--transform-translate-y:2.75rem}.sm\:translate-y-12{--transform-translate-y:3rem}.sm\:translate-y-15{--transform-translate-y:3.75rem}.sm\:translate-y-16{--transform-translate-y:4rem}.sm\:translate-y-20{--transform-translate-y:5rem}.sm\:translate-y-22{--transform-translate-y:5.5rem}.sm\:translate-y-24{--transform-translate-y:6rem}.sm\:translate-y-25{--transform-translate-y:6.25rem}.sm\:translate-y-26{--transform-translate-y:6.5rem}.sm\:translate-y-28{--transform-translate-y:8rem}.sm\:translate-y-30{--transform-translate-y:8.5rem}.sm\:translate-y-32{--transform-translate-y:9rem}.sm\:translate-y-40{--transform-translate-y:10rem}.sm\:translate-y-48{--transform-translate-y:12rem}.sm\:translate-y-52{--transform-translate-y:13rem}.sm\:translate-y-56{--transform-translate-y:14rem}.sm\:translate-y-60{--transform-translate-y:15rem}.sm\:translate-y-64{--transform-translate-y:16rem}.sm\:translate-y-68{--transform-translate-y:17rem}.sm\:translate-y-px{--transform-translate-y:1px}.sm\:translate-y-0\.5{--transform-translate-y:.125rem}.sm\:translate-y-1\.5{--transform-translate-y:.375rem}.sm\:translate-y-2\.5{--transform-translate-y:.625rem}.sm\:translate-y-7\.5{--transform-translate-y:1.875rem}.sm\:-translate-y-1{--transform-translate-y:-0.25rem}.sm\:-translate-y-2{--transform-translate-y:-0.5rem}.sm\:-translate-y-3{--transform-translate-y:-0.75rem}.sm\:-translate-y-4{--transform-translate-y:-1rem}.sm\:-translate-y-5{--transform-translate-y:-1.25rem}.sm\:-translate-y-6{--transform-translate-y:-1.5rem}.sm\:-translate-y-7{--transform-translate-y:-1.75rem}.sm\:-translate-y-8{--transform-translate-y:-2rem}.sm\:-translate-y-9{--transform-translate-y:-2.25rem}.sm\:-translate-y-10{--transform-translate-y:-2.5rem}.sm\:-translate-y-11{--transform-translate-y:-2.75rem}.sm\:-translate-y-12{--transform-translate-y:-3rem}.sm\:-translate-y-15{--transform-translate-y:-3.75rem}.sm\:-translate-y-16{--transform-translate-y:-4rem}.sm\:-translate-y-20{--transform-translate-y:-5rem}.sm\:-translate-y-22{--transform-translate-y:-5.5rem}.sm\:-translate-y-24{--transform-translate-y:-6rem}.sm\:-translate-y-25{--transform-translate-y:-6.25rem}.sm\:-translate-y-26{--transform-translate-y:-6.5rem}.sm\:-translate-y-28{--transform-translate-y:-8rem}.sm\:-translate-y-30{--transform-translate-y:-8.5rem}.sm\:-translate-y-32{--transform-translate-y:-9rem}.sm\:-translate-y-40{--transform-translate-y:-10rem}.sm\:-translate-y-48{--transform-translate-y:-12rem}.sm\:-translate-y-52{--transform-translate-y:-13rem}.sm\:-translate-y-56{--transform-translate-y:-14rem}.sm\:-translate-y-60{--transform-translate-y:-15rem}.sm\:-translate-y-64{--transform-translate-y:-16rem}.sm\:-translate-y-68{--transform-translate-y:-17rem}.sm\:-translate-y-px{--transform-translate-y:-1px}.sm\:-translate-y-0\.5{--transform-translate-y:-0.125rem}.sm\:-translate-y-1\.5{--transform-translate-y:-0.375rem}.sm\:-translate-y-2\.5{--transform-translate-y:-0.625rem}.sm\:-translate-y-7\.5{--transform-translate-y:-1.875rem}.sm\:-translate-y-full{--transform-translate-y:-100%}.sm\:-translate-y-1\/2{--transform-translate-y:-50%}.sm\:translate-y-1\/2{--transform-translate-y:50%}.sm\:translate-y-full{--transform-translate-y:100%}.sm\:hover\:translate-x-0:hover{--transform-translate-x:0}.sm\:hover\:translate-x-1:hover{--transform-translate-x:.25rem}.sm\:hover\:translate-x-2:hover{--transform-translate-x:.5rem}.sm\:hover\:translate-x-3:hover{--transform-translate-x:.75rem}.sm\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.sm\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.sm\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.sm\:hover\:translate-x-7:hover{--transform-translate-x:1.75rem}.sm\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.sm\:hover\:translate-x-9:hover{--transform-translate-x:2.25rem}.sm\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.sm\:hover\:translate-x-11:hover{--transform-translate-x:2.75rem}.sm\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.sm\:hover\:translate-x-15:hover{--transform-translate-x:3.75rem}.sm\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.sm\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.sm\:hover\:translate-x-22:hover{--transform-translate-x:5.5rem}.sm\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.sm\:hover\:translate-x-25:hover{--transform-translate-x:6.25rem}.sm\:hover\:translate-x-26:hover{--transform-translate-x:6.5rem}.sm\:hover\:translate-x-28:hover{--transform-translate-x:8rem}.sm\:hover\:translate-x-30:hover{--transform-translate-x:8.5rem}.sm\:hover\:translate-x-32:hover{--transform-translate-x:9rem}.sm\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.sm\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.sm\:hover\:translate-x-52:hover{--transform-translate-x:13rem}.sm\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.sm\:hover\:translate-x-60:hover{--transform-translate-x:15rem}.sm\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.sm\:hover\:translate-x-68:hover{--transform-translate-x:17rem}.sm\:hover\:translate-x-px:hover{--transform-translate-x:1px}.sm\:hover\:translate-x-0\.5:hover{--transform-translate-x:.125rem}.sm\:hover\:translate-x-1\.5:hover{--transform-translate-x:.375rem}.sm\:hover\:translate-x-2\.5:hover{--transform-translate-x:.625rem}.sm\:hover\:translate-x-7\.5:hover{--transform-translate-x:1.875rem}.sm\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.sm\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.sm\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.sm\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.sm\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.sm\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.sm\:hover\:-translate-x-7:hover{--transform-translate-x:-1.75rem}.sm\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.sm\:hover\:-translate-x-9:hover{--transform-translate-x:-2.25rem}.sm\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.sm\:hover\:-translate-x-11:hover{--transform-translate-x:-2.75rem}.sm\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.sm\:hover\:-translate-x-15:hover{--transform-translate-x:-3.75rem}.sm\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.sm\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.sm\:hover\:-translate-x-22:hover{--transform-translate-x:-5.5rem}.sm\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.sm\:hover\:-translate-x-25:hover{--transform-translate-x:-6.25rem}.sm\:hover\:-translate-x-26:hover{--transform-translate-x:-6.5rem}.sm\:hover\:-translate-x-28:hover{--transform-translate-x:-8rem}.sm\:hover\:-translate-x-30:hover{--transform-translate-x:-8.5rem}.sm\:hover\:-translate-x-32:hover{--transform-translate-x:-9rem}.sm\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.sm\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.sm\:hover\:-translate-x-52:hover{--transform-translate-x:-13rem}.sm\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.sm\:hover\:-translate-x-60:hover{--transform-translate-x:-15rem}.sm\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.sm\:hover\:-translate-x-68:hover{--transform-translate-x:-17rem}.sm\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.sm\:hover\:-translate-x-0\.5:hover{--transform-translate-x:-0.125rem}.sm\:hover\:-translate-x-1\.5:hover{--transform-translate-x:-0.375rem}.sm\:hover\:-translate-x-2\.5:hover{--transform-translate-x:-0.625rem}.sm\:hover\:-translate-x-7\.5:hover{--transform-translate-x:-1.875rem}.sm\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.sm\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.sm\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.sm\:hover\:translate-x-full:hover{--transform-translate-x:100%}.sm\:hover\:translate-y-0:hover{--transform-translate-y:0}.sm\:hover\:translate-y-1:hover{--transform-translate-y:.25rem}.sm\:hover\:translate-y-2:hover{--transform-translate-y:.5rem}.sm\:hover\:translate-y-3:hover{--transform-translate-y:.75rem}.sm\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.sm\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.sm\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.sm\:hover\:translate-y-7:hover{--transform-translate-y:1.75rem}.sm\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.sm\:hover\:translate-y-9:hover{--transform-translate-y:2.25rem}.sm\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.sm\:hover\:translate-y-11:hover{--transform-translate-y:2.75rem}.sm\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.sm\:hover\:translate-y-15:hover{--transform-translate-y:3.75rem}.sm\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.sm\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.sm\:hover\:translate-y-22:hover{--transform-translate-y:5.5rem}.sm\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.sm\:hover\:translate-y-25:hover{--transform-translate-y:6.25rem}.sm\:hover\:translate-y-26:hover{--transform-translate-y:6.5rem}.sm\:hover\:translate-y-28:hover{--transform-translate-y:8rem}.sm\:hover\:translate-y-30:hover{--transform-translate-y:8.5rem}.sm\:hover\:translate-y-32:hover{--transform-translate-y:9rem}.sm\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.sm\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.sm\:hover\:translate-y-52:hover{--transform-translate-y:13rem}.sm\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.sm\:hover\:translate-y-60:hover{--transform-translate-y:15rem}.sm\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.sm\:hover\:translate-y-68:hover{--transform-translate-y:17rem}.sm\:hover\:translate-y-px:hover{--transform-translate-y:1px}.sm\:hover\:translate-y-0\.5:hover{--transform-translate-y:.125rem}.sm\:hover\:translate-y-1\.5:hover{--transform-translate-y:.375rem}.sm\:hover\:translate-y-2\.5:hover{--transform-translate-y:.625rem}.sm\:hover\:translate-y-7\.5:hover{--transform-translate-y:1.875rem}.sm\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.sm\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.sm\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.sm\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.sm\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.sm\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.sm\:hover\:-translate-y-7:hover{--transform-translate-y:-1.75rem}.sm\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.sm\:hover\:-translate-y-9:hover{--transform-translate-y:-2.25rem}.sm\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.sm\:hover\:-translate-y-11:hover{--transform-translate-y:-2.75rem}.sm\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.sm\:hover\:-translate-y-15:hover{--transform-translate-y:-3.75rem}.sm\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.sm\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.sm\:hover\:-translate-y-22:hover{--transform-translate-y:-5.5rem}.sm\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.sm\:hover\:-translate-y-25:hover{--transform-translate-y:-6.25rem}.sm\:hover\:-translate-y-26:hover{--transform-translate-y:-6.5rem}.sm\:hover\:-translate-y-28:hover{--transform-translate-y:-8rem}.sm\:hover\:-translate-y-30:hover{--transform-translate-y:-8.5rem}.sm\:hover\:-translate-y-32:hover{--transform-translate-y:-9rem}.sm\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.sm\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.sm\:hover\:-translate-y-52:hover{--transform-translate-y:-13rem}.sm\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.sm\:hover\:-translate-y-60:hover{--transform-translate-y:-15rem}.sm\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.sm\:hover\:-translate-y-68:hover{--transform-translate-y:-17rem}.sm\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.sm\:hover\:-translate-y-0\.5:hover{--transform-translate-y:-0.125rem}.sm\:hover\:-translate-y-1\.5:hover{--transform-translate-y:-0.375rem}.sm\:hover\:-translate-y-2\.5:hover{--transform-translate-y:-0.625rem}.sm\:hover\:-translate-y-7\.5:hover{--transform-translate-y:-1.875rem}.sm\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.sm\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.sm\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.sm\:hover\:translate-y-full:hover{--transform-translate-y:100%}.sm\:focus\:translate-x-0:focus{--transform-translate-x:0}.sm\:focus\:translate-x-1:focus{--transform-translate-x:.25rem}.sm\:focus\:translate-x-2:focus{--transform-translate-x:.5rem}.sm\:focus\:translate-x-3:focus{--transform-translate-x:.75rem}.sm\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.sm\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.sm\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.sm\:focus\:translate-x-7:focus{--transform-translate-x:1.75rem}.sm\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.sm\:focus\:translate-x-9:focus{--transform-translate-x:2.25rem}.sm\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.sm\:focus\:translate-x-11:focus{--transform-translate-x:2.75rem}.sm\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.sm\:focus\:translate-x-15:focus{--transform-translate-x:3.75rem}.sm\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.sm\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.sm\:focus\:translate-x-22:focus{--transform-translate-x:5.5rem}.sm\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.sm\:focus\:translate-x-25:focus{--transform-translate-x:6.25rem}.sm\:focus\:translate-x-26:focus{--transform-translate-x:6.5rem}.sm\:focus\:translate-x-28:focus{--transform-translate-x:8rem}.sm\:focus\:translate-x-30:focus{--transform-translate-x:8.5rem}.sm\:focus\:translate-x-32:focus{--transform-translate-x:9rem}.sm\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.sm\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.sm\:focus\:translate-x-52:focus{--transform-translate-x:13rem}.sm\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.sm\:focus\:translate-x-60:focus{--transform-translate-x:15rem}.sm\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.sm\:focus\:translate-x-68:focus{--transform-translate-x:17rem}.sm\:focus\:translate-x-px:focus{--transform-translate-x:1px}.sm\:focus\:translate-x-0\.5:focus{--transform-translate-x:.125rem}.sm\:focus\:translate-x-1\.5:focus{--transform-translate-x:.375rem}.sm\:focus\:translate-x-2\.5:focus{--transform-translate-x:.625rem}.sm\:focus\:translate-x-7\.5:focus{--transform-translate-x:1.875rem}.sm\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.sm\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.sm\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.sm\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.sm\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.sm\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.sm\:focus\:-translate-x-7:focus{--transform-translate-x:-1.75rem}.sm\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.sm\:focus\:-translate-x-9:focus{--transform-translate-x:-2.25rem}.sm\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.sm\:focus\:-translate-x-11:focus{--transform-translate-x:-2.75rem}.sm\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.sm\:focus\:-translate-x-15:focus{--transform-translate-x:-3.75rem}.sm\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.sm\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.sm\:focus\:-translate-x-22:focus{--transform-translate-x:-5.5rem}.sm\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.sm\:focus\:-translate-x-25:focus{--transform-translate-x:-6.25rem}.sm\:focus\:-translate-x-26:focus{--transform-translate-x:-6.5rem}.sm\:focus\:-translate-x-28:focus{--transform-translate-x:-8rem}.sm\:focus\:-translate-x-30:focus{--transform-translate-x:-8.5rem}.sm\:focus\:-translate-x-32:focus{--transform-translate-x:-9rem}.sm\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.sm\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.sm\:focus\:-translate-x-52:focus{--transform-translate-x:-13rem}.sm\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.sm\:focus\:-translate-x-60:focus{--transform-translate-x:-15rem}.sm\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.sm\:focus\:-translate-x-68:focus{--transform-translate-x:-17rem}.sm\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.sm\:focus\:-translate-x-0\.5:focus{--transform-translate-x:-0.125rem}.sm\:focus\:-translate-x-1\.5:focus{--transform-translate-x:-0.375rem}.sm\:focus\:-translate-x-2\.5:focus{--transform-translate-x:-0.625rem}.sm\:focus\:-translate-x-7\.5:focus{--transform-translate-x:-1.875rem}.sm\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.sm\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.sm\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.sm\:focus\:translate-x-full:focus{--transform-translate-x:100%}.sm\:focus\:translate-y-0:focus{--transform-translate-y:0}.sm\:focus\:translate-y-1:focus{--transform-translate-y:.25rem}.sm\:focus\:translate-y-2:focus{--transform-translate-y:.5rem}.sm\:focus\:translate-y-3:focus{--transform-translate-y:.75rem}.sm\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.sm\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.sm\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.sm\:focus\:translate-y-7:focus{--transform-translate-y:1.75rem}.sm\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.sm\:focus\:translate-y-9:focus{--transform-translate-y:2.25rem}.sm\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.sm\:focus\:translate-y-11:focus{--transform-translate-y:2.75rem}.sm\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.sm\:focus\:translate-y-15:focus{--transform-translate-y:3.75rem}.sm\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.sm\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.sm\:focus\:translate-y-22:focus{--transform-translate-y:5.5rem}.sm\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.sm\:focus\:translate-y-25:focus{--transform-translate-y:6.25rem}.sm\:focus\:translate-y-26:focus{--transform-translate-y:6.5rem}.sm\:focus\:translate-y-28:focus{--transform-translate-y:8rem}.sm\:focus\:translate-y-30:focus{--transform-translate-y:8.5rem}.sm\:focus\:translate-y-32:focus{--transform-translate-y:9rem}.sm\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.sm\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.sm\:focus\:translate-y-52:focus{--transform-translate-y:13rem}.sm\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.sm\:focus\:translate-y-60:focus{--transform-translate-y:15rem}.sm\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.sm\:focus\:translate-y-68:focus{--transform-translate-y:17rem}.sm\:focus\:translate-y-px:focus{--transform-translate-y:1px}.sm\:focus\:translate-y-0\.5:focus{--transform-translate-y:.125rem}.sm\:focus\:translate-y-1\.5:focus{--transform-translate-y:.375rem}.sm\:focus\:translate-y-2\.5:focus{--transform-translate-y:.625rem}.sm\:focus\:translate-y-7\.5:focus{--transform-translate-y:1.875rem}.sm\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.sm\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.sm\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.sm\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.sm\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.sm\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.sm\:focus\:-translate-y-7:focus{--transform-translate-y:-1.75rem}.sm\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.sm\:focus\:-translate-y-9:focus{--transform-translate-y:-2.25rem}.sm\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.sm\:focus\:-translate-y-11:focus{--transform-translate-y:-2.75rem}.sm\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.sm\:focus\:-translate-y-15:focus{--transform-translate-y:-3.75rem}.sm\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.sm\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.sm\:focus\:-translate-y-22:focus{--transform-translate-y:-5.5rem}.sm\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.sm\:focus\:-translate-y-25:focus{--transform-translate-y:-6.25rem}.sm\:focus\:-translate-y-26:focus{--transform-translate-y:-6.5rem}.sm\:focus\:-translate-y-28:focus{--transform-translate-y:-8rem}.sm\:focus\:-translate-y-30:focus{--transform-translate-y:-8.5rem}.sm\:focus\:-translate-y-32:focus{--transform-translate-y:-9rem}.sm\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.sm\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.sm\:focus\:-translate-y-52:focus{--transform-translate-y:-13rem}.sm\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.sm\:focus\:-translate-y-60:focus{--transform-translate-y:-15rem}.sm\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.sm\:focus\:-translate-y-68:focus{--transform-translate-y:-17rem}.sm\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.sm\:focus\:-translate-y-0\.5:focus{--transform-translate-y:-0.125rem}.sm\:focus\:-translate-y-1\.5:focus{--transform-translate-y:-0.375rem}.sm\:focus\:-translate-y-2\.5:focus{--transform-translate-y:-0.625rem}.sm\:focus\:-translate-y-7\.5:focus{--transform-translate-y:-1.875rem}.sm\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.sm\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.sm\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.sm\:focus\:translate-y-full:focus{--transform-translate-y:100%}.sm\:skew-x-0{--transform-skew-x:0}.sm\:skew-x-1{--transform-skew-x:1deg}.sm\:skew-x-2{--transform-skew-x:2deg}.sm\:skew-x-3{--transform-skew-x:3deg}.sm\:skew-x-6{--transform-skew-x:6deg}.sm\:skew-x-12{--transform-skew-x:12deg}.sm\:-skew-x-12{--transform-skew-x:-12deg}.sm\:-skew-x-6{--transform-skew-x:-6deg}.sm\:-skew-x-3{--transform-skew-x:-3deg}.sm\:-skew-x-2{--transform-skew-x:-2deg}.sm\:-skew-x-1{--transform-skew-x:-1deg}.sm\:skew-y-0{--transform-skew-y:0}.sm\:skew-y-1{--transform-skew-y:1deg}.sm\:skew-y-2{--transform-skew-y:2deg}.sm\:skew-y-3{--transform-skew-y:3deg}.sm\:skew-y-6{--transform-skew-y:6deg}.sm\:skew-y-12{--transform-skew-y:12deg}.sm\:-skew-y-12{--transform-skew-y:-12deg}.sm\:-skew-y-6{--transform-skew-y:-6deg}.sm\:-skew-y-3{--transform-skew-y:-3deg}.sm\:-skew-y-2{--transform-skew-y:-2deg}.sm\:-skew-y-1{--transform-skew-y:-1deg}.sm\:hover\:skew-x-0:hover{--transform-skew-x:0}.sm\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.sm\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.sm\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.sm\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.sm\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.sm\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.sm\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.sm\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.sm\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.sm\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.sm\:hover\:skew-y-0:hover{--transform-skew-y:0}.sm\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.sm\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.sm\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.sm\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.sm\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.sm\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.sm\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.sm\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.sm\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.sm\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.sm\:focus\:skew-x-0:focus{--transform-skew-x:0}.sm\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.sm\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.sm\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.sm\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.sm\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.sm\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.sm\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.sm\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.sm\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.sm\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.sm\:focus\:skew-y-0:focus{--transform-skew-y:0}.sm\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.sm\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.sm\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.sm\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.sm\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.sm\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.sm\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.sm\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.sm\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.sm\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.sm\:transition-none{transition-property:none}.sm\:transition-all{transition-property:all}.sm\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.sm\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.sm\:transition-opacity{transition-property:opacity}.sm\:transition-shadow{transition-property:box-shadow}.sm\:transition-transform{transition-property:transform}.sm\:ease-linear{transition-timing-function:linear}.sm\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.sm\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.sm\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.sm\:duration-75{transition-duration:75ms}.sm\:duration-100{transition-duration:.1s}.sm\:duration-150{transition-duration:.15s}.sm\:duration-200{transition-duration:.2s}.sm\:duration-300{transition-duration:.3s}.sm\:duration-500{transition-duration:.5s}.sm\:duration-700{transition-duration:.7s}.sm\:duration-1000{transition-duration:1s}.sm\:delay-75{transition-delay:75ms}.sm\:delay-100{transition-delay:.1s}.sm\:delay-150{transition-delay:.15s}.sm\:delay-200{transition-delay:.2s}.sm\:delay-300{transition-delay:.3s}.sm\:delay-500{transition-delay:.5s}.sm\:delay-700{transition-delay:.7s}.sm\:delay-1000{transition-delay:1s}.sm\:animate-none{-webkit-animation:none;animation:none}.sm\:animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.sm\:animate-ping{-webkit-animation:ping 1s cubic-bezier(0,0,.2,1) infinite;animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.sm\:animate-pulse{-webkit-animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.sm\:animate-bounce{-webkit-animation:bounce 1s infinite;animation:bounce 1s infinite}.sm\:transform-none{transform:none}.sm\:transform-center{transform-origin:center}.sm\:transform-top{transform-origin:top}.sm\:transform-top-right{transform-origin:top right}.sm\:transform-right{transform-origin:right}.sm\:transform-bottom-right{transform-origin:bottom right}.sm\:transform-bottom{transform-origin:bottom}.sm\:transform-bottom-left{transform-origin:bottom left}.sm\:transform-left{transform-origin:left}.sm\:transform-top-left{transform-origin:top left}.sm\:translate-x-0{transform:translateX(0)}.sm\:translate-y-0{transform:translateY(0)}.sm\:translate-x-1{transform:translateX(.25rem)}.sm\:translate-y-1{transform:translateY(.25rem)}.sm\:translate-x-2{transform:translateX(.5rem)}.sm\:translate-y-2{transform:translateY(.5rem)}.sm\:translate-x-3{transform:translateX(.75rem)}.sm\:translate-y-3{transform:translateY(.75rem)}.sm\:translate-x-4{transform:translateX(1rem)}.sm\:translate-y-4{transform:translateY(1rem)}.sm\:translate-x-5{transform:translateX(1.25rem)}.sm\:translate-y-5{transform:translateY(1.25rem)}.sm\:translate-x-6{transform:translateX(1.5rem)}.sm\:translate-y-6{transform:translateY(1.5rem)}.sm\:translate-x-7{transform:translateX(1.75rem)}.sm\:translate-y-7{transform:translateY(1.75rem)}.sm\:translate-x-8{transform:translateX(2rem)}.sm\:translate-y-8{transform:translateY(2rem)}.sm\:translate-x-9{transform:translateX(2.25rem)}.sm\:translate-y-9{transform:translateY(2.25rem)}.sm\:translate-x-10{transform:translateX(2.5rem)}.sm\:translate-y-10{transform:translateY(2.5rem)}.sm\:translate-x-11{transform:translateX(2.75rem)}.sm\:translate-y-11{transform:translateY(2.75rem)}.sm\:translate-x-12{transform:translateX(3rem)}.sm\:translate-y-12{transform:translateY(3rem)}.sm\:translate-x-15{transform:translateX(3.75rem)}.sm\:translate-y-15{transform:translateY(3.75rem)}.sm\:translate-x-16{transform:translateX(4rem)}.sm\:translate-y-16{transform:translateY(4rem)}.sm\:translate-x-20{transform:translateX(5rem)}.sm\:translate-y-20{transform:translateY(5rem)}.sm\:translate-x-22{transform:translateX(5.5rem)}.sm\:translate-y-22{transform:translateY(5.5rem)}.sm\:translate-x-24{transform:translateX(6rem)}.sm\:translate-y-24{transform:translateY(6rem)}.sm\:translate-x-25{transform:translateX(6.25rem)}.sm\:translate-y-25{transform:translateY(6.25rem)}.sm\:translate-x-26{transform:translateX(6.5rem)}.sm\:translate-y-26{transform:translateY(6.5rem)}.sm\:translate-x-28{transform:translateX(8rem)}.sm\:translate-y-28{transform:translateY(8rem)}.sm\:translate-x-30{transform:translateX(8.5rem)}.sm\:translate-y-30{transform:translateY(8.5rem)}.sm\:translate-x-32{transform:translateX(9rem)}.sm\:translate-y-32{transform:translateY(9rem)}.sm\:translate-x-40{transform:translateX(10rem)}.sm\:translate-y-40{transform:translateY(10rem)}.sm\:translate-x-48{transform:translateX(12rem)}.sm\:translate-y-48{transform:translateY(12rem)}.sm\:translate-x-52{transform:translateX(13rem)}.sm\:translate-y-52{transform:translateY(13rem)}.sm\:translate-x-56{transform:translateX(14rem)}.sm\:translate-y-56{transform:translateY(14rem)}.sm\:translate-x-60{transform:translateX(15rem)}.sm\:translate-y-60{transform:translateY(15rem)}.sm\:translate-x-64{transform:translateX(16rem)}.sm\:translate-y-64{transform:translateY(16rem)}.sm\:translate-x-68{transform:translateX(17rem)}.sm\:translate-y-68{transform:translateY(17rem)}.sm\:translate-x-px{transform:translateX(1px)}.sm\:translate-y-px{transform:translateY(1px)}.sm\:translate-x-0\.5{transform:translateX(.125rem)}.sm\:translate-y-0\.5{transform:translateY(.125rem)}.sm\:translate-x-1\.5{transform:translateX(.375rem)}.sm\:translate-y-1\.5{transform:translateY(.375rem)}.sm\:translate-x-2\.5{transform:translateX(.625rem)}.sm\:translate-y-2\.5{transform:translateY(.625rem)}.sm\:translate-x-7\.5{transform:translateX(1.875rem)}.sm\:translate-y-7\.5{transform:translateY(1.875rem)}.sm\:-translate-x-1{transform:translateX(-.25rem)}.sm\:-translate-y-1{transform:translateY(-.25rem)}.sm\:-translate-x-2{transform:translateX(-.5rem)}.sm\:-translate-y-2{transform:translateY(-.5rem)}.sm\:-translate-x-3{transform:translateX(-.75rem)}.sm\:-translate-y-3{transform:translateY(-.75rem)}.sm\:-translate-x-4{transform:translateX(-1rem)}.sm\:-translate-y-4{transform:translateY(-1rem)}.sm\:-translate-x-5{transform:translateX(-1.25rem)}.sm\:-translate-y-5{transform:translateY(-1.25rem)}.sm\:-translate-x-6{transform:translateX(-1.5rem)}.sm\:-translate-y-6{transform:translateY(-1.5rem)}.sm\:-translate-x-7{transform:translateX(-1.75rem)}.sm\:-translate-y-7{transform:translateY(-1.75rem)}.sm\:-translate-x-8{transform:translateX(-2rem)}.sm\:-translate-y-8{transform:translateY(-2rem)}.sm\:-translate-x-9{transform:translateX(-2.25rem)}.sm\:-translate-y-9{transform:translateY(-2.25rem)}.sm\:-translate-x-10{transform:translateX(-2.5rem)}.sm\:-translate-y-10{transform:translateY(-2.5rem)}.sm\:-translate-x-11{transform:translateX(-2.75rem)}.sm\:-translate-y-11{transform:translateY(-2.75rem)}.sm\:-translate-x-12{transform:translateX(-3rem)}.sm\:-translate-y-12{transform:translateY(-3rem)}.sm\:-translate-x-15{transform:translateX(-3.75rem)}.sm\:-translate-y-15{transform:translateY(-3.75rem)}.sm\:-translate-x-16{transform:translateX(-4rem)}.sm\:-translate-y-16{transform:translateY(-4rem)}.sm\:-translate-x-20{transform:translateX(-5rem)}.sm\:-translate-y-20{transform:translateY(-5rem)}.sm\:-translate-x-22{transform:translateX(-5.5rem)}.sm\:-translate-y-22{transform:translateY(-5.5rem)}.sm\:-translate-x-24{transform:translateX(-6rem)}.sm\:-translate-y-24{transform:translateY(-6rem)}.sm\:-translate-x-25{transform:translateX(-6.25rem)}.sm\:-translate-y-25{transform:translateY(-6.25rem)}.sm\:-translate-x-26{transform:translateX(-6.5rem)}.sm\:-translate-y-26{transform:translateY(-6.5rem)}.sm\:-translate-x-28{transform:translateX(-8rem)}.sm\:-translate-y-28{transform:translateY(-8rem)}.sm\:-translate-x-30{transform:translateX(-8.5rem)}.sm\:-translate-y-30{transform:translateY(-8.5rem)}.sm\:-translate-x-32{transform:translateX(-9rem)}.sm\:-translate-y-32{transform:translateY(-9rem)}.sm\:-translate-x-40{transform:translateX(-10rem)}.sm\:-translate-y-40{transform:translateY(-10rem)}.sm\:-translate-x-48{transform:translateX(-12rem)}.sm\:-translate-y-48{transform:translateY(-12rem)}.sm\:-translate-x-52{transform:translateX(-13rem)}.sm\:-translate-y-52{transform:translateY(-13rem)}.sm\:-translate-x-56{transform:translateX(-14rem)}.sm\:-translate-y-56{transform:translateY(-14rem)}.sm\:-translate-x-60{transform:translateX(-15rem)}.sm\:-translate-y-60{transform:translateY(-15rem)}.sm\:-translate-x-64{transform:translateX(-16rem)}.sm\:-translate-y-64{transform:translateY(-16rem)}.sm\:-translate-x-68{transform:translateX(-17rem)}.sm\:-translate-y-68{transform:translateY(-17rem)}.sm\:-translate-x-px{transform:translateX(-1px)}.sm\:-translate-y-px{transform:translateY(-1px)}.sm\:-translate-x-0\.5{transform:translateX(-.125rem)}.sm\:-translate-y-0\.5{transform:translateY(-.125rem)}.sm\:-translate-x-1\.5{transform:translateX(-.375rem)}.sm\:-translate-y-1\.5{transform:translateY(-.375rem)}.sm\:-translate-x-2\.5{transform:translateX(-.625rem)}.sm\:-translate-y-2\.5{transform:translateY(-.625rem)}.sm\:-translate-x-7\.5{transform:translateX(-1.875rem)}.sm\:-translate-y-7\.5{transform:translateY(-1.875rem)}.sm\:-translate-x-full{transform:translateX(-100%)}.sm\:-translate-y-full{transform:translateY(-100%)}.sm\:-translate-x-1\/2{transform:translateX(-50%)}.sm\:-translate-y-1\/2{transform:translateY(-50%)}.sm\:translate-x-1\/2{transform:translateX(50%)}.sm\:translate-y-1\/2{transform:translateY(50%)}.sm\:translate-x-full{transform:translateX(100%)}.sm\:translate-y-full{transform:translateY(100%)}.sm\:hover\:translate-x-0:hover{transform:translateX(0)}.sm\:hover\:translate-y-0:hover{transform:translateY(0)}.sm\:hover\:translate-x-1:hover{transform:translateX(.25rem)}.sm\:hover\:translate-y-1:hover{transform:translateY(.25rem)}.sm\:hover\:translate-x-2:hover{transform:translateX(.5rem)}.sm\:hover\:translate-y-2:hover{transform:translateY(.5rem)}.sm\:hover\:translate-x-3:hover{transform:translateX(.75rem)}.sm\:hover\:translate-y-3:hover{transform:translateY(.75rem)}.sm\:hover\:translate-x-4:hover{transform:translateX(1rem)}.sm\:hover\:translate-y-4:hover{transform:translateY(1rem)}.sm\:hover\:translate-x-5:hover{transform:translateX(1.25rem)}.sm\:hover\:translate-y-5:hover{transform:translateY(1.25rem)}.sm\:hover\:translate-x-6:hover{transform:translateX(1.5rem)}.sm\:hover\:translate-y-6:hover{transform:translateY(1.5rem)}.sm\:hover\:translate-x-7:hover{transform:translateX(1.75rem)}.sm\:hover\:translate-y-7:hover{transform:translateY(1.75rem)}.sm\:hover\:translate-x-8:hover{transform:translateX(2rem)}.sm\:hover\:translate-y-8:hover{transform:translateY(2rem)}.sm\:hover\:translate-x-9:hover{transform:translateX(2.25rem)}.sm\:hover\:translate-y-9:hover{transform:translateY(2.25rem)}.sm\:hover\:translate-x-10:hover{transform:translateX(2.5rem)}.sm\:hover\:translate-y-10:hover{transform:translateY(2.5rem)}.sm\:hover\:translate-x-11:hover{transform:translateX(2.75rem)}.sm\:hover\:translate-y-11:hover{transform:translateY(2.75rem)}.sm\:hover\:translate-x-12:hover{transform:translateX(3rem)}.sm\:hover\:translate-y-12:hover{transform:translateY(3rem)}.sm\:hover\:translate-x-15:hover{transform:translateX(3.75rem)}.sm\:hover\:translate-y-15:hover{transform:translateY(3.75rem)}.sm\:hover\:translate-x-16:hover{transform:translateX(4rem)}.sm\:hover\:translate-y-16:hover{transform:translateY(4rem)}.sm\:hover\:translate-x-20:hover{transform:translateX(5rem)}.sm\:hover\:translate-y-20:hover{transform:translateY(5rem)}.sm\:hover\:translate-x-22:hover{transform:translateX(5.5rem)}.sm\:hover\:translate-y-22:hover{transform:translateY(5.5rem)}.sm\:hover\:translate-x-24:hover{transform:translateX(6rem)}.sm\:hover\:translate-y-24:hover{transform:translateY(6rem)}.sm\:hover\:translate-x-25:hover{transform:translateX(6.25rem)}.sm\:hover\:translate-y-25:hover{transform:translateY(6.25rem)}.sm\:hover\:translate-x-26:hover{transform:translateX(6.5rem)}.sm\:hover\:translate-y-26:hover{transform:translateY(6.5rem)}.sm\:hover\:translate-x-28:hover{transform:translateX(8rem)}.sm\:hover\:translate-y-28:hover{transform:translateY(8rem)}.sm\:hover\:translate-x-30:hover{transform:translateX(8.5rem)}.sm\:hover\:translate-y-30:hover{transform:translateY(8.5rem)}.sm\:hover\:translate-x-32:hover{transform:translateX(9rem)}.sm\:hover\:translate-y-32:hover{transform:translateY(9rem)}.sm\:hover\:translate-x-40:hover{transform:translateX(10rem)}.sm\:hover\:translate-y-40:hover{transform:translateY(10rem)}.sm\:hover\:translate-x-48:hover{transform:translateX(12rem)}.sm\:hover\:translate-y-48:hover{transform:translateY(12rem)}.sm\:hover\:translate-x-52:hover{transform:translateX(13rem)}.sm\:hover\:translate-y-52:hover{transform:translateY(13rem)}.sm\:hover\:translate-x-56:hover{transform:translateX(14rem)}.sm\:hover\:translate-y-56:hover{transform:translateY(14rem)}.sm\:hover\:translate-x-60:hover{transform:translateX(15rem)}.sm\:hover\:translate-y-60:hover{transform:translateY(15rem)}.sm\:hover\:translate-x-64:hover{transform:translateX(16rem)}.sm\:hover\:translate-y-64:hover{transform:translateY(16rem)}.sm\:hover\:translate-x-68:hover{transform:translateX(17rem)}.sm\:hover\:translate-y-68:hover{transform:translateY(17rem)}.sm\:hover\:translate-x-px:hover{transform:translateX(1px)}.sm\:hover\:translate-y-px:hover{transform:translateY(1px)}.sm\:hover\:translate-x-0\.5:hover{transform:translateX(.125rem)}.sm\:hover\:translate-y-0\.5:hover{transform:translateY(.125rem)}.sm\:hover\:translate-x-1\.5:hover{transform:translateX(.375rem)}.sm\:hover\:translate-y-1\.5:hover{transform:translateY(.375rem)}.sm\:hover\:translate-x-2\.5:hover{transform:translateX(.625rem)}.sm\:hover\:translate-y-2\.5:hover{transform:translateY(.625rem)}.sm\:hover\:translate-x-7\.5:hover{transform:translateX(1.875rem)}.sm\:hover\:translate-y-7\.5:hover{transform:translateY(1.875rem)}.sm\:hover\:-translate-x-1:hover{transform:translateX(-.25rem)}.sm\:hover\:-translate-y-1:hover{transform:translateY(-.25rem)}.sm\:hover\:-translate-x-2:hover{transform:translateX(-.5rem)}.sm\:hover\:-translate-y-2:hover{transform:translateY(-.5rem)}.sm\:hover\:-translate-x-3:hover{transform:translateX(-.75rem)}.sm\:hover\:-translate-y-3:hover{transform:translateY(-.75rem)}.sm\:hover\:-translate-x-4:hover{transform:translateX(-1rem)}.sm\:hover\:-translate-y-4:hover{transform:translateY(-1rem)}.sm\:hover\:-translate-x-5:hover{transform:translateX(-1.25rem)}.sm\:hover\:-translate-y-5:hover{transform:translateY(-1.25rem)}.sm\:hover\:-translate-x-6:hover{transform:translateX(-1.5rem)}.sm\:hover\:-translate-y-6:hover{transform:translateY(-1.5rem)}.sm\:hover\:-translate-x-7:hover{transform:translateX(-1.75rem)}.sm\:hover\:-translate-y-7:hover{transform:translateY(-1.75rem)}.sm\:hover\:-translate-x-8:hover{transform:translateX(-2rem)}.sm\:hover\:-translate-y-8:hover{transform:translateY(-2rem)}.sm\:hover\:-translate-x-9:hover{transform:translateX(-2.25rem)}.sm\:hover\:-translate-y-9:hover{transform:translateY(-2.25rem)}.sm\:hover\:-translate-x-10:hover{transform:translateX(-2.5rem)}.sm\:hover\:-translate-y-10:hover{transform:translateY(-2.5rem)}.sm\:hover\:-translate-x-11:hover{transform:translateX(-2.75rem)}.sm\:hover\:-translate-y-11:hover{transform:translateY(-2.75rem)}.sm\:hover\:-translate-x-12:hover{transform:translateX(-3rem)}.sm\:hover\:-translate-y-12:hover{transform:translateY(-3rem)}.sm\:hover\:-translate-x-15:hover{transform:translateX(-3.75rem)}.sm\:hover\:-translate-y-15:hover{transform:translateY(-3.75rem)}.sm\:hover\:-translate-x-16:hover{transform:translateX(-4rem)}.sm\:hover\:-translate-y-16:hover{transform:translateY(-4rem)}.sm\:hover\:-translate-x-20:hover{transform:translateX(-5rem)}.sm\:hover\:-translate-y-20:hover{transform:translateY(-5rem)}.sm\:hover\:-translate-x-22:hover{transform:translateX(-5.5rem)}.sm\:hover\:-translate-y-22:hover{transform:translateY(-5.5rem)}.sm\:hover\:-translate-x-24:hover{transform:translateX(-6rem)}.sm\:hover\:-translate-y-24:hover{transform:translateY(-6rem)}.sm\:hover\:-translate-x-25:hover{transform:translateX(-6.25rem)}.sm\:hover\:-translate-y-25:hover{transform:translateY(-6.25rem)}.sm\:hover\:-translate-x-26:hover{transform:translateX(-6.5rem)}.sm\:hover\:-translate-y-26:hover{transform:translateY(-6.5rem)}.sm\:hover\:-translate-x-28:hover{transform:translateX(-8rem)}.sm\:hover\:-translate-y-28:hover{transform:translateY(-8rem)}.sm\:hover\:-translate-x-30:hover{transform:translateX(-8.5rem)}.sm\:hover\:-translate-y-30:hover{transform:translateY(-8.5rem)}.sm\:hover\:-translate-x-32:hover{transform:translateX(-9rem)}.sm\:hover\:-translate-y-32:hover{transform:translateY(-9rem)}.sm\:hover\:-translate-x-40:hover{transform:translateX(-10rem)}.sm\:hover\:-translate-y-40:hover{transform:translateY(-10rem)}.sm\:hover\:-translate-x-48:hover{transform:translateX(-12rem)}.sm\:hover\:-translate-y-48:hover{transform:translateY(-12rem)}.sm\:hover\:-translate-x-52:hover{transform:translateX(-13rem)}.sm\:hover\:-translate-y-52:hover{transform:translateY(-13rem)}.sm\:hover\:-translate-x-56:hover{transform:translateX(-14rem)}.sm\:hover\:-translate-y-56:hover{transform:translateY(-14rem)}.sm\:hover\:-translate-x-60:hover{transform:translateX(-15rem)}.sm\:hover\:-translate-y-60:hover{transform:translateY(-15rem)}.sm\:hover\:-translate-x-64:hover{transform:translateX(-16rem)}.sm\:hover\:-translate-y-64:hover{transform:translateY(-16rem)}.sm\:hover\:-translate-x-68:hover{transform:translateX(-17rem)}.sm\:hover\:-translate-y-68:hover{transform:translateY(-17rem)}.sm\:hover\:-translate-x-px:hover{transform:translateX(-1px)}.sm\:hover\:-translate-y-px:hover{transform:translateY(-1px)}.sm\:hover\:-translate-x-0\.5:hover{transform:translateX(-.125rem)}.sm\:hover\:-translate-y-0\.5:hover{transform:translateY(-.125rem)}.sm\:hover\:-translate-x-1\.5:hover{transform:translateX(-.375rem)}.sm\:hover\:-translate-y-1\.5:hover{transform:translateY(-.375rem)}.sm\:hover\:-translate-x-2\.5:hover{transform:translateX(-.625rem)}.sm\:hover\:-translate-y-2\.5:hover{transform:translateY(-.625rem)}.sm\:hover\:-translate-x-7\.5:hover{transform:translateX(-1.875rem)}.sm\:hover\:-translate-y-7\.5:hover{transform:translateY(-1.875rem)}.sm\:hover\:-translate-x-full:hover{transform:translateX(-100%)}.sm\:hover\:-translate-y-full:hover{transform:translateY(-100%)}.sm\:hover\:-translate-x-1\/2:hover{transform:translateX(-50%)}.sm\:hover\:-translate-y-1\/2:hover{transform:translateY(-50%)}.sm\:hover\:translate-x-1\/2:hover{transform:translateX(50%)}.sm\:hover\:translate-y-1\/2:hover{transform:translateY(50%)}.sm\:hover\:translate-x-full:hover{transform:translateX(100%)}.sm\:hover\:translate-y-full:hover{transform:translateY(100%)}.sm\:focus\:translate-x-0:focus{transform:translateX(0)}.sm\:focus\:translate-y-0:focus{transform:translateY(0)}.sm\:focus\:translate-x-1:focus{transform:translateX(.25rem)}.sm\:focus\:translate-y-1:focus{transform:translateY(.25rem)}.sm\:focus\:translate-x-2:focus{transform:translateX(.5rem)}.sm\:focus\:translate-y-2:focus{transform:translateY(.5rem)}.sm\:focus\:translate-x-3:focus{transform:translateX(.75rem)}.sm\:focus\:translate-y-3:focus{transform:translateY(.75rem)}.sm\:focus\:translate-x-4:focus{transform:translateX(1rem)}.sm\:focus\:translate-y-4:focus{transform:translateY(1rem)}.sm\:focus\:translate-x-5:focus{transform:translateX(1.25rem)}.sm\:focus\:translate-y-5:focus{transform:translateY(1.25rem)}.sm\:focus\:translate-x-6:focus{transform:translateX(1.5rem)}.sm\:focus\:translate-y-6:focus{transform:translateY(1.5rem)}.sm\:focus\:translate-x-7:focus{transform:translateX(1.75rem)}.sm\:focus\:translate-y-7:focus{transform:translateY(1.75rem)}.sm\:focus\:translate-x-8:focus{transform:translateX(2rem)}.sm\:focus\:translate-y-8:focus{transform:translateY(2rem)}.sm\:focus\:translate-x-9:focus{transform:translateX(2.25rem)}.sm\:focus\:translate-y-9:focus{transform:translateY(2.25rem)}.sm\:focus\:translate-x-10:focus{transform:translateX(2.5rem)}.sm\:focus\:translate-y-10:focus{transform:translateY(2.5rem)}.sm\:focus\:translate-x-11:focus{transform:translateX(2.75rem)}.sm\:focus\:translate-y-11:focus{transform:translateY(2.75rem)}.sm\:focus\:translate-x-12:focus{transform:translateX(3rem)}.sm\:focus\:translate-y-12:focus{transform:translateY(3rem)}.sm\:focus\:translate-x-15:focus{transform:translateX(3.75rem)}.sm\:focus\:translate-y-15:focus{transform:translateY(3.75rem)}.sm\:focus\:translate-x-16:focus{transform:translateX(4rem)}.sm\:focus\:translate-y-16:focus{transform:translateY(4rem)}.sm\:focus\:translate-x-20:focus{transform:translateX(5rem)}.sm\:focus\:translate-y-20:focus{transform:translateY(5rem)}.sm\:focus\:translate-x-22:focus{transform:translateX(5.5rem)}.sm\:focus\:translate-y-22:focus{transform:translateY(5.5rem)}.sm\:focus\:translate-x-24:focus{transform:translateX(6rem)}.sm\:focus\:translate-y-24:focus{transform:translateY(6rem)}.sm\:focus\:translate-x-25:focus{transform:translateX(6.25rem)}.sm\:focus\:translate-y-25:focus{transform:translateY(6.25rem)}.sm\:focus\:translate-x-26:focus{transform:translateX(6.5rem)}.sm\:focus\:translate-y-26:focus{transform:translateY(6.5rem)}.sm\:focus\:translate-x-28:focus{transform:translateX(8rem)}.sm\:focus\:translate-y-28:focus{transform:translateY(8rem)}.sm\:focus\:translate-x-30:focus{transform:translateX(8.5rem)}.sm\:focus\:translate-y-30:focus{transform:translateY(8.5rem)}.sm\:focus\:translate-x-32:focus{transform:translateX(9rem)}.sm\:focus\:translate-y-32:focus{transform:translateY(9rem)}.sm\:focus\:translate-x-40:focus{transform:translateX(10rem)}.sm\:focus\:translate-y-40:focus{transform:translateY(10rem)}.sm\:focus\:translate-x-48:focus{transform:translateX(12rem)}.sm\:focus\:translate-y-48:focus{transform:translateY(12rem)}.sm\:focus\:translate-x-52:focus{transform:translateX(13rem)}.sm\:focus\:translate-y-52:focus{transform:translateY(13rem)}.sm\:focus\:translate-x-56:focus{transform:translateX(14rem)}.sm\:focus\:translate-y-56:focus{transform:translateY(14rem)}.sm\:focus\:translate-x-60:focus{transform:translateX(15rem)}.sm\:focus\:translate-y-60:focus{transform:translateY(15rem)}.sm\:focus\:translate-x-64:focus{transform:translateX(16rem)}.sm\:focus\:translate-y-64:focus{transform:translateY(16rem)}.sm\:focus\:translate-x-68:focus{transform:translateX(17rem)}.sm\:focus\:translate-y-68:focus{transform:translateY(17rem)}.sm\:focus\:translate-x-px:focus{transform:translateX(1px)}.sm\:focus\:translate-y-px:focus{transform:translateY(1px)}.sm\:focus\:translate-x-0\.5:focus{transform:translateX(.125rem)}.sm\:focus\:translate-y-0\.5:focus{transform:translateY(.125rem)}.sm\:focus\:translate-x-1\.5:focus{transform:translateX(.375rem)}.sm\:focus\:translate-y-1\.5:focus{transform:translateY(.375rem)}.sm\:focus\:translate-x-2\.5:focus{transform:translateX(.625rem)}.sm\:focus\:translate-y-2\.5:focus{transform:translateY(.625rem)}.sm\:focus\:translate-x-7\.5:focus{transform:translateX(1.875rem)}.sm\:focus\:translate-y-7\.5:focus{transform:translateY(1.875rem)}.sm\:focus\:-translate-x-1:focus{transform:translateX(-.25rem)}.sm\:focus\:-translate-y-1:focus{transform:translateY(-.25rem)}.sm\:focus\:-translate-x-2:focus{transform:translateX(-.5rem)}.sm\:focus\:-translate-y-2:focus{transform:translateY(-.5rem)}.sm\:focus\:-translate-x-3:focus{transform:translateX(-.75rem)}.sm\:focus\:-translate-y-3:focus{transform:translateY(-.75rem)}.sm\:focus\:-translate-x-4:focus{transform:translateX(-1rem)}.sm\:focus\:-translate-y-4:focus{transform:translateY(-1rem)}.sm\:focus\:-translate-x-5:focus{transform:translateX(-1.25rem)}.sm\:focus\:-translate-y-5:focus{transform:translateY(-1.25rem)}.sm\:focus\:-translate-x-6:focus{transform:translateX(-1.5rem)}.sm\:focus\:-translate-y-6:focus{transform:translateY(-1.5rem)}.sm\:focus\:-translate-x-7:focus{transform:translateX(-1.75rem)}.sm\:focus\:-translate-y-7:focus{transform:translateY(-1.75rem)}.sm\:focus\:-translate-x-8:focus{transform:translateX(-2rem)}.sm\:focus\:-translate-y-8:focus{transform:translateY(-2rem)}.sm\:focus\:-translate-x-9:focus{transform:translateX(-2.25rem)}.sm\:focus\:-translate-y-9:focus{transform:translateY(-2.25rem)}.sm\:focus\:-translate-x-10:focus{transform:translateX(-2.5rem)}.sm\:focus\:-translate-y-10:focus{transform:translateY(-2.5rem)}.sm\:focus\:-translate-x-11:focus{transform:translateX(-2.75rem)}.sm\:focus\:-translate-y-11:focus{transform:translateY(-2.75rem)}.sm\:focus\:-translate-x-12:focus{transform:translateX(-3rem)}.sm\:focus\:-translate-y-12:focus{transform:translateY(-3rem)}.sm\:focus\:-translate-x-15:focus{transform:translateX(-3.75rem)}.sm\:focus\:-translate-y-15:focus{transform:translateY(-3.75rem)}.sm\:focus\:-translate-x-16:focus{transform:translateX(-4rem)}.sm\:focus\:-translate-y-16:focus{transform:translateY(-4rem)}.sm\:focus\:-translate-x-20:focus{transform:translateX(-5rem)}.sm\:focus\:-translate-y-20:focus{transform:translateY(-5rem)}.sm\:focus\:-translate-x-22:focus{transform:translateX(-5.5rem)}.sm\:focus\:-translate-y-22:focus{transform:translateY(-5.5rem)}.sm\:focus\:-translate-x-24:focus{transform:translateX(-6rem)}.sm\:focus\:-translate-y-24:focus{transform:translateY(-6rem)}.sm\:focus\:-translate-x-25:focus{transform:translateX(-6.25rem)}.sm\:focus\:-translate-y-25:focus{transform:translateY(-6.25rem)}.sm\:focus\:-translate-x-26:focus{transform:translateX(-6.5rem)}.sm\:focus\:-translate-y-26:focus{transform:translateY(-6.5rem)}.sm\:focus\:-translate-x-28:focus{transform:translateX(-8rem)}.sm\:focus\:-translate-y-28:focus{transform:translateY(-8rem)}.sm\:focus\:-translate-x-30:focus{transform:translateX(-8.5rem)}.sm\:focus\:-translate-y-30:focus{transform:translateY(-8.5rem)}.sm\:focus\:-translate-x-32:focus{transform:translateX(-9rem)}.sm\:focus\:-translate-y-32:focus{transform:translateY(-9rem)}.sm\:focus\:-translate-x-40:focus{transform:translateX(-10rem)}.sm\:focus\:-translate-y-40:focus{transform:translateY(-10rem)}.sm\:focus\:-translate-x-48:focus{transform:translateX(-12rem)}.sm\:focus\:-translate-y-48:focus{transform:translateY(-12rem)}.sm\:focus\:-translate-x-52:focus{transform:translateX(-13rem)}.sm\:focus\:-translate-y-52:focus{transform:translateY(-13rem)}.sm\:focus\:-translate-x-56:focus{transform:translateX(-14rem)}.sm\:focus\:-translate-y-56:focus{transform:translateY(-14rem)}.sm\:focus\:-translate-x-60:focus{transform:translateX(-15rem)}.sm\:focus\:-translate-y-60:focus{transform:translateY(-15rem)}.sm\:focus\:-translate-x-64:focus{transform:translateX(-16rem)}.sm\:focus\:-translate-y-64:focus{transform:translateY(-16rem)}.sm\:focus\:-translate-x-68:focus{transform:translateX(-17rem)}.sm\:focus\:-translate-y-68:focus{transform:translateY(-17rem)}.sm\:focus\:-translate-x-px:focus{transform:translateX(-1px)}.sm\:focus\:-translate-y-px:focus{transform:translateY(-1px)}.sm\:focus\:-translate-x-0\.5:focus{transform:translateX(-.125rem)}.sm\:focus\:-translate-y-0\.5:focus{transform:translateY(-.125rem)}.sm\:focus\:-translate-x-1\.5:focus{transform:translateX(-.375rem)}.sm\:focus\:-translate-y-1\.5:focus{transform:translateY(-.375rem)}.sm\:focus\:-translate-x-2\.5:focus{transform:translateX(-.625rem)}.sm\:focus\:-translate-y-2\.5:focus{transform:translateY(-.625rem)}.sm\:focus\:-translate-x-7\.5:focus{transform:translateX(-1.875rem)}.sm\:focus\:-translate-y-7\.5:focus{transform:translateY(-1.875rem)}.sm\:focus\:-translate-x-full:focus{transform:translateX(-100%)}.sm\:focus\:-translate-y-full:focus{transform:translateY(-100%)}.sm\:focus\:-translate-x-1\/2:focus{transform:translateX(-50%)}.sm\:focus\:-translate-y-1\/2:focus{transform:translateY(-50%)}.sm\:focus\:translate-x-1\/2:focus{transform:translateX(50%)}.sm\:focus\:translate-y-1\/2:focus{transform:translateY(50%)}.sm\:focus\:translate-x-full:focus{transform:translateX(100%)}.sm\:focus\:translate-y-full:focus{transform:translateY(100%)}.sm\:scale-0{transform:scale(0)}.sm\:scale-x-0{transform:scaleX(0)}.sm\:scale-y-0{transform:scaleY(0)}.sm\:scale-50{transform:scale(.5)}.sm\:scale-x-50{transform:scaleX(.5)}.sm\:scale-y-50{transform:scaleY(.5)}.sm\:scale-75{transform:scale(.75)}.sm\:scale-x-75{transform:scaleX(.75)}.sm\:scale-y-75{transform:scaleY(.75)}.sm\:scale-90{transform:scale(.9)}.sm\:scale-x-90{transform:scaleX(.9)}.sm\:scale-y-90{transform:scaleY(.9)}.sm\:scale-95{transform:scale(.95)}.sm\:scale-x-95{transform:scaleX(.95)}.sm\:scale-y-95{transform:scaleY(.95)}.sm\:scale-100{transform:scale(1)}.sm\:scale-x-100{transform:scaleX(1)}.sm\:scale-y-100{transform:scaleY(1)}.sm\:scale-105{transform:scale(1.05)}.sm\:scale-x-105{transform:scaleX(1.05)}.sm\:scale-y-105{transform:scaleY(1.05)}.sm\:scale-110{transform:scale(1.1)}.sm\:scale-x-110{transform:scaleX(1.1)}.sm\:scale-y-110{transform:scaleY(1.1)}.sm\:scale-125{transform:scale(1.25)}.sm\:scale-x-125{transform:scaleX(1.25)}.sm\:scale-y-125{transform:scaleY(1.25)}.sm\:scale-150{transform:scale(1.5)}.sm\:scale-x-150{transform:scaleX(1.5)}.sm\:scale-y-150{transform:scaleY(1.5)}.sm\:hover\:scale-0:hover{transform:scale(0)}.sm\:hover\:scale-x-0:hover{transform:scaleX(0)}.sm\:hover\:scale-y-0:hover{transform:scaleY(0)}.sm\:hover\:scale-50:hover{transform:scale(.5)}.sm\:hover\:scale-x-50:hover{transform:scaleX(.5)}.sm\:hover\:scale-y-50:hover{transform:scaleY(.5)}.sm\:hover\:scale-75:hover{transform:scale(.75)}.sm\:hover\:scale-x-75:hover{transform:scaleX(.75)}.sm\:hover\:scale-y-75:hover{transform:scaleY(.75)}.sm\:hover\:scale-90:hover{transform:scale(.9)}.sm\:hover\:scale-x-90:hover{transform:scaleX(.9)}.sm\:hover\:scale-y-90:hover{transform:scaleY(.9)}.sm\:hover\:scale-95:hover{transform:scale(.95)}.sm\:hover\:scale-x-95:hover{transform:scaleX(.95)}.sm\:hover\:scale-y-95:hover{transform:scaleY(.95)}.sm\:hover\:scale-100:hover{transform:scale(1)}.sm\:hover\:scale-x-100:hover{transform:scaleX(1)}.sm\:hover\:scale-y-100:hover{transform:scaleY(1)}.sm\:hover\:scale-105:hover{transform:scale(1.05)}.sm\:hover\:scale-x-105:hover{transform:scaleX(1.05)}.sm\:hover\:scale-y-105:hover{transform:scaleY(1.05)}.sm\:hover\:scale-110:hover{transform:scale(1.1)}.sm\:hover\:scale-x-110:hover{transform:scaleX(1.1)}.sm\:hover\:scale-y-110:hover{transform:scaleY(1.1)}.sm\:hover\:scale-125:hover{transform:scale(1.25)}.sm\:hover\:scale-x-125:hover{transform:scaleX(1.25)}.sm\:hover\:scale-y-125:hover{transform:scaleY(1.25)}.sm\:hover\:scale-150:hover{transform:scale(1.5)}.sm\:hover\:scale-x-150:hover{transform:scaleX(1.5)}.sm\:hover\:scale-y-150:hover{transform:scaleY(1.5)}.sm\:focus\:scale-0:focus{transform:scale(0)}.sm\:focus\:scale-x-0:focus{transform:scaleX(0)}.sm\:focus\:scale-y-0:focus{transform:scaleY(0)}.sm\:focus\:scale-50:focus{transform:scale(.5)}.sm\:focus\:scale-x-50:focus{transform:scaleX(.5)}.sm\:focus\:scale-y-50:focus{transform:scaleY(.5)}.sm\:focus\:scale-75:focus{transform:scale(.75)}.sm\:focus\:scale-x-75:focus{transform:scaleX(.75)}.sm\:focus\:scale-y-75:focus{transform:scaleY(.75)}.sm\:focus\:scale-90:focus{transform:scale(.9)}.sm\:focus\:scale-x-90:focus{transform:scaleX(.9)}.sm\:focus\:scale-y-90:focus{transform:scaleY(.9)}.sm\:focus\:scale-95:focus{transform:scale(.95)}.sm\:focus\:scale-x-95:focus{transform:scaleX(.95)}.sm\:focus\:scale-y-95:focus{transform:scaleY(.95)}.sm\:focus\:scale-100:focus{transform:scale(1)}.sm\:focus\:scale-x-100:focus{transform:scaleX(1)}.sm\:focus\:scale-y-100:focus{transform:scaleY(1)}.sm\:focus\:scale-105:focus{transform:scale(1.05)}.sm\:focus\:scale-x-105:focus{transform:scaleX(1.05)}.sm\:focus\:scale-y-105:focus{transform:scaleY(1.05)}.sm\:focus\:scale-110:focus{transform:scale(1.1)}.sm\:focus\:scale-x-110:focus{transform:scaleX(1.1)}.sm\:focus\:scale-y-110:focus{transform:scaleY(1.1)}.sm\:focus\:scale-125:focus{transform:scale(1.25)}.sm\:focus\:scale-x-125:focus{transform:scaleX(1.25)}.sm\:focus\:scale-y-125:focus{transform:scaleY(1.25)}.sm\:focus\:scale-150:focus{transform:scale(1.5)}.sm\:focus\:scale-x-150:focus{transform:scaleX(1.5)}.sm\:focus\:scale-y-150:focus{transform:scaleY(1.5)}.sm\:rotate-0{transform:rotate(0)}.sm\:rotate-90{transform:rotate(90deg)}.sm\:rotate-135{transform:rotate(135deg)}.sm\:rotate-180{transform:rotate(180deg)}.sm\:-rotate-180{transform:rotate(-180deg)}.sm\:-rotate-135{transform:rotate(-135deg)}.sm\:-rotate-90{transform:rotate(-90deg)}.sm\:hover\:rotate-0:hover{transform:rotate(0)}.sm\:hover\:rotate-90:hover{transform:rotate(90deg)}.sm\:hover\:rotate-135:hover{transform:rotate(135deg)}.sm\:hover\:rotate-180:hover{transform:rotate(180deg)}.sm\:hover\:-rotate-180:hover{transform:rotate(-180deg)}.sm\:hover\:-rotate-135:hover{transform:rotate(-135deg)}.sm\:hover\:-rotate-90:hover{transform:rotate(-90deg)}.sm\:focus\:rotate-0:focus{transform:rotate(0)}.sm\:focus\:rotate-90:focus{transform:rotate(90deg)}.sm\:focus\:rotate-135:focus{transform:rotate(135deg)}.sm\:focus\:rotate-180:focus{transform:rotate(180deg)}.sm\:focus\:-rotate-180:focus{transform:rotate(-180deg)}.sm\:focus\:-rotate-135:focus{transform:rotate(-135deg)}.sm\:focus\:-rotate-90:focus{transform:rotate(-90deg)}.sm\:skew-x-0{transform:skewX(0)}.sm\:skew-y-0{transform:skewY(0)}.sm\:skew-x-1{transform:skewX(1deg)}.sm\:skew-y-1{transform:skewY(1deg)}.sm\:skew-x-2{transform:skewX(2deg)}.sm\:skew-y-2{transform:skewY(2deg)}.sm\:skew-x-3{transform:skewX(3deg)}.sm\:skew-y-3{transform:skewY(3deg)}.sm\:skew-x-6{transform:skewX(6deg)}.sm\:skew-y-6{transform:skewY(6deg)}.sm\:skew-x-12{transform:skewX(12deg)}.sm\:skew-y-12{transform:skewY(12deg)}.sm\:-skew-x-12{transform:skewX(-12deg)}.sm\:-skew-y-12{transform:skewY(-12deg)}.sm\:-skew-x-6{transform:skewX(-6deg)}.sm\:-skew-y-6{transform:skewY(-6deg)}.sm\:-skew-x-3{transform:skewX(-3deg)}.sm\:-skew-y-3{transform:skewY(-3deg)}.sm\:-skew-x-2{transform:skewX(-2deg)}.sm\:-skew-y-2{transform:skewY(-2deg)}.sm\:-skew-x-1{transform:skewX(-1deg)}.sm\:-skew-y-1{transform:skewY(-1deg)}.sm\:hover\:skew-x-0:hover{transform:skewX(0)}.sm\:hover\:skew-y-0:hover{transform:skewY(0)}.sm\:hover\:skew-x-1:hover{transform:skewX(1deg)}.sm\:hover\:skew-y-1:hover{transform:skewY(1deg)}.sm\:hover\:skew-x-2:hover{transform:skewX(2deg)}.sm\:hover\:skew-y-2:hover{transform:skewY(2deg)}.sm\:hover\:skew-x-3:hover{transform:skewX(3deg)}.sm\:hover\:skew-y-3:hover{transform:skewY(3deg)}.sm\:hover\:skew-x-6:hover{transform:skewX(6deg)}.sm\:hover\:skew-y-6:hover{transform:skewY(6deg)}.sm\:hover\:skew-x-12:hover{transform:skewX(12deg)}.sm\:hover\:skew-y-12:hover{transform:skewY(12deg)}.sm\:hover\:-skew-x-12:hover{transform:skewX(-12deg)}.sm\:hover\:-skew-y-12:hover{transform:skewY(-12deg)}.sm\:hover\:-skew-x-6:hover{transform:skewX(-6deg)}.sm\:hover\:-skew-y-6:hover{transform:skewY(-6deg)}.sm\:hover\:-skew-x-3:hover{transform:skewX(-3deg)}.sm\:hover\:-skew-y-3:hover{transform:skewY(-3deg)}.sm\:hover\:-skew-x-2:hover{transform:skewX(-2deg)}.sm\:hover\:-skew-y-2:hover{transform:skewY(-2deg)}.sm\:hover\:-skew-x-1:hover{transform:skewX(-1deg)}.sm\:hover\:-skew-y-1:hover{transform:skewY(-1deg)}.sm\:focus\:skew-x-0:focus{transform:skewX(0)}.sm\:focus\:skew-y-0:focus{transform:skewY(0)}.sm\:focus\:skew-x-1:focus{transform:skewX(1deg)}.sm\:focus\:skew-y-1:focus{transform:skewY(1deg)}.sm\:focus\:skew-x-2:focus{transform:skewX(2deg)}.sm\:focus\:skew-y-2:focus{transform:skewY(2deg)}.sm\:focus\:skew-x-3:focus{transform:skewX(3deg)}.sm\:focus\:skew-y-3:focus{transform:skewY(3deg)}.sm\:focus\:skew-x-6:focus{transform:skewX(6deg)}.sm\:focus\:skew-y-6:focus{transform:skewY(6deg)}.sm\:focus\:skew-x-12:focus{transform:skewX(12deg)}.sm\:focus\:skew-y-12:focus{transform:skewY(12deg)}.sm\:focus\:-skew-x-12:focus{transform:skewX(-12deg)}.sm\:focus\:-skew-y-12:focus{transform:skewY(-12deg)}.sm\:focus\:-skew-x-6:focus{transform:skewX(-6deg)}.sm\:focus\:-skew-y-6:focus{transform:skewY(-6deg)}.sm\:focus\:-skew-x-3:focus{transform:skewX(-3deg)}.sm\:focus\:-skew-y-3:focus{transform:skewY(-3deg)}.sm\:focus\:-skew-x-2:focus{transform:skewX(-2deg)}.sm\:focus\:-skew-y-2:focus{transform:skewY(-2deg)}.sm\:focus\:-skew-x-1:focus{transform:skewX(-1deg)}.sm\:focus\:-skew-y-1:focus{transform:skewY(-1deg)}.sm\:transform-border{transform-box:border-box}.sm\:transform-fill{transform-box:fill-box}.sm\:transform-view{transform-box:view-box}}@media (min-width:50.01em){.md\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px*(1 - var(--space-y-reverse)));margin-bottom:calc(0px*var(--space-y-reverse))}.md\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px*var(--space-x-reverse));margin-left:calc(0px*(1 - var(--space-x-reverse)))}.md\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.25rem*var(--space-y-reverse))}.md\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.25rem*var(--space-x-reverse));margin-left:calc(0.25rem*(1 - var(--space-x-reverse)))}.md\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.5rem*var(--space-y-reverse))}.md\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.5rem*var(--space-x-reverse));margin-left:calc(0.5rem*(1 - var(--space-x-reverse)))}.md\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.75rem*var(--space-y-reverse))}.md\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.75rem*var(--space-x-reverse));margin-left:calc(0.75rem*(1 - var(--space-x-reverse)))}.md\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1rem*var(--space-y-reverse))}.md\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem*var(--space-x-reverse));margin-left:calc(1rem*(1 - var(--space-x-reverse)))}.md\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem*var(--space-y-reverse))}.md\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem*var(--space-x-reverse));margin-left:calc(1.25rem*(1 - var(--space-x-reverse)))}.md\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem*var(--space-y-reverse))}.md\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem*var(--space-x-reverse));margin-left:calc(1.5rem*(1 - var(--space-x-reverse)))}.md\:space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.75rem*var(--space-y-reverse))}.md\:space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.75rem*var(--space-x-reverse));margin-left:calc(1.75rem*(1 - var(--space-x-reverse)))}.md\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2rem*var(--space-y-reverse))}.md\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem*var(--space-x-reverse));margin-left:calc(2rem*(1 - var(--space-x-reverse)))}.md\:space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.25rem*var(--space-y-reverse))}.md\:space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.25rem*var(--space-x-reverse));margin-left:calc(2.25rem*(1 - var(--space-x-reverse)))}.md\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem*var(--space-y-reverse))}.md\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem*var(--space-x-reverse));margin-left:calc(2.5rem*(1 - var(--space-x-reverse)))}.md\:space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.75rem*var(--space-y-reverse))}.md\:space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.75rem*var(--space-x-reverse));margin-left:calc(2.75rem*(1 - var(--space-x-reverse)))}.md\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3rem*var(--space-y-reverse))}.md\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem*var(--space-x-reverse));margin-left:calc(3rem*(1 - var(--space-x-reverse)))}.md\:space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3.75rem*var(--space-y-reverse))}.md\:space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3.75rem*var(--space-x-reverse));margin-left:calc(3.75rem*(1 - var(--space-x-reverse)))}.md\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(4rem*var(--space-y-reverse))}.md\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem*var(--space-x-reverse));margin-left:calc(4rem*(1 - var(--space-x-reverse)))}.md\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5rem*var(--space-y-reverse))}.md\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem*var(--space-x-reverse));margin-left:calc(5rem*(1 - var(--space-x-reverse)))}.md\:space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5.5rem*var(--space-y-reverse))}.md\:space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5.5rem*var(--space-x-reverse));margin-left:calc(5.5rem*(1 - var(--space-x-reverse)))}.md\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6rem*var(--space-y-reverse))}.md\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem*var(--space-x-reverse));margin-left:calc(6rem*(1 - var(--space-x-reverse)))}.md\:space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.25rem*var(--space-y-reverse))}.md\:space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.25rem*var(--space-x-reverse));margin-left:calc(6.25rem*(1 - var(--space-x-reverse)))}.md\:space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.5rem*var(--space-y-reverse))}.md\:space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.5rem*var(--space-x-reverse));margin-left:calc(6.5rem*(1 - var(--space-x-reverse)))}.md\:space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8rem*var(--space-y-reverse))}.md\:space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem*var(--space-x-reverse));margin-left:calc(8rem*(1 - var(--space-x-reverse)))}.md\:space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8.5rem*var(--space-y-reverse))}.md\:space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8.5rem*var(--space-x-reverse));margin-left:calc(8.5rem*(1 - var(--space-x-reverse)))}.md\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(9rem*var(--space-y-reverse))}.md\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(9rem*var(--space-x-reverse));margin-left:calc(9rem*(1 - var(--space-x-reverse)))}.md\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(10rem*var(--space-y-reverse))}.md\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem*var(--space-x-reverse));margin-left:calc(10rem*(1 - var(--space-x-reverse)))}.md\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(12rem*var(--space-y-reverse))}.md\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem*var(--space-x-reverse));margin-left:calc(12rem*(1 - var(--space-x-reverse)))}.md\:space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(13rem*var(--space-y-reverse))}.md\:space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(13rem*var(--space-x-reverse));margin-left:calc(13rem*(1 - var(--space-x-reverse)))}.md\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(14rem*var(--space-y-reverse))}.md\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem*var(--space-x-reverse));margin-left:calc(14rem*(1 - var(--space-x-reverse)))}.md\:space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(15rem*var(--space-y-reverse))}.md\:space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(15rem*var(--space-x-reverse));margin-left:calc(15rem*(1 - var(--space-x-reverse)))}.md\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(16rem*var(--space-y-reverse))}.md\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem*var(--space-x-reverse));margin-left:calc(16rem*(1 - var(--space-x-reverse)))}.md\:space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(17rem*var(--space-y-reverse))}.md\:space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(17rem*var(--space-x-reverse));margin-left:calc(17rem*(1 - var(--space-x-reverse)))}.md\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px*(1 - var(--space-y-reverse)));margin-bottom:calc(1px*var(--space-y-reverse))}.md\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px*var(--space-x-reverse));margin-left:calc(1px*(1 - var(--space-x-reverse)))}.md\:space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.125rem*var(--space-y-reverse))}.md\:space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.125rem*var(--space-x-reverse));margin-left:calc(0.125rem*(1 - var(--space-x-reverse)))}.md\:space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.375rem*var(--space-y-reverse))}.md\:space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.375rem*var(--space-x-reverse));margin-left:calc(0.375rem*(1 - var(--space-x-reverse)))}.md\:space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.625rem*var(--space-y-reverse))}.md\:space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.625rem*var(--space-x-reverse));margin-left:calc(0.625rem*(1 - var(--space-x-reverse)))}.md\:space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.875rem*var(--space-y-reverse))}.md\:space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.875rem*var(--space-x-reverse));margin-left:calc(1.875rem*(1 - var(--space-x-reverse)))}.md\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.25rem*var(--space-y-reverse))}.md\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.25rem*var(--space-x-reverse));margin-left:calc(-0.25rem*(1 - var(--space-x-reverse)))}.md\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.5rem*var(--space-y-reverse))}.md\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.5rem*var(--space-x-reverse));margin-left:calc(-0.5rem*(1 - var(--space-x-reverse)))}.md\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.75rem*var(--space-y-reverse))}.md\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.75rem*var(--space-x-reverse));margin-left:calc(-0.75rem*(1 - var(--space-x-reverse)))}.md\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem*var(--space-y-reverse))}.md\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem*var(--space-x-reverse));margin-left:calc(-1rem*(1 - var(--space-x-reverse)))}.md\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem*var(--space-y-reverse))}.md\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem*var(--space-x-reverse));margin-left:calc(-1.25rem*(1 - var(--space-x-reverse)))}.md\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem*var(--space-y-reverse))}.md\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem*var(--space-x-reverse));margin-left:calc(-1.5rem*(1 - var(--space-x-reverse)))}.md\:-space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.75rem*var(--space-y-reverse))}.md\:-space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.75rem*var(--space-x-reverse));margin-left:calc(-1.75rem*(1 - var(--space-x-reverse)))}.md\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem*var(--space-y-reverse))}.md\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem*var(--space-x-reverse));margin-left:calc(-2rem*(1 - var(--space-x-reverse)))}.md\:-space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.25rem*var(--space-y-reverse))}.md\:-space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.25rem*var(--space-x-reverse));margin-left:calc(-2.25rem*(1 - var(--space-x-reverse)))}.md\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem*var(--space-y-reverse))}.md\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem*var(--space-x-reverse));margin-left:calc(-2.5rem*(1 - var(--space-x-reverse)))}.md\:-space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.75rem*var(--space-y-reverse))}.md\:-space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.75rem*var(--space-x-reverse));margin-left:calc(-2.75rem*(1 - var(--space-x-reverse)))}.md\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem*var(--space-y-reverse))}.md\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem*var(--space-x-reverse));margin-left:calc(-3rem*(1 - var(--space-x-reverse)))}.md\:-space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3.75rem*var(--space-y-reverse))}.md\:-space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3.75rem*var(--space-x-reverse));margin-left:calc(-3.75rem*(1 - var(--space-x-reverse)))}.md\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem*var(--space-y-reverse))}.md\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem*var(--space-x-reverse));margin-left:calc(-4rem*(1 - var(--space-x-reverse)))}.md\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem*var(--space-y-reverse))}.md\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem*var(--space-x-reverse));margin-left:calc(-5rem*(1 - var(--space-x-reverse)))}.md\:-space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5.5rem*var(--space-y-reverse))}.md\:-space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5.5rem*var(--space-x-reverse));margin-left:calc(-5.5rem*(1 - var(--space-x-reverse)))}.md\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem*var(--space-y-reverse))}.md\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem*var(--space-x-reverse));margin-left:calc(-6rem*(1 - var(--space-x-reverse)))}.md\:-space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.25rem*var(--space-y-reverse))}.md\:-space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.25rem*var(--space-x-reverse));margin-left:calc(-6.25rem*(1 - var(--space-x-reverse)))}.md\:-space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.5rem*var(--space-y-reverse))}.md\:-space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.5rem*var(--space-x-reverse));margin-left:calc(-6.5rem*(1 - var(--space-x-reverse)))}.md\:-space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem*var(--space-y-reverse))}.md\:-space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem*var(--space-x-reverse));margin-left:calc(-8rem*(1 - var(--space-x-reverse)))}.md\:-space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8.5rem*var(--space-y-reverse))}.md\:-space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8.5rem*var(--space-x-reverse));margin-left:calc(-8.5rem*(1 - var(--space-x-reverse)))}.md\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-9rem*var(--space-y-reverse))}.md\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-9rem*var(--space-x-reverse));margin-left:calc(-9rem*(1 - var(--space-x-reverse)))}.md\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem*var(--space-y-reverse))}.md\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem*var(--space-x-reverse));margin-left:calc(-10rem*(1 - var(--space-x-reverse)))}.md\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem*var(--space-y-reverse))}.md\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem*var(--space-x-reverse));margin-left:calc(-12rem*(1 - var(--space-x-reverse)))}.md\:-space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-13rem*var(--space-y-reverse))}.md\:-space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-13rem*var(--space-x-reverse));margin-left:calc(-13rem*(1 - var(--space-x-reverse)))}.md\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem*var(--space-y-reverse))}.md\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem*var(--space-x-reverse));margin-left:calc(-14rem*(1 - var(--space-x-reverse)))}.md\:-space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-15rem*var(--space-y-reverse))}.md\:-space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-15rem*var(--space-x-reverse));margin-left:calc(-15rem*(1 - var(--space-x-reverse)))}.md\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem*var(--space-y-reverse))}.md\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem*var(--space-x-reverse));margin-left:calc(-16rem*(1 - var(--space-x-reverse)))}.md\:-space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-17rem*var(--space-y-reverse))}.md\:-space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-17rem*var(--space-x-reverse));margin-left:calc(-17rem*(1 - var(--space-x-reverse)))}.md\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px*(1 - var(--space-y-reverse)));margin-bottom:calc(-1px*var(--space-y-reverse))}.md\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px*var(--space-x-reverse));margin-left:calc(-1px*(1 - var(--space-x-reverse)))}.md\:-space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.125rem*var(--space-y-reverse))}.md\:-space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.125rem*var(--space-x-reverse));margin-left:calc(-0.125rem*(1 - var(--space-x-reverse)))}.md\:-space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.375rem*var(--space-y-reverse))}.md\:-space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.375rem*var(--space-x-reverse));margin-left:calc(-0.375rem*(1 - var(--space-x-reverse)))}.md\:-space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.625rem*var(--space-y-reverse))}.md\:-space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.625rem*var(--space-x-reverse));margin-left:calc(-0.625rem*(1 - var(--space-x-reverse)))}.md\:-space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.875rem*var(--space-y-reverse))}.md\:-space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.875rem*var(--space-x-reverse));margin-left:calc(-1.875rem*(1 - var(--space-x-reverse)))}.md\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.md\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.md\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px*var(--divide-y-reverse))}.md\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px*var(--divide-x-reverse));border-left-width:calc(0px*(1 - var(--divide-x-reverse)))}.md\:divide-y-1>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.md\:divide-x-1>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.md\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px*var(--divide-y-reverse))}.md\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px*var(--divide-x-reverse));border-left-width:calc(2px*(1 - var(--divide-x-reverse)))}.md\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px*var(--divide-y-reverse))}.md\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px*var(--divide-x-reverse));border-left-width:calc(4px*(1 - var(--divide-x-reverse)))}.md\:divide-y-5>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(5px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(5px*var(--divide-y-reverse))}.md\:divide-x-5>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(5px*var(--divide-x-reverse));border-left-width:calc(5px*(1 - var(--divide-x-reverse)))}.md\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px*var(--divide-y-reverse))}.md\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px*var(--divide-x-reverse));border-left-width:calc(8px*(1 - var(--divide-x-reverse)))}.md\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.md\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.md\:divide-y-DEFAULT>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.md\:divide-x-DEFAULT>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.md\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.md\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.md\:divide-transparent>:not(template)~:not(template){border-color:transparent}.md\:divide-current>:not(template)~:not(template){border-color:currentColor}.md\:divide-black>:not(template)~:not(template){border-color:#000}.md\:divide-white>:not(template)~:not(template){border-color:#fff}.md\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.md\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.md\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.md\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.md\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.md\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.md\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.md\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.md\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.md\:divide-gray-DEFAULT>:not(template)~:not(template),.md\:divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.md\:divide-red>:not(template)~:not(template){border-color:#d64343}.md\:divide-orange>:not(template)~:not(template){border-color:#eb6437}.md\:divide-yellow>:not(template)~:not(template){border-color:#f8da30}.md\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.md\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.md\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.md\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.md\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.md\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.md\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.md\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.md\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.md\:divide-green-DEFAULT>:not(template)~:not(template),.md\:divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.md\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.md\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.md\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.md\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.md\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.md\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.md\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.md\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.md\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.md\:divide-teal-DEFAULT>:not(template)~:not(template),.md\:divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.md\:divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.md\:divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.md\:divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.md\:divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.md\:divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.md\:divide-blue-500>:not(template)~:not(template){border-color:#058aff}.md\:divide-blue-600>:not(template)~:not(template){border-color:#0075db}.md\:divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.md\:divide-blue-800>:not(template)~:not(template){border-color:#00498a}.md\:divide-blue-900>:not(template)~:not(template){border-color:#003461}.md\:divide-blue-DEFAULT>:not(template)~:not(template),.md\:divide-blue>:not(template)~:not(template){border-color:#0075db}.md\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.md\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.md\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.md\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.md\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.md\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.md\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.md\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.md\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.md\:divide-indigo-DEFAULT>:not(template)~:not(template),.md\:divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.md\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.md\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.md\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.md\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.md\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.md\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.md\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.md\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.md\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.md\:divide-purple-DEFAULT>:not(template)~:not(template),.md\:divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.md\:divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.md\:divide-inherit>:not(template)~:not(template){border-color:inherit}.md\:divide-amber>:not(template)~:not(template){border-color:#d78737}.md\:divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.md\:divide-ardoise>:not(template)~:not(template){border-color:#596a82}.md\:divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.md\:divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.md\:divide-lightBlue-active>:not(template)~:not(template),.md\:divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.md\:divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.md\:divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.md\:divide-gold>:not(template)~:not(template){border-color:#bd9e56}.md\:divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.md\:divide-grenadine>:not(template)~:not(template){border-color:#c35078}.md\:divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.md\:divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.md\:divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.md\:divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.md\:divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.md\:divide-mahogany>:not(template)~:not(template){border-color:#57142e}.md\:divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.md\:divide-ocher>:not(template)~:not(template){border-color:#c29614}.md\:divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.md\:divide-pine>:not(template)~:not(template){border-color:#144d52}.md\:divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.md\:divide-platinum-active>:not(template)~:not(template),.md\:divide-platinum>:not(template)~:not(template){border-color:#000}.md\:divide-prune>:not(template)~:not(template){border-color:#661456}.md\:divide-prune-active>:not(template)~:not(template){border-color:#72085d}.md\:divide-sand>:not(template)~:not(template){border-color:#d7be88}.md\:divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.md\:divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.md\:divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.md\:divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.md\:divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.md\:divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.md\:divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.md\:divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.md\:divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.md\:divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.md\:divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.md\:divide-waterGreen>:not(template)~:not(template){border-color:#007571}.md\:divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.md\:divide-deepRed>:not(template)~:not(template){border-color:#c32222}.md\:divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.md\:divide-emerald>:not(template)~:not(template){border-color:#14a33a}.md\:divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.md\:divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.md\:divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.md\:divide-red-active>:not(template)~:not(template){border-color:#e13737}.md\:divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.md\:divide-white-button-active>:not(template)~:not(template),.md\:divide-white-button>:not(template)~:not(template){border-color:#fff}.md\:divide-code>:not(template)~:not(template){border-color:#3f3d57}.md\:divide-code-active>:not(template)~:not(template){border-color:#37354b}.md\:divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.md\:divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.md\:divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.md\:divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.md\:divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.md\:divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.md\:divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.md\:divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.md\:divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.md\:divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-transparent>:not(template)~:not(template){border-color:transparent}.group:hover .md\:group-hover\:divide-current>:not(template)~:not(template){border-color:currentColor}.group:hover .md\:group-hover\:divide-black>:not(template)~:not(template){border-color:#000}.group:hover .md\:group-hover\:divide-white>:not(template)~:not(template){border-color:#fff}.group:hover .md\:group-hover\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-DEFAULT>:not(template)~:not(template),.group:hover .md\:group-hover\:divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-red>:not(template)~:not(template){border-color:#d64343}.group:hover .md\:group-hover\:divide-orange>:not(template)~:not(template){border-color:#eb6437}.group:hover .md\:group-hover\:divide-yellow>:not(template)~:not(template){border-color:#f8da30}.group:hover .md\:group-hover\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-green-DEFAULT>:not(template)~:not(template),.group:hover .md\:group-hover\:divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-teal-DEFAULT>:not(template)~:not(template),.group:hover .md\:group-hover\:divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.group:hover .md\:group-hover\:divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.group:hover .md\:group-hover\:divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.group:hover .md\:group-hover\:divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.group:hover .md\:group-hover\:divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.group:hover .md\:group-hover\:divide-blue-500>:not(template)~:not(template){border-color:#058aff}.group:hover .md\:group-hover\:divide-blue-600>:not(template)~:not(template){border-color:#0075db}.group:hover .md\:group-hover\:divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.group:hover .md\:group-hover\:divide-blue-800>:not(template)~:not(template){border-color:#00498a}.group:hover .md\:group-hover\:divide-blue-900>:not(template)~:not(template){border-color:#003461}.group:hover .md\:group-hover\:divide-blue-DEFAULT>:not(template)~:not(template),.group:hover .md\:group-hover\:divide-blue>:not(template)~:not(template){border-color:#0075db}.group:hover .md\:group-hover\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-indigo-DEFAULT>:not(template)~:not(template),.group:hover .md\:group-hover\:divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-purple-DEFAULT>:not(template)~:not(template),.group:hover .md\:group-hover\:divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-inherit>:not(template)~:not(template){border-color:inherit}.group:hover .md\:group-hover\:divide-amber>:not(template)~:not(template){border-color:#d78737}.group:hover .md\:group-hover\:divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.group:hover .md\:group-hover\:divide-ardoise>:not(template)~:not(template){border-color:#596a82}.group:hover .md\:group-hover\:divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.group:hover .md\:group-hover\:divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .md\:group-hover\:divide-lightBlue-active>:not(template)~:not(template),.group:hover .md\:group-hover\:divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.group:hover .md\:group-hover\:divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.group:hover .md\:group-hover\:divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.group:hover .md\:group-hover\:divide-gold>:not(template)~:not(template){border-color:#bd9e56}.group:hover .md\:group-hover\:divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.group:hover .md\:group-hover\:divide-grenadine>:not(template)~:not(template){border-color:#c35078}.group:hover .md\:group-hover\:divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.group:hover .md\:group-hover\:divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.group:hover .md\:group-hover\:divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.group:hover .md\:group-hover\:divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.group:hover .md\:group-hover\:divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.group:hover .md\:group-hover\:divide-mahogany>:not(template)~:not(template){border-color:#57142e}.group:hover .md\:group-hover\:divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.group:hover .md\:group-hover\:divide-ocher>:not(template)~:not(template){border-color:#c29614}.group:hover .md\:group-hover\:divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.group:hover .md\:group-hover\:divide-pine>:not(template)~:not(template){border-color:#144d52}.group:hover .md\:group-hover\:divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.group:hover .md\:group-hover\:divide-platinum-active>:not(template)~:not(template),.group:hover .md\:group-hover\:divide-platinum>:not(template)~:not(template){border-color:#000}.group:hover .md\:group-hover\:divide-prune>:not(template)~:not(template){border-color:#661456}.group:hover .md\:group-hover\:divide-prune-active>:not(template)~:not(template){border-color:#72085d}.group:hover .md\:group-hover\:divide-sand>:not(template)~:not(template){border-color:#d7be88}.group:hover .md\:group-hover\:divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.group:hover .md\:group-hover\:divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.group:hover .md\:group-hover\:divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.group:hover .md\:group-hover\:divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.group:hover .md\:group-hover\:divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.group:hover .md\:group-hover\:divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.group:hover .md\:group-hover\:divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.group:hover .md\:group-hover\:divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.group:hover .md\:group-hover\:divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.group:hover .md\:group-hover\:divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.group:hover .md\:group-hover\:divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.group:hover .md\:group-hover\:divide-waterGreen>:not(template)~:not(template){border-color:#007571}.group:hover .md\:group-hover\:divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.group:hover .md\:group-hover\:divide-deepRed>:not(template)~:not(template){border-color:#c32222}.group:hover .md\:group-hover\:divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.group:hover .md\:group-hover\:divide-emerald>:not(template)~:not(template){border-color:#14a33a}.group:hover .md\:group-hover\:divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.group:hover .md\:group-hover\:divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.group:hover .md\:group-hover\:divide-red-active>:not(template)~:not(template){border-color:#e13737}.group:hover .md\:group-hover\:divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .md\:group-hover\:divide-white-button-active>:not(template)~:not(template),.group:hover .md\:group-hover\:divide-white-button>:not(template)~:not(template){border-color:#fff}.group:hover .md\:group-hover\:divide-code>:not(template)~:not(template){border-color:#3f3d57}.group:hover .md\:group-hover\:divide-code-active>:not(template)~:not(template){border-color:#37354b}.group:hover .md\:group-hover\:divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.group:hover .md\:group-hover\:divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .md\:group-hover\:divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.group:hover .md\:group-hover\:divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.group:hover .md\:group-hover\:divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.md\:divide-solid>:not(template)~:not(template){border-style:solid}.md\:divide-dashed>:not(template)~:not(template){border-style:dashed}.md\:divide-dotted>:not(template)~:not(template){border-style:dotted}.md\:divide-double>:not(template)~:not(template){border-style:double}.md\:divide-none>:not(template)~:not(template){border-style:none}.md\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.md\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.md\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.md\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.md\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.group:hover .md\:group-hover\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.group:hover .md\:group-hover\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.group:hover .md\:group-hover\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.group:hover .md\:group-hover\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.group:hover .md\:group-hover\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.md\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.md\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.md\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.md\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.md\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.md\:bg-fixed{background-attachment:fixed}.md\:bg-local{background-attachment:local}.md\:bg-scroll{background-attachment:scroll}.md\:bg-clip-border{background-clip:border-box}.md\:bg-clip-padding{background-clip:padding-box}.md\:bg-clip-content{background-clip:content-box}.md\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.md\:bg-transparent{background-color:transparent}.md\:bg-current{background-color:currentColor}.md\:bg-black{background-color:#000}.md\:bg-white{background-color:#fff}.md\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.md\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.md\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.md\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.md\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.md\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.md\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.md\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.md\:bg-gray,.md\:bg-gray-DEFAULT{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:bg-red{background-color:#d64343}.md\:bg-orange{background-color:#eb6437}.md\:bg-yellow{background-color:#f8da30}.md\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.md\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.md\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.md\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.md\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.md\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.md\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.md\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.md\:bg-green,.md\:bg-green-DEFAULT{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.md\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.md\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.md\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.md\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.md\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.md\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.md\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.md\:bg-teal,.md\:bg-teal-DEFAULT{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:bg-blue-50{background-color:#d1eaff}.md\:bg-blue-100{background-color:#a8d7ff}.md\:bg-blue-200{background-color:#80c4ff}.md\:bg-blue-300{background-color:#57b0ff}.md\:bg-blue-400{background-color:#2e9dff}.md\:bg-blue-500{background-color:#058aff}.md\:bg-blue-600{background-color:#0075db}.md\:bg-blue-700{background-color:#005fb3}.md\:bg-blue-800{background-color:#00498a}.md\:bg-blue-900{background-color:#003461}.md\:bg-blue,.md\:bg-blue-DEFAULT{background-color:#0075db}.md\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.md\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.md\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.md\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.md\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.md\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.md\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.md\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.md\:bg-indigo,.md\:bg-indigo-DEFAULT{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.md\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.md\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.md\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.md\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.md\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.md\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.md\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.md\:bg-purple,.md\:bg-purple-DEFAULT{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:bg-pink{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.md\:bg-inherit{background-color:inherit}.md\:bg-amber{background-color:#d78737}.md\:bg-amber-active{background-color:#e3872b}.md\:bg-ardoise{background-color:#596a82}.md\:bg-ardoise-active{background-color:#476794}.md\:bg-blue-active{background-color:#14a5c2}.md\:bg-lightBlue,.md\:bg-lightBlue-active{background-color:rgba(0,85,138,.1)}.md\:bg-deepBlue{background-color:#0e346c}.md\:bg-deepBlue-active{background-color:#0a3f8f}.md\:bg-gold{background-color:#bd9e56}.md\:bg-gold-active{background-color:#c9a34a}.md\:bg-grenadine{background-color:#c35078}.md\:bg-grenadine-active{background-color:#cf4475}.md\:bg-kiwi{background-color:#9a9f1e}.md\:bg-kiwi-active{background-color:#a3a815}.md\:bg-lilas{background-color:#7ea1d3}.md\:bg-lilas-active{background-color:#75a0db}.md\:bg-mahogany{background-color:#57142e}.md\:bg-mahogany-active{background-color:#610a2b}.md\:bg-ocher{background-color:#c29614}.md\:bg-ocher-active{background-color:#cd9c0a}.md\:bg-pine{background-color:#144d52}.md\:bg-pine-active{background-color:#0a555c}.md\:bg-platinum,.md\:bg-platinum-active{background-color:#000}.md\:bg-prune{background-color:#661456}.md\:bg-prune-active{background-color:#72085d}.md\:bg-sand{background-color:#d7be88}.md\:bg-sand-active{background-color:#dfc181}.md\:bg-sandPearl{background-color:#f0e5d6}.md\:bg-sandPearl-active{background-color:#f2e6d4}.md\:bg-silver{background-color:#b1b2b4}.md\:bg-silver-active{background-color:#a9afbc}.md\:bg-skyBlue{background-color:#98d2d7}.md\:bg-skyBlue-active{background-color:#91d8de}.md\:bg-southSea{background-color:#9dc9cd}.md\:bg-southSea-active{background-color:#95ced5}.md\:bg-turquoise{background-color:#14a5c2}.md\:bg-turquoise-active{background-color:#0aaccd}.md\:bg-waterGreen{background-color:#007571}.md\:bg-waterGreen-active{background-color:#00a8a3}.md\:bg-deepRed{background-color:#c32222}.md\:bg-deepRed-active{background-color:#cf1717}.md\:bg-emerald{background-color:#14a33a}.md\:bg-emerald-active{background-color:#0bad36}.md\:bg-greenLight{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.md\:bg-orange-active{background-color:#f65f2c}.md\:bg-red-active{background-color:#e13737}.md\:bg-white-active{background-color:#14a5c2}.md\:bg-white-button,.md\:bg-white-button-active{background-color:#fff}.md\:bg-code{background-color:#3f3d57}.md\:bg-code-active{background-color:#37354b}.md\:bg-gray-lighter{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.md\:bg-gray-lighter-active{background-color:#ebebeb}.md\:bg-gray-light{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.md\:bg-gray-medium{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.md\:bg-gray-darker{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.md\:bg-gray-darker-active{background-color:#14a5c2}.md\:bg-api-default{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.md\:bg-gray-xxl{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.md\:bg-line-even{background-color:#f3f6f7}.md\:hover\:bg-transparent:hover{background-color:transparent}.md\:hover\:bg-current:hover{background-color:currentColor}.md\:hover\:bg-black:hover{background-color:#000}.md\:hover\:bg-white:hover{background-color:#fff}.md\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.md\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.md\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.md\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.md\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.md\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.md\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.md\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.md\:hover\:bg-gray-DEFAULT:hover,.md\:hover\:bg-gray:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:hover\:bg-red:hover{background-color:#d64343}.md\:hover\:bg-orange:hover{background-color:#eb6437}.md\:hover\:bg-yellow:hover{background-color:#f8da30}.md\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.md\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.md\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.md\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.md\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.md\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.md\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.md\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.md\:hover\:bg-green-DEFAULT:hover,.md\:hover\:bg-green:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.md\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.md\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.md\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.md\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.md\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.md\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.md\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.md\:hover\:bg-teal-DEFAULT:hover,.md\:hover\:bg-teal:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:hover\:bg-blue-50:hover{background-color:#d1eaff}.md\:hover\:bg-blue-100:hover{background-color:#a8d7ff}.md\:hover\:bg-blue-200:hover{background-color:#80c4ff}.md\:hover\:bg-blue-300:hover{background-color:#57b0ff}.md\:hover\:bg-blue-400:hover{background-color:#2e9dff}.md\:hover\:bg-blue-500:hover{background-color:#058aff}.md\:hover\:bg-blue-600:hover{background-color:#0075db}.md\:hover\:bg-blue-700:hover{background-color:#005fb3}.md\:hover\:bg-blue-800:hover{background-color:#00498a}.md\:hover\:bg-blue-900:hover{background-color:#003461}.md\:hover\:bg-blue-DEFAULT:hover,.md\:hover\:bg-blue:hover{background-color:#0075db}.md\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.md\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.md\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.md\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.md\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.md\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.md\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.md\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.md\:hover\:bg-indigo-DEFAULT:hover,.md\:hover\:bg-indigo:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.md\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.md\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.md\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.md\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.md\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.md\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.md\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.md\:hover\:bg-purple-DEFAULT:hover,.md\:hover\:bg-purple:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:hover\:bg-pink:hover{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.md\:hover\:bg-inherit:hover{background-color:inherit}.md\:hover\:bg-amber:hover{background-color:#d78737}.md\:hover\:bg-amber-active:hover{background-color:#e3872b}.md\:hover\:bg-ardoise:hover{background-color:#596a82}.md\:hover\:bg-ardoise-active:hover{background-color:#476794}.md\:hover\:bg-blue-active:hover{background-color:#14a5c2}.md\:hover\:bg-lightBlue-active:hover,.md\:hover\:bg-lightBlue:hover{background-color:rgba(0,85,138,.1)}.md\:hover\:bg-deepBlue:hover{background-color:#0e346c}.md\:hover\:bg-deepBlue-active:hover{background-color:#0a3f8f}.md\:hover\:bg-gold:hover{background-color:#bd9e56}.md\:hover\:bg-gold-active:hover{background-color:#c9a34a}.md\:hover\:bg-grenadine:hover{background-color:#c35078}.md\:hover\:bg-grenadine-active:hover{background-color:#cf4475}.md\:hover\:bg-kiwi:hover{background-color:#9a9f1e}.md\:hover\:bg-kiwi-active:hover{background-color:#a3a815}.md\:hover\:bg-lilas:hover{background-color:#7ea1d3}.md\:hover\:bg-lilas-active:hover{background-color:#75a0db}.md\:hover\:bg-mahogany:hover{background-color:#57142e}.md\:hover\:bg-mahogany-active:hover{background-color:#610a2b}.md\:hover\:bg-ocher:hover{background-color:#c29614}.md\:hover\:bg-ocher-active:hover{background-color:#cd9c0a}.md\:hover\:bg-pine:hover{background-color:#144d52}.md\:hover\:bg-pine-active:hover{background-color:#0a555c}.md\:hover\:bg-platinum-active:hover,.md\:hover\:bg-platinum:hover{background-color:#000}.md\:hover\:bg-prune:hover{background-color:#661456}.md\:hover\:bg-prune-active:hover{background-color:#72085d}.md\:hover\:bg-sand:hover{background-color:#d7be88}.md\:hover\:bg-sand-active:hover{background-color:#dfc181}.md\:hover\:bg-sandPearl:hover{background-color:#f0e5d6}.md\:hover\:bg-sandPearl-active:hover{background-color:#f2e6d4}.md\:hover\:bg-silver:hover{background-color:#b1b2b4}.md\:hover\:bg-silver-active:hover{background-color:#a9afbc}.md\:hover\:bg-skyBlue:hover{background-color:#98d2d7}.md\:hover\:bg-skyBlue-active:hover{background-color:#91d8de}.md\:hover\:bg-southSea:hover{background-color:#9dc9cd}.md\:hover\:bg-southSea-active:hover{background-color:#95ced5}.md\:hover\:bg-turquoise:hover{background-color:#14a5c2}.md\:hover\:bg-turquoise-active:hover{background-color:#0aaccd}.md\:hover\:bg-waterGreen:hover{background-color:#007571}.md\:hover\:bg-waterGreen-active:hover{background-color:#00a8a3}.md\:hover\:bg-deepRed:hover{background-color:#c32222}.md\:hover\:bg-deepRed-active:hover{background-color:#cf1717}.md\:hover\:bg-emerald:hover{background-color:#14a33a}.md\:hover\:bg-emerald-active:hover{background-color:#0bad36}.md\:hover\:bg-greenLight:hover{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.md\:hover\:bg-orange-active:hover{background-color:#f65f2c}.md\:hover\:bg-red-active:hover{background-color:#e13737}.md\:hover\:bg-white-active:hover{background-color:#14a5c2}.md\:hover\:bg-white-button-active:hover,.md\:hover\:bg-white-button:hover{background-color:#fff}.md\:hover\:bg-code:hover{background-color:#3f3d57}.md\:hover\:bg-code-active:hover{background-color:#37354b}.md\:hover\:bg-gray-lighter:hover{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.md\:hover\:bg-gray-lighter-active:hover{background-color:#ebebeb}.md\:hover\:bg-gray-light:hover{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.md\:hover\:bg-gray-medium:hover{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.md\:hover\:bg-gray-darker:hover{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.md\:hover\:bg-gray-darker-active:hover{background-color:#14a5c2}.md\:hover\:bg-api-default:hover{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.md\:hover\:bg-gray-xxl:hover{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.md\:hover\:bg-line-even:hover{background-color:#f3f6f7}.md\:focus\:bg-transparent:focus{background-color:transparent}.md\:focus\:bg-current:focus{background-color:currentColor}.md\:focus\:bg-black:focus{background-color:#000}.md\:focus\:bg-white:focus{background-color:#fff}.md\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.md\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.md\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.md\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.md\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.md\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.md\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.md\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.md\:focus\:bg-gray-DEFAULT:focus,.md\:focus\:bg-gray:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:focus\:bg-red:focus{background-color:#d64343}.md\:focus\:bg-orange:focus{background-color:#eb6437}.md\:focus\:bg-yellow:focus{background-color:#f8da30}.md\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.md\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.md\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.md\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.md\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.md\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.md\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.md\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.md\:focus\:bg-green-DEFAULT:focus,.md\:focus\:bg-green:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.md\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.md\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.md\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.md\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.md\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.md\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.md\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.md\:focus\:bg-teal-DEFAULT:focus,.md\:focus\:bg-teal:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:focus\:bg-blue-50:focus{background-color:#d1eaff}.md\:focus\:bg-blue-100:focus{background-color:#a8d7ff}.md\:focus\:bg-blue-200:focus{background-color:#80c4ff}.md\:focus\:bg-blue-300:focus{background-color:#57b0ff}.md\:focus\:bg-blue-400:focus{background-color:#2e9dff}.md\:focus\:bg-blue-500:focus{background-color:#058aff}.md\:focus\:bg-blue-600:focus{background-color:#0075db}.md\:focus\:bg-blue-700:focus{background-color:#005fb3}.md\:focus\:bg-blue-800:focus{background-color:#00498a}.md\:focus\:bg-blue-900:focus{background-color:#003461}.md\:focus\:bg-blue-DEFAULT:focus,.md\:focus\:bg-blue:focus{background-color:#0075db}.md\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.md\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.md\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.md\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.md\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.md\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.md\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.md\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.md\:focus\:bg-indigo-DEFAULT:focus,.md\:focus\:bg-indigo:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.md\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.md\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.md\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.md\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.md\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.md\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.md\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.md\:focus\:bg-purple-DEFAULT:focus,.md\:focus\:bg-purple:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:focus\:bg-pink:focus{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.md\:focus\:bg-inherit:focus{background-color:inherit}.md\:focus\:bg-amber:focus{background-color:#d78737}.md\:focus\:bg-amber-active:focus{background-color:#e3872b}.md\:focus\:bg-ardoise:focus{background-color:#596a82}.md\:focus\:bg-ardoise-active:focus{background-color:#476794}.md\:focus\:bg-blue-active:focus{background-color:#14a5c2}.md\:focus\:bg-lightBlue-active:focus,.md\:focus\:bg-lightBlue:focus{background-color:rgba(0,85,138,.1)}.md\:focus\:bg-deepBlue:focus{background-color:#0e346c}.md\:focus\:bg-deepBlue-active:focus{background-color:#0a3f8f}.md\:focus\:bg-gold:focus{background-color:#bd9e56}.md\:focus\:bg-gold-active:focus{background-color:#c9a34a}.md\:focus\:bg-grenadine:focus{background-color:#c35078}.md\:focus\:bg-grenadine-active:focus{background-color:#cf4475}.md\:focus\:bg-kiwi:focus{background-color:#9a9f1e}.md\:focus\:bg-kiwi-active:focus{background-color:#a3a815}.md\:focus\:bg-lilas:focus{background-color:#7ea1d3}.md\:focus\:bg-lilas-active:focus{background-color:#75a0db}.md\:focus\:bg-mahogany:focus{background-color:#57142e}.md\:focus\:bg-mahogany-active:focus{background-color:#610a2b}.md\:focus\:bg-ocher:focus{background-color:#c29614}.md\:focus\:bg-ocher-active:focus{background-color:#cd9c0a}.md\:focus\:bg-pine:focus{background-color:#144d52}.md\:focus\:bg-pine-active:focus{background-color:#0a555c}.md\:focus\:bg-platinum-active:focus,.md\:focus\:bg-platinum:focus{background-color:#000}.md\:focus\:bg-prune:focus{background-color:#661456}.md\:focus\:bg-prune-active:focus{background-color:#72085d}.md\:focus\:bg-sand:focus{background-color:#d7be88}.md\:focus\:bg-sand-active:focus{background-color:#dfc181}.md\:focus\:bg-sandPearl:focus{background-color:#f0e5d6}.md\:focus\:bg-sandPearl-active:focus{background-color:#f2e6d4}.md\:focus\:bg-silver:focus{background-color:#b1b2b4}.md\:focus\:bg-silver-active:focus{background-color:#a9afbc}.md\:focus\:bg-skyBlue:focus{background-color:#98d2d7}.md\:focus\:bg-skyBlue-active:focus{background-color:#91d8de}.md\:focus\:bg-southSea:focus{background-color:#9dc9cd}.md\:focus\:bg-southSea-active:focus{background-color:#95ced5}.md\:focus\:bg-turquoise:focus{background-color:#14a5c2}.md\:focus\:bg-turquoise-active:focus{background-color:#0aaccd}.md\:focus\:bg-waterGreen:focus{background-color:#007571}.md\:focus\:bg-waterGreen-active:focus{background-color:#00a8a3}.md\:focus\:bg-deepRed:focus{background-color:#c32222}.md\:focus\:bg-deepRed-active:focus{background-color:#cf1717}.md\:focus\:bg-emerald:focus{background-color:#14a33a}.md\:focus\:bg-emerald-active:focus{background-color:#0bad36}.md\:focus\:bg-greenLight:focus{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.md\:focus\:bg-orange-active:focus{background-color:#f65f2c}.md\:focus\:bg-red-active:focus{background-color:#e13737}.md\:focus\:bg-white-active:focus{background-color:#14a5c2}.md\:focus\:bg-white-button-active:focus,.md\:focus\:bg-white-button:focus{background-color:#fff}.md\:focus\:bg-code:focus{background-color:#3f3d57}.md\:focus\:bg-code-active:focus{background-color:#37354b}.md\:focus\:bg-gray-lighter:focus{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.md\:focus\:bg-gray-lighter-active:focus{background-color:#ebebeb}.md\:focus\:bg-gray-light:focus{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.md\:focus\:bg-gray-medium:focus{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.md\:focus\:bg-gray-darker:focus{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.md\:focus\:bg-gray-darker-active:focus{background-color:#14a5c2}.md\:focus\:bg-api-default:focus{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.md\:focus\:bg-gray-xxl:focus{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.md\:focus\:bg-line-even:focus{background-color:#f3f6f7}.md\:bg-none{background-image:none}.md\:bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))}.md\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.md\:bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))}.md\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.md\:bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))}.md\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.md\:bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))}.md\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.md\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.md\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.md\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.md\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.md\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.md\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.md\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.md\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.md\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.md\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.md\:from-gray,.md\:from-gray-DEFAULT{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:from-red{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.md\:from-orange{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.md\:from-yellow{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.md\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.md\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.md\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.md\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.md\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.md\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.md\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.md\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.md\:from-green,.md\:from-green-DEFAULT{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.md\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.md\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.md\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.md\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.md\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.md\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.md\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.md\:from-teal,.md\:from-teal-DEFAULT{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:from-blue-50{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.md\:from-blue-100{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.md\:from-blue-200{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.md\:from-blue-300{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.md\:from-blue-400{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.md\:from-blue-500{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.md\:from-blue-600{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:from-blue-700{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.md\:from-blue-800{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.md\:from-blue-900{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.md\:from-blue,.md\:from-blue-DEFAULT{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.md\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.md\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.md\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.md\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.md\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.md\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.md\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.md\:from-indigo,.md\:from-indigo-DEFAULT{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.md\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.md\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.md\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.md\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.md\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.md\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.md\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.md\:from-purple,.md\:from-purple-DEFAULT{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:from-pink{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.md\:from-inherit{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:from-amber{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.md\:from-amber-active{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.md\:from-ardoise{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.md\:from-ardoise-active{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.md\:from-blue-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:from-lightBlue,.md\:from-lightBlue-active{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.md\:from-deepBlue{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.md\:from-deepBlue-active{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.md\:from-gold{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.md\:from-gold-active{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.md\:from-grenadine{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.md\:from-grenadine-active{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.md\:from-kiwi{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.md\:from-kiwi-active{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.md\:from-lilas{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.md\:from-lilas-active{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.md\:from-mahogany{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.md\:from-mahogany-active{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.md\:from-ocher{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.md\:from-ocher-active{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.md\:from-pine{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.md\:from-pine-active{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.md\:from-platinum,.md\:from-platinum-active{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.md\:from-prune{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.md\:from-prune-active{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.md\:from-sand{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.md\:from-sand-active{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.md\:from-sandPearl{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.md\:from-sandPearl-active{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.md\:from-silver{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.md\:from-silver-active{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.md\:from-skyBlue{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.md\:from-skyBlue-active{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.md\:from-southSea{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.md\:from-southSea-active{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.md\:from-turquoise{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:from-turquoise-active{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.md\:from-waterGreen{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.md\:from-waterGreen-active{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.md\:from-deepRed{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.md\:from-deepRed-active{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.md\:from-emerald{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.md\:from-emerald-active{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.md\:from-greenLight{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.md\:from-orange-active{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.md\:from-red-active{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.md\:from-white-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:from-white-button,.md\:from-white-button-active{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:from-code{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.md\:from-code-active{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.md\:from-gray-lighter{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.md\:from-gray-lighter-active{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.md\:from-gray-light{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.md\:from-gray-medium{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.md\:from-gray-darker{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.md\:from-gray-darker-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:from-api-default{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.md\:from-gray-xxl{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.md\:from-line-even{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.md\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.md\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.md\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.md\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.md\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.md\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.md\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.md\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.md\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.md\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.md\:via-gray,.md\:via-gray-DEFAULT{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:via-red{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.md\:via-orange{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.md\:via-yellow{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.md\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.md\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.md\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.md\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.md\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.md\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.md\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.md\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.md\:via-green,.md\:via-green-DEFAULT{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.md\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.md\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.md\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.md\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.md\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.md\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.md\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.md\:via-teal,.md\:via-teal-DEFAULT{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:via-blue-50{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.md\:via-blue-100{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.md\:via-blue-200{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.md\:via-blue-300{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.md\:via-blue-400{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.md\:via-blue-500{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.md\:via-blue-600{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:via-blue-700{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.md\:via-blue-800{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.md\:via-blue-900{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.md\:via-blue,.md\:via-blue-DEFAULT{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.md\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.md\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.md\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.md\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.md\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.md\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.md\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.md\:via-indigo,.md\:via-indigo-DEFAULT{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.md\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.md\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.md\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.md\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.md\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.md\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.md\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.md\:via-purple,.md\:via-purple-DEFAULT{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:via-pink{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.md\:via-inherit{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:via-amber{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.md\:via-amber-active{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.md\:via-ardoise{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.md\:via-ardoise-active{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.md\:via-blue-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:via-lightBlue,.md\:via-lightBlue-active{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.md\:via-deepBlue{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.md\:via-deepBlue-active{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.md\:via-gold{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.md\:via-gold-active{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.md\:via-grenadine{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.md\:via-grenadine-active{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.md\:via-kiwi{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.md\:via-kiwi-active{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.md\:via-lilas{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.md\:via-lilas-active{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.md\:via-mahogany{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.md\:via-mahogany-active{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.md\:via-ocher{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.md\:via-ocher-active{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.md\:via-pine{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.md\:via-pine-active{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.md\:via-platinum,.md\:via-platinum-active{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.md\:via-prune{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.md\:via-prune-active{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.md\:via-sand{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.md\:via-sand-active{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.md\:via-sandPearl{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.md\:via-sandPearl-active{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.md\:via-silver{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.md\:via-silver-active{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.md\:via-skyBlue{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.md\:via-skyBlue-active{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.md\:via-southSea{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.md\:via-southSea-active{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.md\:via-turquoise{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:via-turquoise-active{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.md\:via-waterGreen{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.md\:via-waterGreen-active{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.md\:via-deepRed{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.md\:via-deepRed-active{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.md\:via-emerald{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.md\:via-emerald-active{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.md\:via-greenLight{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.md\:via-orange-active{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.md\:via-red-active{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.md\:via-white-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:via-white-button,.md\:via-white-button-active{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:via-code{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.md\:via-code-active{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.md\:via-gray-lighter{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.md\:via-gray-lighter-active{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.md\:via-gray-light{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.md\:via-gray-medium{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.md\:via-gray-darker{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.md\:via-gray-darker-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:via-api-default{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.md\:via-gray-xxl{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.md\:via-line-even{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.md\:to-transparent{--gradient-to-color:transparent}.md\:to-current{--gradient-to-color:currentColor}.md\:to-black{--gradient-to-color:#000}.md\:to-white{--gradient-to-color:#fff}.md\:to-gray-100{--gradient-to-color:#f7fafc}.md\:to-gray-200{--gradient-to-color:#edf2f7}.md\:to-gray-300{--gradient-to-color:#e2e8f0}.md\:to-gray-400{--gradient-to-color:#cbd5e0}.md\:to-gray-500{--gradient-to-color:#a0aec0}.md\:to-gray-600{--gradient-to-color:#718096}.md\:to-gray-700{--gradient-to-color:#4a5568}.md\:to-gray-800{--gradient-to-color:#2d3748}.md\:to-gray-900{--gradient-to-color:#1a202c}.md\:to-gray,.md\:to-gray-DEFAULT{--gradient-to-color:#718096}.md\:to-red{--gradient-to-color:#d64343}.md\:to-orange{--gradient-to-color:#eb6437}.md\:to-yellow{--gradient-to-color:#f8da30}.md\:to-green-100{--gradient-to-color:#f0fff4}.md\:to-green-200{--gradient-to-color:#c6f6d5}.md\:to-green-300{--gradient-to-color:#9ae6b4}.md\:to-green-400{--gradient-to-color:#68d391}.md\:to-green-500{--gradient-to-color:#48bb78}.md\:to-green-600{--gradient-to-color:#38a169}.md\:to-green-700{--gradient-to-color:#2f855a}.md\:to-green-800{--gradient-to-color:#276749}.md\:to-green-900{--gradient-to-color:#22543d}.md\:to-green,.md\:to-green-DEFAULT{--gradient-to-color:#38a169}.md\:to-teal-100{--gradient-to-color:#e6fffa}.md\:to-teal-200{--gradient-to-color:#b2f5ea}.md\:to-teal-300{--gradient-to-color:#81e6d9}.md\:to-teal-400{--gradient-to-color:#4fd1c5}.md\:to-teal-500{--gradient-to-color:#38b2ac}.md\:to-teal-600{--gradient-to-color:#319795}.md\:to-teal-700{--gradient-to-color:#2c7a7b}.md\:to-teal-800{--gradient-to-color:#285e61}.md\:to-teal-900{--gradient-to-color:#234e52}.md\:to-teal,.md\:to-teal-DEFAULT{--gradient-to-color:#319795}.md\:to-blue-50{--gradient-to-color:#d1eaff}.md\:to-blue-100{--gradient-to-color:#a8d7ff}.md\:to-blue-200{--gradient-to-color:#80c4ff}.md\:to-blue-300{--gradient-to-color:#57b0ff}.md\:to-blue-400{--gradient-to-color:#2e9dff}.md\:to-blue-500{--gradient-to-color:#058aff}.md\:to-blue-600{--gradient-to-color:#0075db}.md\:to-blue-700{--gradient-to-color:#005fb3}.md\:to-blue-800{--gradient-to-color:#00498a}.md\:to-blue-900{--gradient-to-color:#003461}.md\:to-blue,.md\:to-blue-DEFAULT{--gradient-to-color:#0075db}.md\:to-indigo-100{--gradient-to-color:#ebf4ff}.md\:to-indigo-200{--gradient-to-color:#c3dafe}.md\:to-indigo-300{--gradient-to-color:#a3bffa}.md\:to-indigo-400{--gradient-to-color:#7f9cf5}.md\:to-indigo-500{--gradient-to-color:#667eea}.md\:to-indigo-600{--gradient-to-color:#5a67d8}.md\:to-indigo-700{--gradient-to-color:#4c51bf}.md\:to-indigo-800{--gradient-to-color:#434190}.md\:to-indigo-900{--gradient-to-color:#3c366b}.md\:to-indigo,.md\:to-indigo-DEFAULT{--gradient-to-color:#5a67d8}.md\:to-purple-100{--gradient-to-color:#faf5ff}.md\:to-purple-200{--gradient-to-color:#e9d8fd}.md\:to-purple-300{--gradient-to-color:#d6bcfa}.md\:to-purple-400{--gradient-to-color:#b794f4}.md\:to-purple-500{--gradient-to-color:#9f7aea}.md\:to-purple-600{--gradient-to-color:#805ad5}.md\:to-purple-700{--gradient-to-color:#6b46c1}.md\:to-purple-800{--gradient-to-color:#553c9a}.md\:to-purple-900{--gradient-to-color:#44337a}.md\:to-purple,.md\:to-purple-DEFAULT{--gradient-to-color:#805ad5}.md\:to-pink{--gradient-to-color:#d81b60}.md\:to-inherit{--gradient-to-color:inherit}.md\:to-amber{--gradient-to-color:#d78737}.md\:to-amber-active{--gradient-to-color:#e3872b}.md\:to-ardoise{--gradient-to-color:#596a82}.md\:to-ardoise-active{--gradient-to-color:#476794}.md\:to-blue-active{--gradient-to-color:#14a5c2}.md\:to-lightBlue,.md\:to-lightBlue-active{--gradient-to-color:rgba(0,85,138,0.1)}.md\:to-deepBlue{--gradient-to-color:#0e346c}.md\:to-deepBlue-active{--gradient-to-color:#0a3f8f}.md\:to-gold{--gradient-to-color:#bd9e56}.md\:to-gold-active{--gradient-to-color:#c9a34a}.md\:to-grenadine{--gradient-to-color:#c35078}.md\:to-grenadine-active{--gradient-to-color:#cf4475}.md\:to-kiwi{--gradient-to-color:#9a9f1e}.md\:to-kiwi-active{--gradient-to-color:#a3a815}.md\:to-lilas{--gradient-to-color:#7ea1d3}.md\:to-lilas-active{--gradient-to-color:#75a0db}.md\:to-mahogany{--gradient-to-color:#57142e}.md\:to-mahogany-active{--gradient-to-color:#610a2b}.md\:to-ocher{--gradient-to-color:#c29614}.md\:to-ocher-active{--gradient-to-color:#cd9c0a}.md\:to-pine{--gradient-to-color:#144d52}.md\:to-pine-active{--gradient-to-color:#0a555c}.md\:to-platinum,.md\:to-platinum-active{--gradient-to-color:#000}.md\:to-prune{--gradient-to-color:#661456}.md\:to-prune-active{--gradient-to-color:#72085d}.md\:to-sand{--gradient-to-color:#d7be88}.md\:to-sand-active{--gradient-to-color:#dfc181}.md\:to-sandPearl{--gradient-to-color:#f0e5d6}.md\:to-sandPearl-active{--gradient-to-color:#f2e6d4}.md\:to-silver{--gradient-to-color:#b1b2b4}.md\:to-silver-active{--gradient-to-color:#a9afbc}.md\:to-skyBlue{--gradient-to-color:#98d2d7}.md\:to-skyBlue-active{--gradient-to-color:#91d8de}.md\:to-southSea{--gradient-to-color:#9dc9cd}.md\:to-southSea-active{--gradient-to-color:#95ced5}.md\:to-turquoise{--gradient-to-color:#14a5c2}.md\:to-turquoise-active{--gradient-to-color:#0aaccd}.md\:to-waterGreen{--gradient-to-color:#007571}.md\:to-waterGreen-active{--gradient-to-color:#00a8a3}.md\:to-deepRed{--gradient-to-color:#c32222}.md\:to-deepRed-active{--gradient-to-color:#cf1717}.md\:to-emerald{--gradient-to-color:#14a33a}.md\:to-emerald-active{--gradient-to-color:#0bad36}.md\:to-greenLight{--gradient-to-color:#7cb342}.md\:to-orange-active{--gradient-to-color:#f65f2c}.md\:to-red-active{--gradient-to-color:#e13737}.md\:to-white-active{--gradient-to-color:#14a5c2}.md\:to-white-button,.md\:to-white-button-active{--gradient-to-color:#fff}.md\:to-code{--gradient-to-color:#3f3d57}.md\:to-code-active{--gradient-to-color:#37354b}.md\:to-gray-lighter{--gradient-to-color:#f7f7f7}.md\:to-gray-lighter-active{--gradient-to-color:#ebebeb}.md\:to-gray-light{--gradient-to-color:#d4d1d1}.md\:to-gray-medium{--gradient-to-color:#a8a0a0}.md\:to-gray-darker{--gradient-to-color:#504747}.md\:to-gray-darker-active{--gradient-to-color:#14a5c2}.md\:to-api-default{--gradient-to-color:#507192}.md\:to-gray-xxl{--gradient-to-color:#2c3e50}.md\:to-line-even{--gradient-to-color:#f3f6f7}.md\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.md\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.md\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.md\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.md\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.md\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.md\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.md\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.md\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.md\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.md\:hover\:from-gray-DEFAULT:hover,.md\:hover\:from-gray:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:hover\:from-red:hover{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.md\:hover\:from-orange:hover{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.md\:hover\:from-yellow:hover{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.md\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.md\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.md\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.md\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.md\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.md\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.md\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.md\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.md\:hover\:from-green-DEFAULT:hover,.md\:hover\:from-green:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.md\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.md\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.md\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.md\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.md\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.md\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.md\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.md\:hover\:from-teal-DEFAULT:hover,.md\:hover\:from-teal:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:hover\:from-blue-50:hover{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.md\:hover\:from-blue-100:hover{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.md\:hover\:from-blue-200:hover{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.md\:hover\:from-blue-300:hover{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.md\:hover\:from-blue-400:hover{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.md\:hover\:from-blue-500:hover{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.md\:hover\:from-blue-600:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:hover\:from-blue-700:hover{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.md\:hover\:from-blue-800:hover{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.md\:hover\:from-blue-900:hover{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.md\:hover\:from-blue-DEFAULT:hover,.md\:hover\:from-blue:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.md\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.md\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.md\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.md\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.md\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.md\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.md\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.md\:hover\:from-indigo-DEFAULT:hover,.md\:hover\:from-indigo:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.md\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.md\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.md\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.md\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.md\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.md\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.md\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.md\:hover\:from-purple-DEFAULT:hover,.md\:hover\:from-purple:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:hover\:from-pink:hover{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.md\:hover\:from-inherit:hover{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:hover\:from-amber:hover{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.md\:hover\:from-amber-active:hover{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.md\:hover\:from-ardoise:hover{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.md\:hover\:from-ardoise-active:hover{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.md\:hover\:from-blue-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:hover\:from-lightBlue-active:hover,.md\:hover\:from-lightBlue:hover{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.md\:hover\:from-deepBlue:hover{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.md\:hover\:from-deepBlue-active:hover{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.md\:hover\:from-gold:hover{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.md\:hover\:from-gold-active:hover{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.md\:hover\:from-grenadine:hover{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.md\:hover\:from-grenadine-active:hover{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.md\:hover\:from-kiwi:hover{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.md\:hover\:from-kiwi-active:hover{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.md\:hover\:from-lilas:hover{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.md\:hover\:from-lilas-active:hover{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.md\:hover\:from-mahogany:hover{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.md\:hover\:from-mahogany-active:hover{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.md\:hover\:from-ocher:hover{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.md\:hover\:from-ocher-active:hover{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.md\:hover\:from-pine:hover{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.md\:hover\:from-pine-active:hover{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.md\:hover\:from-platinum-active:hover,.md\:hover\:from-platinum:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.md\:hover\:from-prune:hover{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.md\:hover\:from-prune-active:hover{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.md\:hover\:from-sand:hover{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.md\:hover\:from-sand-active:hover{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.md\:hover\:from-sandPearl:hover{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.md\:hover\:from-sandPearl-active:hover{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.md\:hover\:from-silver:hover{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.md\:hover\:from-silver-active:hover{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.md\:hover\:from-skyBlue:hover{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.md\:hover\:from-skyBlue-active:hover{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.md\:hover\:from-southSea:hover{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.md\:hover\:from-southSea-active:hover{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.md\:hover\:from-turquoise:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:hover\:from-turquoise-active:hover{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.md\:hover\:from-waterGreen:hover{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.md\:hover\:from-waterGreen-active:hover{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.md\:hover\:from-deepRed:hover{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.md\:hover\:from-deepRed-active:hover{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.md\:hover\:from-emerald:hover{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.md\:hover\:from-emerald-active:hover{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.md\:hover\:from-greenLight:hover{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.md\:hover\:from-orange-active:hover{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.md\:hover\:from-red-active:hover{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.md\:hover\:from-white-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:hover\:from-white-button-active:hover,.md\:hover\:from-white-button:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:hover\:from-code:hover{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.md\:hover\:from-code-active:hover{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.md\:hover\:from-gray-lighter:hover{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.md\:hover\:from-gray-lighter-active:hover{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.md\:hover\:from-gray-light:hover{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.md\:hover\:from-gray-medium:hover{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.md\:hover\:from-gray-darker:hover{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.md\:hover\:from-gray-darker-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:hover\:from-api-default:hover{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.md\:hover\:from-gray-xxl:hover{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.md\:hover\:from-line-even:hover{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.md\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.md\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.md\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.md\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.md\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.md\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.md\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.md\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.md\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.md\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.md\:hover\:via-gray-DEFAULT:hover,.md\:hover\:via-gray:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:hover\:via-red:hover{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.md\:hover\:via-orange:hover{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.md\:hover\:via-yellow:hover{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.md\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.md\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.md\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.md\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.md\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.md\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.md\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.md\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.md\:hover\:via-green-DEFAULT:hover,.md\:hover\:via-green:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.md\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.md\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.md\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.md\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.md\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.md\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.md\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.md\:hover\:via-teal-DEFAULT:hover,.md\:hover\:via-teal:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:hover\:via-blue-50:hover{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.md\:hover\:via-blue-100:hover{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.md\:hover\:via-blue-200:hover{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.md\:hover\:via-blue-300:hover{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.md\:hover\:via-blue-400:hover{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.md\:hover\:via-blue-500:hover{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.md\:hover\:via-blue-600:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:hover\:via-blue-700:hover{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.md\:hover\:via-blue-800:hover{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.md\:hover\:via-blue-900:hover{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.md\:hover\:via-blue-DEFAULT:hover,.md\:hover\:via-blue:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.md\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.md\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.md\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.md\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.md\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.md\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.md\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.md\:hover\:via-indigo-DEFAULT:hover,.md\:hover\:via-indigo:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.md\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.md\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.md\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.md\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.md\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.md\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.md\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.md\:hover\:via-purple-DEFAULT:hover,.md\:hover\:via-purple:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:hover\:via-pink:hover{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.md\:hover\:via-inherit:hover{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:hover\:via-amber:hover{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.md\:hover\:via-amber-active:hover{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.md\:hover\:via-ardoise:hover{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.md\:hover\:via-ardoise-active:hover{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.md\:hover\:via-blue-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:hover\:via-lightBlue-active:hover,.md\:hover\:via-lightBlue:hover{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.md\:hover\:via-deepBlue:hover{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.md\:hover\:via-deepBlue-active:hover{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.md\:hover\:via-gold:hover{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.md\:hover\:via-gold-active:hover{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.md\:hover\:via-grenadine:hover{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.md\:hover\:via-grenadine-active:hover{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.md\:hover\:via-kiwi:hover{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.md\:hover\:via-kiwi-active:hover{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.md\:hover\:via-lilas:hover{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.md\:hover\:via-lilas-active:hover{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.md\:hover\:via-mahogany:hover{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.md\:hover\:via-mahogany-active:hover{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.md\:hover\:via-ocher:hover{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.md\:hover\:via-ocher-active:hover{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.md\:hover\:via-pine:hover{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.md\:hover\:via-pine-active:hover{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.md\:hover\:via-platinum-active:hover,.md\:hover\:via-platinum:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.md\:hover\:via-prune:hover{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.md\:hover\:via-prune-active:hover{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.md\:hover\:via-sand:hover{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.md\:hover\:via-sand-active:hover{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.md\:hover\:via-sandPearl:hover{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.md\:hover\:via-sandPearl-active:hover{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.md\:hover\:via-silver:hover{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.md\:hover\:via-silver-active:hover{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.md\:hover\:via-skyBlue:hover{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.md\:hover\:via-skyBlue-active:hover{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.md\:hover\:via-southSea:hover{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.md\:hover\:via-southSea-active:hover{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.md\:hover\:via-turquoise:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:hover\:via-turquoise-active:hover{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.md\:hover\:via-waterGreen:hover{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.md\:hover\:via-waterGreen-active:hover{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.md\:hover\:via-deepRed:hover{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.md\:hover\:via-deepRed-active:hover{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.md\:hover\:via-emerald:hover{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.md\:hover\:via-emerald-active:hover{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.md\:hover\:via-greenLight:hover{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.md\:hover\:via-orange-active:hover{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.md\:hover\:via-red-active:hover{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.md\:hover\:via-white-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:hover\:via-white-button-active:hover,.md\:hover\:via-white-button:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:hover\:via-code:hover{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.md\:hover\:via-code-active:hover{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.md\:hover\:via-gray-lighter:hover{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.md\:hover\:via-gray-lighter-active:hover{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.md\:hover\:via-gray-light:hover{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.md\:hover\:via-gray-medium:hover{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.md\:hover\:via-gray-darker:hover{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.md\:hover\:via-gray-darker-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:hover\:via-api-default:hover{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.md\:hover\:via-gray-xxl:hover{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.md\:hover\:via-line-even:hover{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.md\:hover\:to-transparent:hover{--gradient-to-color:transparent}.md\:hover\:to-current:hover{--gradient-to-color:currentColor}.md\:hover\:to-black:hover{--gradient-to-color:#000}.md\:hover\:to-white:hover{--gradient-to-color:#fff}.md\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.md\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.md\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.md\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.md\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.md\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.md\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.md\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.md\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.md\:hover\:to-gray-DEFAULT:hover,.md\:hover\:to-gray:hover{--gradient-to-color:#718096}.md\:hover\:to-red:hover{--gradient-to-color:#d64343}.md\:hover\:to-orange:hover{--gradient-to-color:#eb6437}.md\:hover\:to-yellow:hover{--gradient-to-color:#f8da30}.md\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.md\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.md\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.md\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.md\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.md\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.md\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.md\:hover\:to-green-800:hover{--gradient-to-color:#276749}.md\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.md\:hover\:to-green-DEFAULT:hover,.md\:hover\:to-green:hover{--gradient-to-color:#38a169}.md\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.md\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.md\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.md\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.md\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.md\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.md\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.md\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.md\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.md\:hover\:to-teal-DEFAULT:hover,.md\:hover\:to-teal:hover{--gradient-to-color:#319795}.md\:hover\:to-blue-50:hover{--gradient-to-color:#d1eaff}.md\:hover\:to-blue-100:hover{--gradient-to-color:#a8d7ff}.md\:hover\:to-blue-200:hover{--gradient-to-color:#80c4ff}.md\:hover\:to-blue-300:hover{--gradient-to-color:#57b0ff}.md\:hover\:to-blue-400:hover{--gradient-to-color:#2e9dff}.md\:hover\:to-blue-500:hover{--gradient-to-color:#058aff}.md\:hover\:to-blue-600:hover{--gradient-to-color:#0075db}.md\:hover\:to-blue-700:hover{--gradient-to-color:#005fb3}.md\:hover\:to-blue-800:hover{--gradient-to-color:#00498a}.md\:hover\:to-blue-900:hover{--gradient-to-color:#003461}.md\:hover\:to-blue-DEFAULT:hover,.md\:hover\:to-blue:hover{--gradient-to-color:#0075db}.md\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.md\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.md\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.md\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.md\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.md\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.md\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.md\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.md\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.md\:hover\:to-indigo-DEFAULT:hover,.md\:hover\:to-indigo:hover{--gradient-to-color:#5a67d8}.md\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.md\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.md\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.md\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.md\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.md\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.md\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.md\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.md\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.md\:hover\:to-purple-DEFAULT:hover,.md\:hover\:to-purple:hover{--gradient-to-color:#805ad5}.md\:hover\:to-pink:hover{--gradient-to-color:#d81b60}.md\:hover\:to-inherit:hover{--gradient-to-color:inherit}.md\:hover\:to-amber:hover{--gradient-to-color:#d78737}.md\:hover\:to-amber-active:hover{--gradient-to-color:#e3872b}.md\:hover\:to-ardoise:hover{--gradient-to-color:#596a82}.md\:hover\:to-ardoise-active:hover{--gradient-to-color:#476794}.md\:hover\:to-blue-active:hover{--gradient-to-color:#14a5c2}.md\:hover\:to-lightBlue-active:hover,.md\:hover\:to-lightBlue:hover{--gradient-to-color:rgba(0,85,138,0.1)}.md\:hover\:to-deepBlue:hover{--gradient-to-color:#0e346c}.md\:hover\:to-deepBlue-active:hover{--gradient-to-color:#0a3f8f}.md\:hover\:to-gold:hover{--gradient-to-color:#bd9e56}.md\:hover\:to-gold-active:hover{--gradient-to-color:#c9a34a}.md\:hover\:to-grenadine:hover{--gradient-to-color:#c35078}.md\:hover\:to-grenadine-active:hover{--gradient-to-color:#cf4475}.md\:hover\:to-kiwi:hover{--gradient-to-color:#9a9f1e}.md\:hover\:to-kiwi-active:hover{--gradient-to-color:#a3a815}.md\:hover\:to-lilas:hover{--gradient-to-color:#7ea1d3}.md\:hover\:to-lilas-active:hover{--gradient-to-color:#75a0db}.md\:hover\:to-mahogany:hover{--gradient-to-color:#57142e}.md\:hover\:to-mahogany-active:hover{--gradient-to-color:#610a2b}.md\:hover\:to-ocher:hover{--gradient-to-color:#c29614}.md\:hover\:to-ocher-active:hover{--gradient-to-color:#cd9c0a}.md\:hover\:to-pine:hover{--gradient-to-color:#144d52}.md\:hover\:to-pine-active:hover{--gradient-to-color:#0a555c}.md\:hover\:to-platinum-active:hover,.md\:hover\:to-platinum:hover{--gradient-to-color:#000}.md\:hover\:to-prune:hover{--gradient-to-color:#661456}.md\:hover\:to-prune-active:hover{--gradient-to-color:#72085d}.md\:hover\:to-sand:hover{--gradient-to-color:#d7be88}.md\:hover\:to-sand-active:hover{--gradient-to-color:#dfc181}.md\:hover\:to-sandPearl:hover{--gradient-to-color:#f0e5d6}.md\:hover\:to-sandPearl-active:hover{--gradient-to-color:#f2e6d4}.md\:hover\:to-silver:hover{--gradient-to-color:#b1b2b4}.md\:hover\:to-silver-active:hover{--gradient-to-color:#a9afbc}.md\:hover\:to-skyBlue:hover{--gradient-to-color:#98d2d7}.md\:hover\:to-skyBlue-active:hover{--gradient-to-color:#91d8de}.md\:hover\:to-southSea:hover{--gradient-to-color:#9dc9cd}.md\:hover\:to-southSea-active:hover{--gradient-to-color:#95ced5}.md\:hover\:to-turquoise:hover{--gradient-to-color:#14a5c2}.md\:hover\:to-turquoise-active:hover{--gradient-to-color:#0aaccd}.md\:hover\:to-waterGreen:hover{--gradient-to-color:#007571}.md\:hover\:to-waterGreen-active:hover{--gradient-to-color:#00a8a3}.md\:hover\:to-deepRed:hover{--gradient-to-color:#c32222}.md\:hover\:to-deepRed-active:hover{--gradient-to-color:#cf1717}.md\:hover\:to-emerald:hover{--gradient-to-color:#14a33a}.md\:hover\:to-emerald-active:hover{--gradient-to-color:#0bad36}.md\:hover\:to-greenLight:hover{--gradient-to-color:#7cb342}.md\:hover\:to-orange-active:hover{--gradient-to-color:#f65f2c}.md\:hover\:to-red-active:hover{--gradient-to-color:#e13737}.md\:hover\:to-white-active:hover{--gradient-to-color:#14a5c2}.md\:hover\:to-white-button-active:hover,.md\:hover\:to-white-button:hover{--gradient-to-color:#fff}.md\:hover\:to-code:hover{--gradient-to-color:#3f3d57}.md\:hover\:to-code-active:hover{--gradient-to-color:#37354b}.md\:hover\:to-gray-lighter:hover{--gradient-to-color:#f7f7f7}.md\:hover\:to-gray-lighter-active:hover{--gradient-to-color:#ebebeb}.md\:hover\:to-gray-light:hover{--gradient-to-color:#d4d1d1}.md\:hover\:to-gray-medium:hover{--gradient-to-color:#a8a0a0}.md\:hover\:to-gray-darker:hover{--gradient-to-color:#504747}.md\:hover\:to-gray-darker-active:hover{--gradient-to-color:#14a5c2}.md\:hover\:to-api-default:hover{--gradient-to-color:#507192}.md\:hover\:to-gray-xxl:hover{--gradient-to-color:#2c3e50}.md\:hover\:to-line-even:hover{--gradient-to-color:#f3f6f7}.md\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.md\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.md\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.md\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.md\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.md\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.md\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.md\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.md\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.md\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.md\:focus\:from-gray-DEFAULT:focus,.md\:focus\:from-gray:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:focus\:from-red:focus{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.md\:focus\:from-orange:focus{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.md\:focus\:from-yellow:focus{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.md\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.md\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.md\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.md\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.md\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.md\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.md\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.md\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.md\:focus\:from-green-DEFAULT:focus,.md\:focus\:from-green:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.md\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.md\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.md\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.md\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.md\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.md\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.md\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.md\:focus\:from-teal-DEFAULT:focus,.md\:focus\:from-teal:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:focus\:from-blue-50:focus{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.md\:focus\:from-blue-100:focus{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.md\:focus\:from-blue-200:focus{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.md\:focus\:from-blue-300:focus{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.md\:focus\:from-blue-400:focus{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.md\:focus\:from-blue-500:focus{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.md\:focus\:from-blue-600:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:focus\:from-blue-700:focus{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.md\:focus\:from-blue-800:focus{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.md\:focus\:from-blue-900:focus{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.md\:focus\:from-blue-DEFAULT:focus,.md\:focus\:from-blue:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.md\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.md\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.md\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.md\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.md\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.md\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.md\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.md\:focus\:from-indigo-DEFAULT:focus,.md\:focus\:from-indigo:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.md\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.md\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.md\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.md\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.md\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.md\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.md\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.md\:focus\:from-purple-DEFAULT:focus,.md\:focus\:from-purple:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:focus\:from-pink:focus{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.md\:focus\:from-inherit:focus{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:focus\:from-amber:focus{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.md\:focus\:from-amber-active:focus{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.md\:focus\:from-ardoise:focus{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.md\:focus\:from-ardoise-active:focus{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.md\:focus\:from-blue-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:focus\:from-lightBlue-active:focus,.md\:focus\:from-lightBlue:focus{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.md\:focus\:from-deepBlue:focus{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.md\:focus\:from-deepBlue-active:focus{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.md\:focus\:from-gold:focus{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.md\:focus\:from-gold-active:focus{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.md\:focus\:from-grenadine:focus{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.md\:focus\:from-grenadine-active:focus{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.md\:focus\:from-kiwi:focus{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.md\:focus\:from-kiwi-active:focus{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.md\:focus\:from-lilas:focus{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.md\:focus\:from-lilas-active:focus{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.md\:focus\:from-mahogany:focus{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.md\:focus\:from-mahogany-active:focus{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.md\:focus\:from-ocher:focus{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.md\:focus\:from-ocher-active:focus{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.md\:focus\:from-pine:focus{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.md\:focus\:from-pine-active:focus{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.md\:focus\:from-platinum-active:focus,.md\:focus\:from-platinum:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.md\:focus\:from-prune:focus{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.md\:focus\:from-prune-active:focus{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.md\:focus\:from-sand:focus{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.md\:focus\:from-sand-active:focus{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.md\:focus\:from-sandPearl:focus{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.md\:focus\:from-sandPearl-active:focus{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.md\:focus\:from-silver:focus{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.md\:focus\:from-silver-active:focus{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.md\:focus\:from-skyBlue:focus{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.md\:focus\:from-skyBlue-active:focus{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.md\:focus\:from-southSea:focus{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.md\:focus\:from-southSea-active:focus{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.md\:focus\:from-turquoise:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:focus\:from-turquoise-active:focus{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.md\:focus\:from-waterGreen:focus{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.md\:focus\:from-waterGreen-active:focus{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.md\:focus\:from-deepRed:focus{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.md\:focus\:from-deepRed-active:focus{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.md\:focus\:from-emerald:focus{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.md\:focus\:from-emerald-active:focus{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.md\:focus\:from-greenLight:focus{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.md\:focus\:from-orange-active:focus{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.md\:focus\:from-red-active:focus{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.md\:focus\:from-white-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:focus\:from-white-button-active:focus,.md\:focus\:from-white-button:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:focus\:from-code:focus{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.md\:focus\:from-code-active:focus{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.md\:focus\:from-gray-lighter:focus{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.md\:focus\:from-gray-lighter-active:focus{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.md\:focus\:from-gray-light:focus{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.md\:focus\:from-gray-medium:focus{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.md\:focus\:from-gray-darker:focus{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.md\:focus\:from-gray-darker-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:focus\:from-api-default:focus{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.md\:focus\:from-gray-xxl:focus{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.md\:focus\:from-line-even:focus{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.md\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.md\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.md\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.md\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.md\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.md\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.md\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.md\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.md\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.md\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.md\:focus\:via-gray-DEFAULT:focus,.md\:focus\:via-gray:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.md\:focus\:via-red:focus{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.md\:focus\:via-orange:focus{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.md\:focus\:via-yellow:focus{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.md\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.md\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.md\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.md\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.md\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.md\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.md\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.md\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.md\:focus\:via-green-DEFAULT:focus,.md\:focus\:via-green:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.md\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.md\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.md\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.md\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.md\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.md\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.md\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.md\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.md\:focus\:via-teal-DEFAULT:focus,.md\:focus\:via-teal:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.md\:focus\:via-blue-50:focus{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.md\:focus\:via-blue-100:focus{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.md\:focus\:via-blue-200:focus{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.md\:focus\:via-blue-300:focus{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.md\:focus\:via-blue-400:focus{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.md\:focus\:via-blue-500:focus{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.md\:focus\:via-blue-600:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:focus\:via-blue-700:focus{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.md\:focus\:via-blue-800:focus{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.md\:focus\:via-blue-900:focus{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.md\:focus\:via-blue-DEFAULT:focus,.md\:focus\:via-blue:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.md\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.md\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.md\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.md\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.md\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.md\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.md\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.md\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.md\:focus\:via-indigo-DEFAULT:focus,.md\:focus\:via-indigo:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.md\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.md\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.md\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.md\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.md\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.md\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.md\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.md\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.md\:focus\:via-purple-DEFAULT:focus,.md\:focus\:via-purple:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.md\:focus\:via-pink:focus{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.md\:focus\:via-inherit:focus{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:focus\:via-amber:focus{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.md\:focus\:via-amber-active:focus{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.md\:focus\:via-ardoise:focus{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.md\:focus\:via-ardoise-active:focus{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.md\:focus\:via-blue-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:focus\:via-lightBlue-active:focus,.md\:focus\:via-lightBlue:focus{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.md\:focus\:via-deepBlue:focus{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.md\:focus\:via-deepBlue-active:focus{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.md\:focus\:via-gold:focus{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.md\:focus\:via-gold-active:focus{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.md\:focus\:via-grenadine:focus{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.md\:focus\:via-grenadine-active:focus{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.md\:focus\:via-kiwi:focus{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.md\:focus\:via-kiwi-active:focus{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.md\:focus\:via-lilas:focus{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.md\:focus\:via-lilas-active:focus{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.md\:focus\:via-mahogany:focus{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.md\:focus\:via-mahogany-active:focus{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.md\:focus\:via-ocher:focus{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.md\:focus\:via-ocher-active:focus{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.md\:focus\:via-pine:focus{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.md\:focus\:via-pine-active:focus{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.md\:focus\:via-platinum-active:focus,.md\:focus\:via-platinum:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.md\:focus\:via-prune:focus{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.md\:focus\:via-prune-active:focus{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.md\:focus\:via-sand:focus{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.md\:focus\:via-sand-active:focus{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.md\:focus\:via-sandPearl:focus{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.md\:focus\:via-sandPearl-active:focus{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.md\:focus\:via-silver:focus{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.md\:focus\:via-silver-active:focus{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.md\:focus\:via-skyBlue:focus{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.md\:focus\:via-skyBlue-active:focus{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.md\:focus\:via-southSea:focus{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.md\:focus\:via-southSea-active:focus{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.md\:focus\:via-turquoise:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:focus\:via-turquoise-active:focus{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.md\:focus\:via-waterGreen:focus{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.md\:focus\:via-waterGreen-active:focus{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.md\:focus\:via-deepRed:focus{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.md\:focus\:via-deepRed-active:focus{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.md\:focus\:via-emerald:focus{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.md\:focus\:via-emerald-active:focus{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.md\:focus\:via-greenLight:focus{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.md\:focus\:via-orange-active:focus{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.md\:focus\:via-red-active:focus{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.md\:focus\:via-white-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:focus\:via-white-button-active:focus,.md\:focus\:via-white-button:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.md\:focus\:via-code:focus{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.md\:focus\:via-code-active:focus{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.md\:focus\:via-gray-lighter:focus{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.md\:focus\:via-gray-lighter-active:focus{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.md\:focus\:via-gray-light:focus{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.md\:focus\:via-gray-medium:focus{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.md\:focus\:via-gray-darker:focus{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.md\:focus\:via-gray-darker-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.md\:focus\:via-api-default:focus{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.md\:focus\:via-gray-xxl:focus{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.md\:focus\:via-line-even:focus{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.md\:focus\:to-transparent:focus{--gradient-to-color:transparent}.md\:focus\:to-current:focus{--gradient-to-color:currentColor}.md\:focus\:to-black:focus{--gradient-to-color:#000}.md\:focus\:to-white:focus{--gradient-to-color:#fff}.md\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.md\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.md\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.md\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.md\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.md\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.md\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.md\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.md\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.md\:focus\:to-gray-DEFAULT:focus,.md\:focus\:to-gray:focus{--gradient-to-color:#718096}.md\:focus\:to-red:focus{--gradient-to-color:#d64343}.md\:focus\:to-orange:focus{--gradient-to-color:#eb6437}.md\:focus\:to-yellow:focus{--gradient-to-color:#f8da30}.md\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.md\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.md\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.md\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.md\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.md\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.md\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.md\:focus\:to-green-800:focus{--gradient-to-color:#276749}.md\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.md\:focus\:to-green-DEFAULT:focus,.md\:focus\:to-green:focus{--gradient-to-color:#38a169}.md\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.md\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.md\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.md\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.md\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.md\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.md\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.md\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.md\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.md\:focus\:to-teal-DEFAULT:focus,.md\:focus\:to-teal:focus{--gradient-to-color:#319795}.md\:focus\:to-blue-50:focus{--gradient-to-color:#d1eaff}.md\:focus\:to-blue-100:focus{--gradient-to-color:#a8d7ff}.md\:focus\:to-blue-200:focus{--gradient-to-color:#80c4ff}.md\:focus\:to-blue-300:focus{--gradient-to-color:#57b0ff}.md\:focus\:to-blue-400:focus{--gradient-to-color:#2e9dff}.md\:focus\:to-blue-500:focus{--gradient-to-color:#058aff}.md\:focus\:to-blue-600:focus{--gradient-to-color:#0075db}.md\:focus\:to-blue-700:focus{--gradient-to-color:#005fb3}.md\:focus\:to-blue-800:focus{--gradient-to-color:#00498a}.md\:focus\:to-blue-900:focus{--gradient-to-color:#003461}.md\:focus\:to-blue-DEFAULT:focus,.md\:focus\:to-blue:focus{--gradient-to-color:#0075db}.md\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.md\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.md\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.md\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.md\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.md\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.md\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.md\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.md\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.md\:focus\:to-indigo-DEFAULT:focus,.md\:focus\:to-indigo:focus{--gradient-to-color:#5a67d8}.md\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.md\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.md\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.md\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.md\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.md\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.md\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.md\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.md\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.md\:focus\:to-purple-DEFAULT:focus,.md\:focus\:to-purple:focus{--gradient-to-color:#805ad5}.md\:focus\:to-pink:focus{--gradient-to-color:#d81b60}.md\:focus\:to-inherit:focus{--gradient-to-color:inherit}.md\:focus\:to-amber:focus{--gradient-to-color:#d78737}.md\:focus\:to-amber-active:focus{--gradient-to-color:#e3872b}.md\:focus\:to-ardoise:focus{--gradient-to-color:#596a82}.md\:focus\:to-ardoise-active:focus{--gradient-to-color:#476794}.md\:focus\:to-blue-active:focus{--gradient-to-color:#14a5c2}.md\:focus\:to-lightBlue-active:focus,.md\:focus\:to-lightBlue:focus{--gradient-to-color:rgba(0,85,138,0.1)}.md\:focus\:to-deepBlue:focus{--gradient-to-color:#0e346c}.md\:focus\:to-deepBlue-active:focus{--gradient-to-color:#0a3f8f}.md\:focus\:to-gold:focus{--gradient-to-color:#bd9e56}.md\:focus\:to-gold-active:focus{--gradient-to-color:#c9a34a}.md\:focus\:to-grenadine:focus{--gradient-to-color:#c35078}.md\:focus\:to-grenadine-active:focus{--gradient-to-color:#cf4475}.md\:focus\:to-kiwi:focus{--gradient-to-color:#9a9f1e}.md\:focus\:to-kiwi-active:focus{--gradient-to-color:#a3a815}.md\:focus\:to-lilas:focus{--gradient-to-color:#7ea1d3}.md\:focus\:to-lilas-active:focus{--gradient-to-color:#75a0db}.md\:focus\:to-mahogany:focus{--gradient-to-color:#57142e}.md\:focus\:to-mahogany-active:focus{--gradient-to-color:#610a2b}.md\:focus\:to-ocher:focus{--gradient-to-color:#c29614}.md\:focus\:to-ocher-active:focus{--gradient-to-color:#cd9c0a}.md\:focus\:to-pine:focus{--gradient-to-color:#144d52}.md\:focus\:to-pine-active:focus{--gradient-to-color:#0a555c}.md\:focus\:to-platinum-active:focus,.md\:focus\:to-platinum:focus{--gradient-to-color:#000}.md\:focus\:to-prune:focus{--gradient-to-color:#661456}.md\:focus\:to-prune-active:focus{--gradient-to-color:#72085d}.md\:focus\:to-sand:focus{--gradient-to-color:#d7be88}.md\:focus\:to-sand-active:focus{--gradient-to-color:#dfc181}.md\:focus\:to-sandPearl:focus{--gradient-to-color:#f0e5d6}.md\:focus\:to-sandPearl-active:focus{--gradient-to-color:#f2e6d4}.md\:focus\:to-silver:focus{--gradient-to-color:#b1b2b4}.md\:focus\:to-silver-active:focus{--gradient-to-color:#a9afbc}.md\:focus\:to-skyBlue:focus{--gradient-to-color:#98d2d7}.md\:focus\:to-skyBlue-active:focus{--gradient-to-color:#91d8de}.md\:focus\:to-southSea:focus{--gradient-to-color:#9dc9cd}.md\:focus\:to-southSea-active:focus{--gradient-to-color:#95ced5}.md\:focus\:to-turquoise:focus{--gradient-to-color:#14a5c2}.md\:focus\:to-turquoise-active:focus{--gradient-to-color:#0aaccd}.md\:focus\:to-waterGreen:focus{--gradient-to-color:#007571}.md\:focus\:to-waterGreen-active:focus{--gradient-to-color:#00a8a3}.md\:focus\:to-deepRed:focus{--gradient-to-color:#c32222}.md\:focus\:to-deepRed-active:focus{--gradient-to-color:#cf1717}.md\:focus\:to-emerald:focus{--gradient-to-color:#14a33a}.md\:focus\:to-emerald-active:focus{--gradient-to-color:#0bad36}.md\:focus\:to-greenLight:focus{--gradient-to-color:#7cb342}.md\:focus\:to-orange-active:focus{--gradient-to-color:#f65f2c}.md\:focus\:to-red-active:focus{--gradient-to-color:#e13737}.md\:focus\:to-white-active:focus{--gradient-to-color:#14a5c2}.md\:focus\:to-white-button-active:focus,.md\:focus\:to-white-button:focus{--gradient-to-color:#fff}.md\:focus\:to-code:focus{--gradient-to-color:#3f3d57}.md\:focus\:to-code-active:focus{--gradient-to-color:#37354b}.md\:focus\:to-gray-lighter:focus{--gradient-to-color:#f7f7f7}.md\:focus\:to-gray-lighter-active:focus{--gradient-to-color:#ebebeb}.md\:focus\:to-gray-light:focus{--gradient-to-color:#d4d1d1}.md\:focus\:to-gray-medium:focus{--gradient-to-color:#a8a0a0}.md\:focus\:to-gray-darker:focus{--gradient-to-color:#504747}.md\:focus\:to-gray-darker-active:focus{--gradient-to-color:#14a5c2}.md\:focus\:to-api-default:focus{--gradient-to-color:#507192}.md\:focus\:to-gray-xxl:focus{--gradient-to-color:#2c3e50}.md\:focus\:to-line-even:focus{--gradient-to-color:#f3f6f7}.md\:bg-opacity-0{--bg-opacity:0}.md\:bg-opacity-25{--bg-opacity:0.25}.md\:bg-opacity-50{--bg-opacity:0.5}.md\:bg-opacity-75{--bg-opacity:0.75}.md\:bg-opacity-100{--bg-opacity:1}.md\:hover\:bg-opacity-0:hover{--bg-opacity:0}.md\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.md\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.md\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.md\:hover\:bg-opacity-100:hover{--bg-opacity:1}.md\:focus\:bg-opacity-0:focus{--bg-opacity:0}.md\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.md\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.md\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.md\:focus\:bg-opacity-100:focus{--bg-opacity:1}.md\:bg-bottom{background-position:bottom}.md\:bg-center{background-position:50%}.md\:bg-left{background-position:0}.md\:bg-left-bottom{background-position:0 100%}.md\:bg-left-top{background-position:0 0}.md\:bg-right{background-position:100%}.md\:bg-right-bottom{background-position:100% 100%}.md\:bg-right-top{background-position:100% 0}.md\:bg-top{background-position:top}.md\:bg-repeat{background-repeat:repeat}.md\:bg-no-repeat{background-repeat:no-repeat}.md\:bg-repeat-x{background-repeat:repeat-x}.md\:bg-repeat-y{background-repeat:repeat-y}.md\:bg-repeat-round{background-repeat:round}.md\:bg-repeat-space{background-repeat:space}.md\:bg-auto{background-size:auto}.md\:bg-cover{background-size:cover}.md\:bg-contain{background-size:contain}.md\:border-collapse{border-collapse:collapse}.md\:border-separate{border-collapse:separate}.md\:border-transparent{border-color:transparent}.md\:border-current{border-color:currentColor}.md\:border-black{border-color:#000}.md\:border-white{border-color:#fff}.md\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.md\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.md\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.md\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.md\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.md\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.md\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.md\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.md\:border-gray,.md\:border-gray-DEFAULT{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:border-red{border-color:#d64343}.md\:border-orange{border-color:#eb6437}.md\:border-yellow{border-color:#f8da30}.md\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.md\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.md\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.md\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.md\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.md\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.md\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.md\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.md\:border-green,.md\:border-green-DEFAULT{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.md\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.md\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.md\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.md\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.md\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.md\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.md\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.md\:border-teal,.md\:border-teal-DEFAULT{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:border-blue-50{border-color:#d1eaff}.md\:border-blue-100{border-color:#a8d7ff}.md\:border-blue-200{border-color:#80c4ff}.md\:border-blue-300{border-color:#57b0ff}.md\:border-blue-400{border-color:#2e9dff}.md\:border-blue-500{border-color:#058aff}.md\:border-blue-600{border-color:#0075db}.md\:border-blue-700{border-color:#005fb3}.md\:border-blue-800{border-color:#00498a}.md\:border-blue-900{border-color:#003461}.md\:border-blue,.md\:border-blue-DEFAULT{border-color:#0075db}.md\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.md\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.md\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.md\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.md\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.md\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.md\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.md\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.md\:border-indigo,.md\:border-indigo-DEFAULT{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.md\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.md\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.md\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.md\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.md\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.md\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.md\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.md\:border-purple,.md\:border-purple-DEFAULT{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:border-pink{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.md\:border-inherit{border-color:inherit}.md\:border-amber{border-color:#d78737}.md\:border-amber-active{border-color:#e3872b}.md\:border-ardoise{border-color:#596a82}.md\:border-ardoise-active{border-color:#476794}.md\:border-blue-active{border-color:#14a5c2}.md\:border-lightBlue,.md\:border-lightBlue-active{border-color:rgba(0,85,138,.1)}.md\:border-deepBlue{border-color:#0e346c}.md\:border-deepBlue-active{border-color:#0a3f8f}.md\:border-gold{border-color:#bd9e56}.md\:border-gold-active{border-color:#c9a34a}.md\:border-grenadine{border-color:#c35078}.md\:border-grenadine-active{border-color:#cf4475}.md\:border-kiwi{border-color:#9a9f1e}.md\:border-kiwi-active{border-color:#a3a815}.md\:border-lilas{border-color:#7ea1d3}.md\:border-lilas-active{border-color:#75a0db}.md\:border-mahogany{border-color:#57142e}.md\:border-mahogany-active{border-color:#610a2b}.md\:border-ocher{border-color:#c29614}.md\:border-ocher-active{border-color:#cd9c0a}.md\:border-pine{border-color:#144d52}.md\:border-pine-active{border-color:#0a555c}.md\:border-platinum,.md\:border-platinum-active{border-color:#000}.md\:border-prune{border-color:#661456}.md\:border-prune-active{border-color:#72085d}.md\:border-sand{border-color:#d7be88}.md\:border-sand-active{border-color:#dfc181}.md\:border-sandPearl{border-color:#f0e5d6}.md\:border-sandPearl-active{border-color:#f2e6d4}.md\:border-silver{border-color:#b1b2b4}.md\:border-silver-active{border-color:#a9afbc}.md\:border-skyBlue{border-color:#98d2d7}.md\:border-skyBlue-active{border-color:#91d8de}.md\:border-southSea{border-color:#9dc9cd}.md\:border-southSea-active{border-color:#95ced5}.md\:border-turquoise{border-color:#14a5c2}.md\:border-turquoise-active{border-color:#0aaccd}.md\:border-waterGreen{border-color:#007571}.md\:border-waterGreen-active{border-color:#00a8a3}.md\:border-deepRed{border-color:#c32222}.md\:border-deepRed-active{border-color:#cf1717}.md\:border-emerald{border-color:#14a33a}.md\:border-emerald-active{border-color:#0bad36}.md\:border-greenLight{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.md\:border-orange-active{border-color:#f65f2c}.md\:border-red-active{border-color:#e13737}.md\:border-white-active{border-color:#14a5c2}.md\:border-white-button,.md\:border-white-button-active{border-color:#fff}.md\:border-code{border-color:#3f3d57}.md\:border-code-active{border-color:#37354b}.md\:border-gray-lighter{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.md\:border-gray-lighter-active{border-color:#ebebeb}.md\:border-gray-light{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.md\:border-gray-medium{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.md\:border-gray-darker{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.md\:border-gray-darker-active{border-color:#14a5c2}.md\:border-api-default{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.md\:border-gray-xxl{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.md\:border-line-even{border-color:#f3f6f7}.md\:border-DEFAULT{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.md\:hover\:border-transparent:hover{border-color:transparent}.md\:hover\:border-current:hover{border-color:currentColor}.md\:hover\:border-black:hover{border-color:#000}.md\:hover\:border-white:hover{border-color:#fff}.md\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.md\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.md\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.md\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.md\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.md\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.md\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.md\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.md\:hover\:border-gray-DEFAULT:hover,.md\:hover\:border-gray:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:hover\:border-red:hover{border-color:#d64343}.md\:hover\:border-orange:hover{border-color:#eb6437}.md\:hover\:border-yellow:hover{border-color:#f8da30}.md\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.md\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.md\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.md\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.md\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.md\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.md\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.md\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.md\:hover\:border-green-DEFAULT:hover,.md\:hover\:border-green:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.md\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.md\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.md\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.md\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.md\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.md\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.md\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.md\:hover\:border-teal-DEFAULT:hover,.md\:hover\:border-teal:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:hover\:border-blue-50:hover{border-color:#d1eaff}.md\:hover\:border-blue-100:hover{border-color:#a8d7ff}.md\:hover\:border-blue-200:hover{border-color:#80c4ff}.md\:hover\:border-blue-300:hover{border-color:#57b0ff}.md\:hover\:border-blue-400:hover{border-color:#2e9dff}.md\:hover\:border-blue-500:hover{border-color:#058aff}.md\:hover\:border-blue-600:hover{border-color:#0075db}.md\:hover\:border-blue-700:hover{border-color:#005fb3}.md\:hover\:border-blue-800:hover{border-color:#00498a}.md\:hover\:border-blue-900:hover{border-color:#003461}.md\:hover\:border-blue-DEFAULT:hover,.md\:hover\:border-blue:hover{border-color:#0075db}.md\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.md\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.md\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.md\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.md\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.md\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.md\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.md\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.md\:hover\:border-indigo-DEFAULT:hover,.md\:hover\:border-indigo:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.md\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.md\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.md\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.md\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.md\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.md\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.md\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.md\:hover\:border-purple-DEFAULT:hover,.md\:hover\:border-purple:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:hover\:border-pink:hover{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.md\:hover\:border-inherit:hover{border-color:inherit}.md\:hover\:border-amber:hover{border-color:#d78737}.md\:hover\:border-amber-active:hover{border-color:#e3872b}.md\:hover\:border-ardoise:hover{border-color:#596a82}.md\:hover\:border-ardoise-active:hover{border-color:#476794}.md\:hover\:border-blue-active:hover{border-color:#14a5c2}.md\:hover\:border-lightBlue-active:hover,.md\:hover\:border-lightBlue:hover{border-color:rgba(0,85,138,.1)}.md\:hover\:border-deepBlue:hover{border-color:#0e346c}.md\:hover\:border-deepBlue-active:hover{border-color:#0a3f8f}.md\:hover\:border-gold:hover{border-color:#bd9e56}.md\:hover\:border-gold-active:hover{border-color:#c9a34a}.md\:hover\:border-grenadine:hover{border-color:#c35078}.md\:hover\:border-grenadine-active:hover{border-color:#cf4475}.md\:hover\:border-kiwi:hover{border-color:#9a9f1e}.md\:hover\:border-kiwi-active:hover{border-color:#a3a815}.md\:hover\:border-lilas:hover{border-color:#7ea1d3}.md\:hover\:border-lilas-active:hover{border-color:#75a0db}.md\:hover\:border-mahogany:hover{border-color:#57142e}.md\:hover\:border-mahogany-active:hover{border-color:#610a2b}.md\:hover\:border-ocher:hover{border-color:#c29614}.md\:hover\:border-ocher-active:hover{border-color:#cd9c0a}.md\:hover\:border-pine:hover{border-color:#144d52}.md\:hover\:border-pine-active:hover{border-color:#0a555c}.md\:hover\:border-platinum-active:hover,.md\:hover\:border-platinum:hover{border-color:#000}.md\:hover\:border-prune:hover{border-color:#661456}.md\:hover\:border-prune-active:hover{border-color:#72085d}.md\:hover\:border-sand:hover{border-color:#d7be88}.md\:hover\:border-sand-active:hover{border-color:#dfc181}.md\:hover\:border-sandPearl:hover{border-color:#f0e5d6}.md\:hover\:border-sandPearl-active:hover{border-color:#f2e6d4}.md\:hover\:border-silver:hover{border-color:#b1b2b4}.md\:hover\:border-silver-active:hover{border-color:#a9afbc}.md\:hover\:border-skyBlue:hover{border-color:#98d2d7}.md\:hover\:border-skyBlue-active:hover{border-color:#91d8de}.md\:hover\:border-southSea:hover{border-color:#9dc9cd}.md\:hover\:border-southSea-active:hover{border-color:#95ced5}.md\:hover\:border-turquoise:hover{border-color:#14a5c2}.md\:hover\:border-turquoise-active:hover{border-color:#0aaccd}.md\:hover\:border-waterGreen:hover{border-color:#007571}.md\:hover\:border-waterGreen-active:hover{border-color:#00a8a3}.md\:hover\:border-deepRed:hover{border-color:#c32222}.md\:hover\:border-deepRed-active:hover{border-color:#cf1717}.md\:hover\:border-emerald:hover{border-color:#14a33a}.md\:hover\:border-emerald-active:hover{border-color:#0bad36}.md\:hover\:border-greenLight:hover{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.md\:hover\:border-orange-active:hover{border-color:#f65f2c}.md\:hover\:border-red-active:hover{border-color:#e13737}.md\:hover\:border-white-active:hover{border-color:#14a5c2}.md\:hover\:border-white-button-active:hover,.md\:hover\:border-white-button:hover{border-color:#fff}.md\:hover\:border-code:hover{border-color:#3f3d57}.md\:hover\:border-code-active:hover{border-color:#37354b}.md\:hover\:border-gray-lighter:hover{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.md\:hover\:border-gray-lighter-active:hover{border-color:#ebebeb}.md\:hover\:border-gray-light:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.md\:hover\:border-gray-medium:hover{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.md\:hover\:border-gray-darker:hover{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.md\:hover\:border-gray-darker-active:hover{border-color:#14a5c2}.md\:hover\:border-api-default:hover{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.md\:hover\:border-gray-xxl:hover{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.md\:hover\:border-line-even:hover{border-color:#f3f6f7}.md\:hover\:border-DEFAULT:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.md\:focus\:border-transparent:focus{border-color:transparent}.md\:focus\:border-current:focus{border-color:currentColor}.md\:focus\:border-black:focus{border-color:#000}.md\:focus\:border-white:focus{border-color:#fff}.md\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.md\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.md\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.md\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.md\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.md\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.md\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.md\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.md\:focus\:border-gray-DEFAULT:focus,.md\:focus\:border-gray:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:focus\:border-red:focus{border-color:#d64343}.md\:focus\:border-orange:focus{border-color:#eb6437}.md\:focus\:border-yellow:focus{border-color:#f8da30}.md\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.md\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.md\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.md\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.md\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.md\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.md\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.md\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.md\:focus\:border-green-DEFAULT:focus,.md\:focus\:border-green:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.md\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.md\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.md\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.md\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.md\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.md\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.md\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.md\:focus\:border-teal-DEFAULT:focus,.md\:focus\:border-teal:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:focus\:border-blue-50:focus{border-color:#d1eaff}.md\:focus\:border-blue-100:focus{border-color:#a8d7ff}.md\:focus\:border-blue-200:focus{border-color:#80c4ff}.md\:focus\:border-blue-300:focus{border-color:#57b0ff}.md\:focus\:border-blue-400:focus{border-color:#2e9dff}.md\:focus\:border-blue-500:focus{border-color:#058aff}.md\:focus\:border-blue-600:focus{border-color:#0075db}.md\:focus\:border-blue-700:focus{border-color:#005fb3}.md\:focus\:border-blue-800:focus{border-color:#00498a}.md\:focus\:border-blue-900:focus{border-color:#003461}.md\:focus\:border-blue-DEFAULT:focus,.md\:focus\:border-blue:focus{border-color:#0075db}.md\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.md\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.md\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.md\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.md\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.md\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.md\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.md\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.md\:focus\:border-indigo-DEFAULT:focus,.md\:focus\:border-indigo:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.md\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.md\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.md\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.md\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.md\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.md\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.md\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.md\:focus\:border-purple-DEFAULT:focus,.md\:focus\:border-purple:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:focus\:border-pink:focus{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.md\:focus\:border-inherit:focus{border-color:inherit}.md\:focus\:border-amber:focus{border-color:#d78737}.md\:focus\:border-amber-active:focus{border-color:#e3872b}.md\:focus\:border-ardoise:focus{border-color:#596a82}.md\:focus\:border-ardoise-active:focus{border-color:#476794}.md\:focus\:border-blue-active:focus{border-color:#14a5c2}.md\:focus\:border-lightBlue-active:focus,.md\:focus\:border-lightBlue:focus{border-color:rgba(0,85,138,.1)}.md\:focus\:border-deepBlue:focus{border-color:#0e346c}.md\:focus\:border-deepBlue-active:focus{border-color:#0a3f8f}.md\:focus\:border-gold:focus{border-color:#bd9e56}.md\:focus\:border-gold-active:focus{border-color:#c9a34a}.md\:focus\:border-grenadine:focus{border-color:#c35078}.md\:focus\:border-grenadine-active:focus{border-color:#cf4475}.md\:focus\:border-kiwi:focus{border-color:#9a9f1e}.md\:focus\:border-kiwi-active:focus{border-color:#a3a815}.md\:focus\:border-lilas:focus{border-color:#7ea1d3}.md\:focus\:border-lilas-active:focus{border-color:#75a0db}.md\:focus\:border-mahogany:focus{border-color:#57142e}.md\:focus\:border-mahogany-active:focus{border-color:#610a2b}.md\:focus\:border-ocher:focus{border-color:#c29614}.md\:focus\:border-ocher-active:focus{border-color:#cd9c0a}.md\:focus\:border-pine:focus{border-color:#144d52}.md\:focus\:border-pine-active:focus{border-color:#0a555c}.md\:focus\:border-platinum-active:focus,.md\:focus\:border-platinum:focus{border-color:#000}.md\:focus\:border-prune:focus{border-color:#661456}.md\:focus\:border-prune-active:focus{border-color:#72085d}.md\:focus\:border-sand:focus{border-color:#d7be88}.md\:focus\:border-sand-active:focus{border-color:#dfc181}.md\:focus\:border-sandPearl:focus{border-color:#f0e5d6}.md\:focus\:border-sandPearl-active:focus{border-color:#f2e6d4}.md\:focus\:border-silver:focus{border-color:#b1b2b4}.md\:focus\:border-silver-active:focus{border-color:#a9afbc}.md\:focus\:border-skyBlue:focus{border-color:#98d2d7}.md\:focus\:border-skyBlue-active:focus{border-color:#91d8de}.md\:focus\:border-southSea:focus{border-color:#9dc9cd}.md\:focus\:border-southSea-active:focus{border-color:#95ced5}.md\:focus\:border-turquoise:focus{border-color:#14a5c2}.md\:focus\:border-turquoise-active:focus{border-color:#0aaccd}.md\:focus\:border-waterGreen:focus{border-color:#007571}.md\:focus\:border-waterGreen-active:focus{border-color:#00a8a3}.md\:focus\:border-deepRed:focus{border-color:#c32222}.md\:focus\:border-deepRed-active:focus{border-color:#cf1717}.md\:focus\:border-emerald:focus{border-color:#14a33a}.md\:focus\:border-emerald-active:focus{border-color:#0bad36}.md\:focus\:border-greenLight:focus{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.md\:focus\:border-orange-active:focus{border-color:#f65f2c}.md\:focus\:border-red-active:focus{border-color:#e13737}.md\:focus\:border-white-active:focus{border-color:#14a5c2}.md\:focus\:border-white-button-active:focus,.md\:focus\:border-white-button:focus{border-color:#fff}.md\:focus\:border-code:focus{border-color:#3f3d57}.md\:focus\:border-code-active:focus{border-color:#37354b}.md\:focus\:border-gray-lighter:focus{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.md\:focus\:border-gray-lighter-active:focus{border-color:#ebebeb}.md\:focus\:border-gray-light:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.md\:focus\:border-gray-medium:focus{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.md\:focus\:border-gray-darker:focus{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.md\:focus\:border-gray-darker-active:focus{border-color:#14a5c2}.md\:focus\:border-api-default:focus{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.md\:focus\:border-gray-xxl:focus{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.md\:focus\:border-line-even:focus{border-color:#f3f6f7}.md\:focus\:border-DEFAULT:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.md\:border-opacity-0{--border-opacity:0}.md\:border-opacity-25{--border-opacity:0.25}.md\:border-opacity-50{--border-opacity:0.5}.md\:border-opacity-75{--border-opacity:0.75}.md\:border-opacity-100{--border-opacity:1}.md\:hover\:border-opacity-0:hover{--border-opacity:0}.md\:hover\:border-opacity-25:hover{--border-opacity:0.25}.md\:hover\:border-opacity-50:hover{--border-opacity:0.5}.md\:hover\:border-opacity-75:hover{--border-opacity:0.75}.md\:hover\:border-opacity-100:hover{--border-opacity:1}.md\:focus\:border-opacity-0:focus{--border-opacity:0}.md\:focus\:border-opacity-25:focus{--border-opacity:0.25}.md\:focus\:border-opacity-50:focus{--border-opacity:0.5}.md\:focus\:border-opacity-75:focus{--border-opacity:0.75}.md\:focus\:border-opacity-100:focus{--border-opacity:1}.md\:rounded-none{border-radius:0}.md\:rounded-sm{border-radius:.125rem}.md\:rounded{border-radius:.25rem}.md\:rounded-md{border-radius:.375rem}.md\:rounded-lg{border-radius:.5rem}.md\:rounded-xl{border-radius:.75rem}.md\:rounded-2xl{border-radius:1rem}.md\:rounded-3xl{border-radius:1.5rem}.md\:rounded-full{border-radius:100%}.md\:rounded-xs{border-radius:.15rem}.md\:rounded-small{border-radius:.3125rem}.md\:rounded-DEFAULT{border-radius:.5rem}.md\:rounded-medium{border-radius:1rem}.md\:rounded-large{border-radius:2rem}.md\:rounded-half{border-radius:50%}.md\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.md\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.md\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.md\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.md\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.md\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.md\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.md\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.md\:rounded-t{border-top-left-radius:.25rem}.md\:rounded-r,.md\:rounded-t{border-top-right-radius:.25rem}.md\:rounded-b,.md\:rounded-r{border-bottom-right-radius:.25rem}.md\:rounded-b,.md\:rounded-l{border-bottom-left-radius:.25rem}.md\:rounded-l{border-top-left-radius:.25rem}.md\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.md\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.md\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.md\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.md\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.md\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.md\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.md\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.md\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.md\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.md\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.md\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.md\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.md\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.md\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.md\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.md\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.md\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.md\:rounded-t-full{border-top-left-radius:100%;border-top-right-radius:100%}.md\:rounded-r-full{border-top-right-radius:100%;border-bottom-right-radius:100%}.md\:rounded-b-full{border-bottom-right-radius:100%;border-bottom-left-radius:100%}.md\:rounded-l-full{border-top-left-radius:100%;border-bottom-left-radius:100%}.md\:rounded-t-xs{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.md\:rounded-r-xs{border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.md\:rounded-b-xs{border-bottom-right-radius:.15rem;border-bottom-left-radius:.15rem}.md\:rounded-l-xs{border-top-left-radius:.15rem;border-bottom-left-radius:.15rem}.md\:rounded-t-small{border-top-left-radius:.3125rem;border-top-right-radius:.3125rem}.md\:rounded-r-small{border-top-right-radius:.3125rem;border-bottom-right-radius:.3125rem}.md\:rounded-b-small{border-bottom-right-radius:.3125rem;border-bottom-left-radius:.3125rem}.md\:rounded-l-small{border-top-left-radius:.3125rem;border-bottom-left-radius:.3125rem}.md\:rounded-t-DEFAULT{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.md\:rounded-r-DEFAULT{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.md\:rounded-b-DEFAULT{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-l-DEFAULT{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-t-medium{border-top-left-radius:1rem;border-top-right-radius:1rem}.md\:rounded-r-medium{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.md\:rounded-b-medium{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.md\:rounded-l-medium{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.md\:rounded-t-large{border-top-left-radius:2rem;border-top-right-radius:2rem}.md\:rounded-r-large{border-top-right-radius:2rem;border-bottom-right-radius:2rem}.md\:rounded-b-large{border-bottom-right-radius:2rem;border-bottom-left-radius:2rem}.md\:rounded-l-large{border-top-left-radius:2rem;border-bottom-left-radius:2rem}.md\:rounded-t-half{border-top-left-radius:50%;border-top-right-radius:50%}.md\:rounded-r-half{border-top-right-radius:50%;border-bottom-right-radius:50%}.md\:rounded-b-half{border-bottom-right-radius:50%;border-bottom-left-radius:50%}.md\:rounded-l-half{border-top-left-radius:50%;border-bottom-left-radius:50%}.md\:rounded-tl-none{border-top-left-radius:0}.md\:rounded-tr-none{border-top-right-radius:0}.md\:rounded-br-none{border-bottom-right-radius:0}.md\:rounded-bl-none{border-bottom-left-radius:0}.md\:rounded-tl-sm{border-top-left-radius:.125rem}.md\:rounded-tr-sm{border-top-right-radius:.125rem}.md\:rounded-br-sm{border-bottom-right-radius:.125rem}.md\:rounded-bl-sm{border-bottom-left-radius:.125rem}.md\:rounded-tl{border-top-left-radius:.25rem}.md\:rounded-tr{border-top-right-radius:.25rem}.md\:rounded-br{border-bottom-right-radius:.25rem}.md\:rounded-bl{border-bottom-left-radius:.25rem}.md\:rounded-tl-md{border-top-left-radius:.375rem}.md\:rounded-tr-md{border-top-right-radius:.375rem}.md\:rounded-br-md{border-bottom-right-radius:.375rem}.md\:rounded-bl-md{border-bottom-left-radius:.375rem}.md\:rounded-tl-lg{border-top-left-radius:.5rem}.md\:rounded-tr-lg{border-top-right-radius:.5rem}.md\:rounded-br-lg{border-bottom-right-radius:.5rem}.md\:rounded-bl-lg{border-bottom-left-radius:.5rem}.md\:rounded-tl-xl{border-top-left-radius:.75rem}.md\:rounded-tr-xl{border-top-right-radius:.75rem}.md\:rounded-br-xl{border-bottom-right-radius:.75rem}.md\:rounded-bl-xl{border-bottom-left-radius:.75rem}.md\:rounded-tl-2xl{border-top-left-radius:1rem}.md\:rounded-tr-2xl{border-top-right-radius:1rem}.md\:rounded-br-2xl{border-bottom-right-radius:1rem}.md\:rounded-bl-2xl{border-bottom-left-radius:1rem}.md\:rounded-tl-3xl{border-top-left-radius:1.5rem}.md\:rounded-tr-3xl{border-top-right-radius:1.5rem}.md\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.md\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.md\:rounded-tl-full{border-top-left-radius:100%}.md\:rounded-tr-full{border-top-right-radius:100%}.md\:rounded-br-full{border-bottom-right-radius:100%}.md\:rounded-bl-full{border-bottom-left-radius:100%}.md\:rounded-tl-xs{border-top-left-radius:.15rem}.md\:rounded-tr-xs{border-top-right-radius:.15rem}.md\:rounded-br-xs{border-bottom-right-radius:.15rem}.md\:rounded-bl-xs{border-bottom-left-radius:.15rem}.md\:rounded-tl-small{border-top-left-radius:.3125rem}.md\:rounded-tr-small{border-top-right-radius:.3125rem}.md\:rounded-br-small{border-bottom-right-radius:.3125rem}.md\:rounded-bl-small{border-bottom-left-radius:.3125rem}.md\:rounded-tl-DEFAULT{border-top-left-radius:.5rem}.md\:rounded-tr-DEFAULT{border-top-right-radius:.5rem}.md\:rounded-br-DEFAULT{border-bottom-right-radius:.5rem}.md\:rounded-bl-DEFAULT{border-bottom-left-radius:.5rem}.md\:rounded-tl-medium{border-top-left-radius:1rem}.md\:rounded-tr-medium{border-top-right-radius:1rem}.md\:rounded-br-medium{border-bottom-right-radius:1rem}.md\:rounded-bl-medium{border-bottom-left-radius:1rem}.md\:rounded-tl-large{border-top-left-radius:2rem}.md\:rounded-tr-large{border-top-right-radius:2rem}.md\:rounded-br-large{border-bottom-right-radius:2rem}.md\:rounded-bl-large{border-bottom-left-radius:2rem}.md\:rounded-tl-half{border-top-left-radius:50%}.md\:rounded-tr-half{border-top-right-radius:50%}.md\:rounded-br-half{border-bottom-right-radius:50%}.md\:rounded-bl-half{border-bottom-left-radius:50%}.md\:border-solid{border-style:solid}.md\:border-dashed{border-style:dashed}.md\:border-dotted{border-style:dotted}.md\:border-double{border-style:double}.md\:border-none{border-style:none}.md\:border-0{border-width:0}.md\:border-1{border-width:1px}.md\:border-2{border-width:2px}.md\:border-4{border-width:4px}.md\:border-5{border-width:5px}.md\:border-8{border-width:8px}.md\:border,.md\:border-DEFAULT{border-width:1px}.md\:border-t-0{border-top-width:0}.md\:border-r-0{border-right-width:0}.md\:border-b-0{border-bottom-width:0}.md\:border-l-0{border-left-width:0}.md\:border-t-1{border-top-width:1px}.md\:border-r-1{border-right-width:1px}.md\:border-b-1{border-bottom-width:1px}.md\:border-l-1{border-left-width:1px}.md\:border-t-2{border-top-width:2px}.md\:border-r-2{border-right-width:2px}.md\:border-b-2{border-bottom-width:2px}.md\:border-l-2{border-left-width:2px}.md\:border-t-4{border-top-width:4px}.md\:border-r-4{border-right-width:4px}.md\:border-b-4{border-bottom-width:4px}.md\:border-l-4{border-left-width:4px}.md\:border-t-5{border-top-width:5px}.md\:border-r-5{border-right-width:5px}.md\:border-b-5{border-bottom-width:5px}.md\:border-l-5{border-left-width:5px}.md\:border-t-8{border-top-width:8px}.md\:border-r-8{border-right-width:8px}.md\:border-b-8{border-bottom-width:8px}.md\:border-l-8{border-left-width:8px}.md\:border-t{border-top-width:1px}.md\:border-r{border-right-width:1px}.md\:border-b{border-bottom-width:1px}.md\:border-l{border-left-width:1px}.md\:border-t-DEFAULT{border-top-width:1px}.md\:border-r-DEFAULT{border-right-width:1px}.md\:border-b-DEFAULT{border-bottom-width:1px}.md\:border-l-DEFAULT{border-left-width:1px}.md\:box-border{box-sizing:border-box}.md\:box-content{box-sizing:content-box}.md\:cursor-auto{cursor:auto}.md\:cursor-default{cursor:default}.md\:cursor-pointer{cursor:pointer}.md\:cursor-wait{cursor:wait}.md\:cursor-text{cursor:text}.md\:cursor-move{cursor:move}.md\:cursor-not-allowed{cursor:not-allowed}.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:table{display:table}.md\:table-caption{display:table-caption}.md\:table-cell{display:table-cell}.md\:table-column{display:table-column}.md\:table-column-group{display:table-column-group}.md\:table-footer-group{display:table-footer-group}.md\:table-header-group{display:table-header-group}.md\:table-row-group{display:table-row-group}.md\:table-row{display:table-row}.md\:flow-root{display:flow-root}.md\:grid{display:grid}.md\:inline-grid{display:inline-grid}.md\:contents{display:contents}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:flex-col{flex-direction:column}.md\:flex-col-reverse{flex-direction:column-reverse}.md\:flex-wrap{flex-wrap:wrap}.md\:flex-wrap-reverse{flex-wrap:wrap-reverse}.md\:flex-no-wrap{flex-wrap:nowrap}.md\:place-items-auto{place-items:auto}.md\:place-items-start{place-items:start}.md\:place-items-end{place-items:end}.md\:place-items-center{place-items:center}.md\:place-items-stretch{place-items:stretch}.md\:place-content-center{place-content:center}.md\:place-content-start{place-content:start}.md\:place-content-end{place-content:end}.md\:place-content-between{place-content:space-between}.md\:place-content-around{place-content:space-around}.md\:place-content-evenly{place-content:space-evenly}.md\:place-content-stretch{place-content:stretch}.md\:place-self-auto{place-self:auto}.md\:place-self-start{place-self:start}.md\:place-self-end{place-self:end}.md\:place-self-center{place-self:center}.md\:place-self-stretch{place-self:stretch}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:items-baseline{align-items:baseline}.md\:items-stretch{align-items:stretch}.md\:content-center{align-content:center}.md\:content-start{align-content:flex-start}.md\:content-end{align-content:flex-end}.md\:content-between{align-content:space-between}.md\:content-around{align-content:space-around}.md\:content-evenly{align-content:space-evenly}.md\:self-auto{align-self:auto}.md\:self-start{align-self:flex-start}.md\:self-end{align-self:flex-end}.md\:self-center{align-self:center}.md\:self-stretch{align-self:stretch}.md\:justify-items-auto{justify-items:auto}.md\:justify-items-start{justify-items:start}.md\:justify-items-end{justify-items:end}.md\:justify-items-center{justify-items:center}.md\:justify-items-stretch{justify-items:stretch}.md\:justify-start{justify-content:flex-start}.md\:justify-end{justify-content:flex-end}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:justify-around{justify-content:space-around}.md\:justify-evenly{justify-content:space-evenly}.md\:justify-self-auto{justify-self:auto}.md\:justify-self-start{justify-self:start}.md\:justify-self-end{justify-self:end}.md\:justify-self-center{justify-self:center}.md\:justify-self-stretch{justify-self:stretch}.md\:flex-1{flex:1 1 0%}.md\:flex-2{flex:2 2 0%}.md\:flex-3{flex:3 3 0%}.md\:flex-auto{flex:1 1 auto}.md\:flex-initial{flex:0 1 auto}.md\:flex-none{flex:none}.md\:flex-grow-0{flex-grow:0}.md\:flex-grow{flex-grow:1}.md\:flex-shrink-0{flex-shrink:0}.md\:flex-shrink{flex-shrink:1}.md\:order-1{order:1}.md\:order-2{order:2}.md\:order-3{order:3}.md\:order-4{order:4}.md\:order-5{order:5}.md\:order-6{order:6}.md\:order-7{order:7}.md\:order-8{order:8}.md\:order-9{order:9}.md\:order-10{order:10}.md\:order-11{order:11}.md\:order-12{order:12}.md\:order-first{order:-9999}.md\:order-last{order:9999}.md\:order-none{order:0}.md\:float-right{float:right}.md\:float-left{float:left}.md\:float-none{float:none}.md\:clearfix:after{content:"";display:table;clear:both}.md\:clear-left{clear:left}.md\:clear-right{clear:right}.md\:clear-both{clear:both}.md\:clear-none{clear:none}.md\:font-brand,.md\:font-sans,.md\:font-serif{font-family:Source Sans Pro,sans-serif}.md\:font-inconsolata{font-family:Inconsolata}.md\:font-source{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.md\:font-hairline{font-weight:100}.md\:font-thin{font-weight:200}.md\:font-light{font-weight:300}.md\:font-normal{font-weight:400}.md\:font-medium{font-weight:500}.md\:font-semibold{font-weight:600}.md\:font-bold{font-weight:700}.md\:font-extrabold{font-weight:800}.md\:font-black{font-weight:900}.md\:hover\:font-hairline:hover{font-weight:100}.md\:hover\:font-thin:hover{font-weight:200}.md\:hover\:font-light:hover{font-weight:300}.md\:hover\:font-normal:hover{font-weight:400}.md\:hover\:font-medium:hover{font-weight:500}.md\:hover\:font-semibold:hover{font-weight:600}.md\:hover\:font-bold:hover{font-weight:700}.md\:hover\:font-extrabold:hover{font-weight:800}.md\:hover\:font-black:hover{font-weight:900}.md\:focus\:font-hairline:focus{font-weight:100}.md\:focus\:font-thin:focus{font-weight:200}.md\:focus\:font-light:focus{font-weight:300}.md\:focus\:font-normal:focus{font-weight:400}.md\:focus\:font-medium:focus{font-weight:500}.md\:focus\:font-semibold:focus{font-weight:600}.md\:focus\:font-bold:focus{font-weight:700}.md\:focus\:font-extrabold:focus{font-weight:800}.md\:focus\:font-black:focus{font-weight:900}.md\:h-0{height:0}.md\:h-1{height:.25rem}.md\:h-2{height:.5rem}.md\:h-3{height:.75rem}.md\:h-4{height:1rem}.md\:h-5{height:1.25rem}.md\:h-6{height:1.5rem}.md\:h-7{height:1.75rem}.md\:h-8{height:2rem}.md\:h-9{height:2.25rem}.md\:h-10{height:2.5rem}.md\:h-11{height:2.75rem}.md\:h-12{height:3rem}.md\:h-15{height:3.75rem}.md\:h-16{height:4rem}.md\:h-20{height:5rem}.md\:h-22{height:5.5rem}.md\:h-24{height:6rem}.md\:h-25{height:6.25rem}.md\:h-26{height:6.5rem}.md\:h-28{height:8rem}.md\:h-30{height:8.5rem}.md\:h-32{height:9rem}.md\:h-40{height:10rem}.md\:h-48{height:12rem}.md\:h-52{height:13rem}.md\:h-56{height:14rem}.md\:h-60{height:15rem}.md\:h-64{height:16rem}.md\:h-68{height:17rem}.md\:h-auto{height:auto}.md\:h-px{height:1px}.md\:h-0\.5{height:.125rem}.md\:h-1\.5{height:.375rem}.md\:h-2\.5{height:.625rem}.md\:h-7\.5{height:1.875rem}.md\:h-full{height:100%}.md\:h-screen{height:100vh}.md\:text-micro{font-size:.5rem}.md\:text-xxs{font-size:.625rem}.md\:text-xs{font-size:.75rem}.md\:text-sm{font-size:.875rem}.md\:text-base{font-size:1rem}.md\:text-md{font-size:1.125rem}.md\:text-lg{font-size:1.25rem}.md\:text-xl{font-size:1.5rem}.md\:text-2xl{font-size:1.75rem}.md\:text-3xl{font-size:2rem}.md\:text-4xl{font-size:2.25rem}.md\:text-5xl{font-size:2.75rem}.md\:text-7xl{font-size:3.75rem}.md\:text-11xl{font-size:4.75rem}.md\:leading-3{line-height:.75rem}.md\:leading-4{line-height:1rem}.md\:leading-5{line-height:1.25rem}.md\:leading-6{line-height:1.5rem}.md\:leading-7{line-height:1.75rem}.md\:leading-8{line-height:2rem}.md\:leading-9{line-height:2.25rem}.md\:leading-10{line-height:2.5rem}.md\:leading-none{line-height:1}.md\:leading-tight{line-height:1.25}.md\:leading-snug{line-height:1.375}.md\:leading-normal{line-height:1.5}.md\:leading-relaxed{line-height:1.625}.md\:leading-loose{line-height:2}.md\:list-inside{list-style-position:inside}.md\:list-outside{list-style-position:outside}.md\:list-none{list-style-type:none}.md\:list-disc{list-style-type:disc}.md\:list-decimal{list-style-type:decimal}.md\:m-0{margin:0}.md\:m-1{margin:.25rem}.md\:m-2{margin:.5rem}.md\:m-3{margin:.75rem}.md\:m-4{margin:1rem}.md\:m-5{margin:1.25rem}.md\:m-6{margin:1.5rem}.md\:m-7{margin:1.75rem}.md\:m-8{margin:2rem}.md\:m-9{margin:2.25rem}.md\:m-10{margin:2.5rem}.md\:m-11{margin:2.75rem}.md\:m-12{margin:3rem}.md\:m-15{margin:3.75rem}.md\:m-16{margin:4rem}.md\:m-20{margin:5rem}.md\:m-22{margin:5.5rem}.md\:m-24{margin:6rem}.md\:m-25{margin:6.25rem}.md\:m-26{margin:6.5rem}.md\:m-28{margin:8rem}.md\:m-30{margin:8.5rem}.md\:m-32{margin:9rem}.md\:m-40{margin:10rem}.md\:m-48{margin:12rem}.md\:m-52{margin:13rem}.md\:m-56{margin:14rem}.md\:m-60{margin:15rem}.md\:m-64{margin:16rem}.md\:m-68{margin:17rem}.md\:m-px{margin:1px}.md\:-m-px{margin:-1px}.md\:-m-2px{margin:-2px}.md\:m-auto{margin:auto}.md\:m-0\.5{margin:.125rem}.md\:m-1\.5{margin:.375rem}.md\:m-2\.5{margin:.625rem}.md\:m-7\.5{margin:1.875rem}.md\:-m-1{margin:-.25rem}.md\:-m-2{margin:-.5rem}.md\:-m-3{margin:-.75rem}.md\:-m-4{margin:-1rem}.md\:-m-5{margin:-1.25rem}.md\:-m-6{margin:-1.5rem}.md\:-m-7{margin:-1.75rem}.md\:-m-8{margin:-2rem}.md\:-m-9{margin:-2.25rem}.md\:-m-10{margin:-2.5rem}.md\:-m-11{margin:-2.75rem}.md\:-m-12{margin:-3rem}.md\:-m-15{margin:-3.75rem}.md\:-m-16{margin:-4rem}.md\:-m-20{margin:-5rem}.md\:-m-22{margin:-5.5rem}.md\:-m-24{margin:-6rem}.md\:-m-25{margin:-6.25rem}.md\:-m-26{margin:-6.5rem}.md\:-m-28{margin:-8rem}.md\:-m-30{margin:-8.5rem}.md\:-m-32{margin:-9rem}.md\:-m-40{margin:-10rem}.md\:-m-48{margin:-12rem}.md\:-m-52{margin:-13rem}.md\:-m-56{margin:-14rem}.md\:-m-60{margin:-15rem}.md\:-m-64{margin:-16rem}.md\:-m-68{margin:-17rem}.md\:-m-0\.5{margin:-.125rem}.md\:-m-1\.5{margin:-.375rem}.md\:-m-2\.5{margin:-.625rem}.md\:-m-7\.5{margin:-1.875rem}.md\:my-0{margin-top:0;margin-bottom:0}.md\:mx-0{margin-left:0;margin-right:0}.md\:my-1{margin-top:.25rem;margin-bottom:.25rem}.md\:mx-1{margin-left:.25rem;margin-right:.25rem}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mx-2{margin-left:.5rem;margin-right:.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mx-3{margin-left:.75rem;margin-right:.75rem}.md\:my-4{margin-top:1rem;margin-bottom:1rem}.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.md\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.md\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-7{margin-top:1.75rem;margin-bottom:1.75rem}.md\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.md\:my-8{margin-top:2rem;margin-bottom:2rem}.md\:mx-8{margin-left:2rem;margin-right:2rem}.md\:my-9{margin-top:2.25rem;margin-bottom:2.25rem}.md\:mx-9{margin-left:2.25rem;margin-right:2.25rem}.md\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.md\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.md\:my-11{margin-top:2.75rem;margin-bottom:2.75rem}.md\:mx-11{margin-left:2.75rem;margin-right:2.75rem}.md\:my-12{margin-top:3rem;margin-bottom:3rem}.md\:mx-12{margin-left:3rem;margin-right:3rem}.md\:my-15{margin-top:3.75rem;margin-bottom:3.75rem}.md\:mx-15{margin-left:3.75rem;margin-right:3.75rem}.md\:my-16{margin-top:4rem;margin-bottom:4rem}.md\:mx-16{margin-left:4rem;margin-right:4rem}.md\:my-20{margin-top:5rem;margin-bottom:5rem}.md\:mx-20{margin-left:5rem;margin-right:5rem}.md\:my-22{margin-top:5.5rem;margin-bottom:5.5rem}.md\:mx-22{margin-left:5.5rem;margin-right:5.5rem}.md\:my-24{margin-top:6rem;margin-bottom:6rem}.md\:mx-24{margin-left:6rem;margin-right:6rem}.md\:my-25{margin-top:6.25rem;margin-bottom:6.25rem}.md\:mx-25{margin-left:6.25rem;margin-right:6.25rem}.md\:my-26{margin-top:6.5rem;margin-bottom:6.5rem}.md\:mx-26{margin-left:6.5rem;margin-right:6.5rem}.md\:my-28{margin-top:8rem;margin-bottom:8rem}.md\:mx-28{margin-left:8rem;margin-right:8rem}.md\:my-30{margin-top:8.5rem;margin-bottom:8.5rem}.md\:mx-30{margin-left:8.5rem;margin-right:8.5rem}.md\:my-32{margin-top:9rem;margin-bottom:9rem}.md\:mx-32{margin-left:9rem;margin-right:9rem}.md\:my-40{margin-top:10rem;margin-bottom:10rem}.md\:mx-40{margin-left:10rem;margin-right:10rem}.md\:my-48{margin-top:12rem;margin-bottom:12rem}.md\:mx-48{margin-left:12rem;margin-right:12rem}.md\:my-52{margin-top:13rem;margin-bottom:13rem}.md\:mx-52{margin-left:13rem;margin-right:13rem}.md\:my-56{margin-top:14rem;margin-bottom:14rem}.md\:mx-56{margin-left:14rem;margin-right:14rem}.md\:my-60{margin-top:15rem;margin-bottom:15rem}.md\:mx-60{margin-left:15rem;margin-right:15rem}.md\:my-64{margin-top:16rem;margin-bottom:16rem}.md\:mx-64{margin-left:16rem;margin-right:16rem}.md\:my-68{margin-top:17rem;margin-bottom:17rem}.md\:mx-68{margin-left:17rem;margin-right:17rem}.md\:my-px{margin-top:1px;margin-bottom:1px}.md\:mx-px{margin-left:1px;margin-right:1px}.md\:-my-px{margin-top:-1px;margin-bottom:-1px}.md\:-mx-px{margin-left:-1px;margin-right:-1px}.md\:-my-2px{margin-top:-2px;margin-bottom:-2px}.md\:-mx-2px{margin-left:-2px;margin-right:-2px}.md\:my-auto{margin-top:auto;margin-bottom:auto}.md\:mx-auto{margin-left:auto;margin-right:auto}.md\:my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.md\:mx-0\.5{margin-left:.125rem;margin-right:.125rem}.md\:my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.md\:mx-1\.5{margin-left:.375rem;margin-right:.375rem}.md\:my-2\.5{margin-top:.625rem;margin-bottom:.625rem}.md\:mx-2\.5{margin-left:.625rem;margin-right:.625rem}.md\:my-7\.5{margin-top:1.875rem;margin-bottom:1.875rem}.md\:mx-7\.5{margin-left:1.875rem;margin-right:1.875rem}.md\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.md\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.md\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.md\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.md\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.md\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.md\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.md\:-mx-4{margin-left:-1rem;margin-right:-1rem}.md\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.md\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.md\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.md\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.md\:-my-7{margin-top:-1.75rem;margin-bottom:-1.75rem}.md\:-mx-7{margin-left:-1.75rem;margin-right:-1.75rem}.md\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.md\:-mx-8{margin-left:-2rem;margin-right:-2rem}.md\:-my-9{margin-top:-2.25rem;margin-bottom:-2.25rem}.md\:-mx-9{margin-left:-2.25rem;margin-right:-2.25rem}.md\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.md\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.md\:-my-11{margin-top:-2.75rem;margin-bottom:-2.75rem}.md\:-mx-11{margin-left:-2.75rem;margin-right:-2.75rem}.md\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.md\:-mx-12{margin-left:-3rem;margin-right:-3rem}.md\:-my-15{margin-top:-3.75rem;margin-bottom:-3.75rem}.md\:-mx-15{margin-left:-3.75rem;margin-right:-3.75rem}.md\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.md\:-mx-16{margin-left:-4rem;margin-right:-4rem}.md\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.md\:-mx-20{margin-left:-5rem;margin-right:-5rem}.md\:-my-22{margin-top:-5.5rem;margin-bottom:-5.5rem}.md\:-mx-22{margin-left:-5.5rem;margin-right:-5.5rem}.md\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.md\:-mx-24{margin-left:-6rem;margin-right:-6rem}.md\:-my-25{margin-top:-6.25rem;margin-bottom:-6.25rem}.md\:-mx-25{margin-left:-6.25rem;margin-right:-6.25rem}.md\:-my-26{margin-top:-6.5rem;margin-bottom:-6.5rem}.md\:-mx-26{margin-left:-6.5rem;margin-right:-6.5rem}.md\:-my-28{margin-top:-8rem;margin-bottom:-8rem}.md\:-mx-28{margin-left:-8rem;margin-right:-8rem}.md\:-my-30{margin-top:-8.5rem;margin-bottom:-8.5rem}.md\:-mx-30{margin-left:-8.5rem;margin-right:-8.5rem}.md\:-my-32{margin-top:-9rem;margin-bottom:-9rem}.md\:-mx-32{margin-left:-9rem;margin-right:-9rem}.md\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.md\:-mx-40{margin-left:-10rem;margin-right:-10rem}.md\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.md\:-mx-48{margin-left:-12rem;margin-right:-12rem}.md\:-my-52{margin-top:-13rem;margin-bottom:-13rem}.md\:-mx-52{margin-left:-13rem;margin-right:-13rem}.md\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.md\:-mx-56{margin-left:-14rem;margin-right:-14rem}.md\:-my-60{margin-top:-15rem;margin-bottom:-15rem}.md\:-mx-60{margin-left:-15rem;margin-right:-15rem}.md\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.md\:-mx-64{margin-left:-16rem;margin-right:-16rem}.md\:-my-68{margin-top:-17rem;margin-bottom:-17rem}.md\:-mx-68{margin-left:-17rem;margin-right:-17rem}.md\:-my-0\.5{margin-top:-.125rem;margin-bottom:-.125rem}.md\:-mx-0\.5{margin-left:-.125rem;margin-right:-.125rem}.md\:-my-1\.5{margin-top:-.375rem;margin-bottom:-.375rem}.md\:-mx-1\.5{margin-left:-.375rem;margin-right:-.375rem}.md\:-my-2\.5{margin-top:-.625rem;margin-bottom:-.625rem}.md\:-mx-2\.5{margin-left:-.625rem;margin-right:-.625rem}.md\:-my-7\.5{margin-top:-1.875rem;margin-bottom:-1.875rem}.md\:-mx-7\.5{margin-left:-1.875rem;margin-right:-1.875rem}.md\:mt-0{margin-top:0}.md\:mr-0{margin-right:0}.md\:mb-0{margin-bottom:0}.md\:ml-0{margin-left:0}.md\:mt-1{margin-top:.25rem}.md\:mr-1{margin-right:.25rem}.md\:mb-1{margin-bottom:.25rem}.md\:ml-1{margin-left:.25rem}.md\:mt-2{margin-top:.5rem}.md\:mr-2{margin-right:.5rem}.md\:mb-2{margin-bottom:.5rem}.md\:ml-2{margin-left:.5rem}.md\:mt-3{margin-top:.75rem}.md\:mr-3{margin-right:.75rem}.md\:mb-3{margin-bottom:.75rem}.md\:ml-3{margin-left:.75rem}.md\:mt-4{margin-top:1rem}.md\:mr-4{margin-right:1rem}.md\:mb-4{margin-bottom:1rem}.md\:ml-4{margin-left:1rem}.md\:mt-5{margin-top:1.25rem}.md\:mr-5{margin-right:1.25rem}.md\:mb-5{margin-bottom:1.25rem}.md\:ml-5{margin-left:1.25rem}.md\:mt-6{margin-top:1.5rem}.md\:mr-6{margin-right:1.5rem}.md\:mb-6{margin-bottom:1.5rem}.md\:ml-6{margin-left:1.5rem}.md\:mt-7{margin-top:1.75rem}.md\:mr-7{margin-right:1.75rem}.md\:mb-7{margin-bottom:1.75rem}.md\:ml-7{margin-left:1.75rem}.md\:mt-8{margin-top:2rem}.md\:mr-8{margin-right:2rem}.md\:mb-8{margin-bottom:2rem}.md\:ml-8{margin-left:2rem}.md\:mt-9{margin-top:2.25rem}.md\:mr-9{margin-right:2.25rem}.md\:mb-9{margin-bottom:2.25rem}.md\:ml-9{margin-left:2.25rem}.md\:mt-10{margin-top:2.5rem}.md\:mr-10{margin-right:2.5rem}.md\:mb-10{margin-bottom:2.5rem}.md\:ml-10{margin-left:2.5rem}.md\:mt-11{margin-top:2.75rem}.md\:mr-11{margin-right:2.75rem}.md\:mb-11{margin-bottom:2.75rem}.md\:ml-11{margin-left:2.75rem}.md\:mt-12{margin-top:3rem}.md\:mr-12{margin-right:3rem}.md\:mb-12{margin-bottom:3rem}.md\:ml-12{margin-left:3rem}.md\:mt-15{margin-top:3.75rem}.md\:mr-15{margin-right:3.75rem}.md\:mb-15{margin-bottom:3.75rem}.md\:ml-15{margin-left:3.75rem}.md\:mt-16{margin-top:4rem}.md\:mr-16{margin-right:4rem}.md\:mb-16{margin-bottom:4rem}.md\:ml-16{margin-left:4rem}.md\:mt-20{margin-top:5rem}.md\:mr-20{margin-right:5rem}.md\:mb-20{margin-bottom:5rem}.md\:ml-20{margin-left:5rem}.md\:mt-22{margin-top:5.5rem}.md\:mr-22{margin-right:5.5rem}.md\:mb-22{margin-bottom:5.5rem}.md\:ml-22{margin-left:5.5rem}.md\:mt-24{margin-top:6rem}.md\:mr-24{margin-right:6rem}.md\:mb-24{margin-bottom:6rem}.md\:ml-24{margin-left:6rem}.md\:mt-25{margin-top:6.25rem}.md\:mr-25{margin-right:6.25rem}.md\:mb-25{margin-bottom:6.25rem}.md\:ml-25{margin-left:6.25rem}.md\:mt-26{margin-top:6.5rem}.md\:mr-26{margin-right:6.5rem}.md\:mb-26{margin-bottom:6.5rem}.md\:ml-26{margin-left:6.5rem}.md\:mt-28{margin-top:8rem}.md\:mr-28{margin-right:8rem}.md\:mb-28{margin-bottom:8rem}.md\:ml-28{margin-left:8rem}.md\:mt-30{margin-top:8.5rem}.md\:mr-30{margin-right:8.5rem}.md\:mb-30{margin-bottom:8.5rem}.md\:ml-30{margin-left:8.5rem}.md\:mt-32{margin-top:9rem}.md\:mr-32{margin-right:9rem}.md\:mb-32{margin-bottom:9rem}.md\:ml-32{margin-left:9rem}.md\:mt-40{margin-top:10rem}.md\:mr-40{margin-right:10rem}.md\:mb-40{margin-bottom:10rem}.md\:ml-40{margin-left:10rem}.md\:mt-48{margin-top:12rem}.md\:mr-48{margin-right:12rem}.md\:mb-48{margin-bottom:12rem}.md\:ml-48{margin-left:12rem}.md\:mt-52{margin-top:13rem}.md\:mr-52{margin-right:13rem}.md\:mb-52{margin-bottom:13rem}.md\:ml-52{margin-left:13rem}.md\:mt-56{margin-top:14rem}.md\:mr-56{margin-right:14rem}.md\:mb-56{margin-bottom:14rem}.md\:ml-56{margin-left:14rem}.md\:mt-60{margin-top:15rem}.md\:mr-60{margin-right:15rem}.md\:mb-60{margin-bottom:15rem}.md\:ml-60{margin-left:15rem}.md\:mt-64{margin-top:16rem}.md\:mr-64{margin-right:16rem}.md\:mb-64{margin-bottom:16rem}.md\:ml-64{margin-left:16rem}.md\:mt-68{margin-top:17rem}.md\:mr-68{margin-right:17rem}.md\:mb-68{margin-bottom:17rem}.md\:ml-68{margin-left:17rem}.md\:mt-px{margin-top:1px}.md\:mr-px{margin-right:1px}.md\:mb-px{margin-bottom:1px}.md\:ml-px{margin-left:1px}.md\:-mt-px{margin-top:-1px}.md\:-mr-px{margin-right:-1px}.md\:-mb-px{margin-bottom:-1px}.md\:-ml-px{margin-left:-1px}.md\:-mt-2px{margin-top:-2px}.md\:-mr-2px{margin-right:-2px}.md\:-mb-2px{margin-bottom:-2px}.md\:-ml-2px{margin-left:-2px}.md\:mt-auto{margin-top:auto}.md\:mr-auto{margin-right:auto}.md\:mb-auto{margin-bottom:auto}.md\:ml-auto{margin-left:auto}.md\:mt-0\.5{margin-top:.125rem}.md\:mr-0\.5{margin-right:.125rem}.md\:mb-0\.5{margin-bottom:.125rem}.md\:ml-0\.5{margin-left:.125rem}.md\:mt-1\.5{margin-top:.375rem}.md\:mr-1\.5{margin-right:.375rem}.md\:mb-1\.5{margin-bottom:.375rem}.md\:ml-1\.5{margin-left:.375rem}.md\:mt-2\.5{margin-top:.625rem}.md\:mr-2\.5{margin-right:.625rem}.md\:mb-2\.5{margin-bottom:.625rem}.md\:ml-2\.5{margin-left:.625rem}.md\:mt-7\.5{margin-top:1.875rem}.md\:mr-7\.5{margin-right:1.875rem}.md\:mb-7\.5{margin-bottom:1.875rem}.md\:ml-7\.5{margin-left:1.875rem}.md\:-mt-1{margin-top:-.25rem}.md\:-mr-1{margin-right:-.25rem}.md\:-mb-1{margin-bottom:-.25rem}.md\:-ml-1{margin-left:-.25rem}.md\:-mt-2{margin-top:-.5rem}.md\:-mr-2{margin-right:-.5rem}.md\:-mb-2{margin-bottom:-.5rem}.md\:-ml-2{margin-left:-.5rem}.md\:-mt-3{margin-top:-.75rem}.md\:-mr-3{margin-right:-.75rem}.md\:-mb-3{margin-bottom:-.75rem}.md\:-ml-3{margin-left:-.75rem}.md\:-mt-4{margin-top:-1rem}.md\:-mr-4{margin-right:-1rem}.md\:-mb-4{margin-bottom:-1rem}.md\:-ml-4{margin-left:-1rem}.md\:-mt-5{margin-top:-1.25rem}.md\:-mr-5{margin-right:-1.25rem}.md\:-mb-5{margin-bottom:-1.25rem}.md\:-ml-5{margin-left:-1.25rem}.md\:-mt-6{margin-top:-1.5rem}.md\:-mr-6{margin-right:-1.5rem}.md\:-mb-6{margin-bottom:-1.5rem}.md\:-ml-6{margin-left:-1.5rem}.md\:-mt-7{margin-top:-1.75rem}.md\:-mr-7{margin-right:-1.75rem}.md\:-mb-7{margin-bottom:-1.75rem}.md\:-ml-7{margin-left:-1.75rem}.md\:-mt-8{margin-top:-2rem}.md\:-mr-8{margin-right:-2rem}.md\:-mb-8{margin-bottom:-2rem}.md\:-ml-8{margin-left:-2rem}.md\:-mt-9{margin-top:-2.25rem}.md\:-mr-9{margin-right:-2.25rem}.md\:-mb-9{margin-bottom:-2.25rem}.md\:-ml-9{margin-left:-2.25rem}.md\:-mt-10{margin-top:-2.5rem}.md\:-mr-10{margin-right:-2.5rem}.md\:-mb-10{margin-bottom:-2.5rem}.md\:-ml-10{margin-left:-2.5rem}.md\:-mt-11{margin-top:-2.75rem}.md\:-mr-11{margin-right:-2.75rem}.md\:-mb-11{margin-bottom:-2.75rem}.md\:-ml-11{margin-left:-2.75rem}.md\:-mt-12{margin-top:-3rem}.md\:-mr-12{margin-right:-3rem}.md\:-mb-12{margin-bottom:-3rem}.md\:-ml-12{margin-left:-3rem}.md\:-mt-15{margin-top:-3.75rem}.md\:-mr-15{margin-right:-3.75rem}.md\:-mb-15{margin-bottom:-3.75rem}.md\:-ml-15{margin-left:-3.75rem}.md\:-mt-16{margin-top:-4rem}.md\:-mr-16{margin-right:-4rem}.md\:-mb-16{margin-bottom:-4rem}.md\:-ml-16{margin-left:-4rem}.md\:-mt-20{margin-top:-5rem}.md\:-mr-20{margin-right:-5rem}.md\:-mb-20{margin-bottom:-5rem}.md\:-ml-20{margin-left:-5rem}.md\:-mt-22{margin-top:-5.5rem}.md\:-mr-22{margin-right:-5.5rem}.md\:-mb-22{margin-bottom:-5.5rem}.md\:-ml-22{margin-left:-5.5rem}.md\:-mt-24{margin-top:-6rem}.md\:-mr-24{margin-right:-6rem}.md\:-mb-24{margin-bottom:-6rem}.md\:-ml-24{margin-left:-6rem}.md\:-mt-25{margin-top:-6.25rem}.md\:-mr-25{margin-right:-6.25rem}.md\:-mb-25{margin-bottom:-6.25rem}.md\:-ml-25{margin-left:-6.25rem}.md\:-mt-26{margin-top:-6.5rem}.md\:-mr-26{margin-right:-6.5rem}.md\:-mb-26{margin-bottom:-6.5rem}.md\:-ml-26{margin-left:-6.5rem}.md\:-mt-28{margin-top:-8rem}.md\:-mr-28{margin-right:-8rem}.md\:-mb-28{margin-bottom:-8rem}.md\:-ml-28{margin-left:-8rem}.md\:-mt-30{margin-top:-8.5rem}.md\:-mr-30{margin-right:-8.5rem}.md\:-mb-30{margin-bottom:-8.5rem}.md\:-ml-30{margin-left:-8.5rem}.md\:-mt-32{margin-top:-9rem}.md\:-mr-32{margin-right:-9rem}.md\:-mb-32{margin-bottom:-9rem}.md\:-ml-32{margin-left:-9rem}.md\:-mt-40{margin-top:-10rem}.md\:-mr-40{margin-right:-10rem}.md\:-mb-40{margin-bottom:-10rem}.md\:-ml-40{margin-left:-10rem}.md\:-mt-48{margin-top:-12rem}.md\:-mr-48{margin-right:-12rem}.md\:-mb-48{margin-bottom:-12rem}.md\:-ml-48{margin-left:-12rem}.md\:-mt-52{margin-top:-13rem}.md\:-mr-52{margin-right:-13rem}.md\:-mb-52{margin-bottom:-13rem}.md\:-ml-52{margin-left:-13rem}.md\:-mt-56{margin-top:-14rem}.md\:-mr-56{margin-right:-14rem}.md\:-mb-56{margin-bottom:-14rem}.md\:-ml-56{margin-left:-14rem}.md\:-mt-60{margin-top:-15rem}.md\:-mr-60{margin-right:-15rem}.md\:-mb-60{margin-bottom:-15rem}.md\:-ml-60{margin-left:-15rem}.md\:-mt-64{margin-top:-16rem}.md\:-mr-64{margin-right:-16rem}.md\:-mb-64{margin-bottom:-16rem}.md\:-ml-64{margin-left:-16rem}.md\:-mt-68{margin-top:-17rem}.md\:-mr-68{margin-right:-17rem}.md\:-mb-68{margin-bottom:-17rem}.md\:-ml-68{margin-left:-17rem}.md\:-mt-0\.5{margin-top:-.125rem}.md\:-mr-0\.5{margin-right:-.125rem}.md\:-mb-0\.5{margin-bottom:-.125rem}.md\:-ml-0\.5{margin-left:-.125rem}.md\:-mt-1\.5{margin-top:-.375rem}.md\:-mr-1\.5{margin-right:-.375rem}.md\:-mb-1\.5{margin-bottom:-.375rem}.md\:-ml-1\.5{margin-left:-.375rem}.md\:-mt-2\.5{margin-top:-.625rem}.md\:-mr-2\.5{margin-right:-.625rem}.md\:-mb-2\.5{margin-bottom:-.625rem}.md\:-ml-2\.5{margin-left:-.625rem}.md\:-mt-7\.5{margin-top:-1.875rem}.md\:-mr-7\.5{margin-right:-1.875rem}.md\:-mb-7\.5{margin-bottom:-1.875rem}.md\:-ml-7\.5{margin-left:-1.875rem}.md\:max-h-0{max-height:0}.md\:max-h-1{max-height:.25rem}.md\:max-h-2{max-height:.5rem}.md\:max-h-3{max-height:.75rem}.md\:max-h-4{max-height:1rem}.md\:max-h-5{max-height:1.25rem}.md\:max-h-6{max-height:1.5rem}.md\:max-h-7{max-height:1.75rem}.md\:max-h-8{max-height:2rem}.md\:max-h-9{max-height:2.25rem}.md\:max-h-10{max-height:2.5rem}.md\:max-h-11{max-height:2.75rem}.md\:max-h-12{max-height:3rem}.md\:max-h-15{max-height:3.75rem}.md\:max-h-16{max-height:4rem}.md\:max-h-20{max-height:5rem}.md\:max-h-22{max-height:5.5rem}.md\:max-h-24{max-height:6rem}.md\:max-h-25{max-height:6.25rem}.md\:max-h-26{max-height:6.5rem}.md\:max-h-28{max-height:8rem}.md\:max-h-30{max-height:8.5rem}.md\:max-h-32{max-height:9rem}.md\:max-h-40{max-height:10rem}.md\:max-h-48{max-height:12rem}.md\:max-h-52{max-height:13rem}.md\:max-h-56{max-height:14rem}.md\:max-h-60{max-height:15rem}.md\:max-h-64{max-height:16rem}.md\:max-h-68{max-height:17rem}.md\:max-h-px{max-height:1px}.md\:max-h-0\.5{max-height:.125rem}.md\:max-h-1\.5{max-height:.375rem}.md\:max-h-2\.5{max-height:.625rem}.md\:max-h-7\.5{max-height:1.875rem}.md\:max-h-full{max-height:100%}.md\:max-h-screen{max-height:100vh}.md\:max-w-none{max-width:none}.md\:max-w-xs{max-width:20rem}.md\:max-w-sm{max-width:30rem}.md\:max-w-md{max-width:40rem}.md\:max-w-lg{max-width:50rem}.md\:max-w-xl{max-width:60rem}.md\:max-w-2xl{max-width:70rem}.md\:max-w-3xl{max-width:80rem}.md\:max-w-4xl{max-width:90rem}.md\:max-w-5xl{max-width:100rem}.md\:max-w-6xl{max-width:72rem}.md\:max-w-full{max-width:100%}.md\:max-w-screen-sm{max-width:40.01em}.md\:max-w-screen-md{max-width:50.01em}.md\:max-w-screen-lg{max-width:64.01em}.md\:max-w-screen-xl{max-width:76.26em}.md\:max-w-1\/4{max-width:25%}.md\:max-w-1\/2{max-width:50%}.md\:max-w-3\/5{max-width:60%}.md\:max-w-4\/5{max-width:80%}.md\:max-w-9\/10{max-width:90%}.md\:max-w-site-mini{max-width:17.5rem}.md\:max-w-site-small{max-width:31.25rem}.md\:max-w-site-medium{max-width:43.75rem}.md\:max-w-site-large{max-width:56.25rem}.md\:max-w-site-xxl{max-width:90rem}.md\:max-w-site{max-width:73.75rem}.md\:max-w-screen{max-width:100vw}.md\:min-h-0{min-height:0}.md\:min-h-full{min-height:100%}.md\:min-h-screen{min-height:100vh}.md\:min-w-0{min-width:0}.md\:min-w-full{min-width:100%}.md\:min-w-min{min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content}.md\:min-w-max{min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content}.md\:min-w-site{min-width:18.75rem}.md\:min-w-input-mini{min-width:17.5rem}.md\:min-w-input-small{min-width:31.25rem}.md\:min-w-input-medium{min-width:36.3125rem}.md\:min-w-input-large{min-width:61.45rem}.md\:min-w-button-mini{min-width:5.5rem}.md\:min-w-button-small{min-width:7rem}.md\:min-w-button-medium{min-width:9.875rem}.md\:min-w-button-large{min-width:10rem}.md\:object-contain{-o-object-fit:contain;object-fit:contain}.md\:object-cover{-o-object-fit:cover;object-fit:cover}.md\:object-fill{-o-object-fit:fill;object-fit:fill}.md\:object-none{-o-object-fit:none;object-fit:none}.md\:object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.md\:object-bottom{-o-object-position:bottom;object-position:bottom}.md\:object-center{-o-object-position:center;object-position:center}.md\:object-left{-o-object-position:left;object-position:left}.md\:object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.md\:object-left-top{-o-object-position:left top;object-position:left top}.md\:object-right{-o-object-position:right;object-position:right}.md\:object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.md\:object-right-top{-o-object-position:right top;object-position:right top}.md\:object-top{-o-object-position:top;object-position:top}.md\:opacity-0{opacity:0}.md\:opacity-25{opacity:.25}.md\:opacity-50{opacity:.5}.md\:opacity-75{opacity:.75}.md\:opacity-100{opacity:1}.md\:hover\:opacity-0:hover{opacity:0}.md\:hover\:opacity-25:hover{opacity:.25}.md\:hover\:opacity-50:hover{opacity:.5}.md\:hover\:opacity-75:hover{opacity:.75}.md\:hover\:opacity-100:hover{opacity:1}.md\:focus\:opacity-0:focus{opacity:0}.md\:focus\:opacity-25:focus{opacity:.25}.md\:focus\:opacity-50:focus{opacity:.5}.md\:focus\:opacity-75:focus{opacity:.75}.md\:focus\:opacity-100:focus{opacity:1}.group:hover .md\:group-hover\:opacity-0{opacity:0}.group:hover .md\:group-hover\:opacity-25{opacity:.25}.group:hover .md\:group-hover\:opacity-50{opacity:.5}.group:hover .md\:group-hover\:opacity-75{opacity:.75}.group:hover .md\:group-hover\:opacity-100{opacity:1}.md\:outline-none{outline:2px solid transparent;outline-offset:2px}.md\:outline-white{outline:2px dotted #fff;outline-offset:2px}.md\:outline-black{outline:2px dotted #000;outline-offset:2px}.md\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.md\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.md\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.md\:overflow-auto{overflow:auto}.md\:overflow-hidden{overflow:hidden}.md\:overflow-visible{overflow:visible}.md\:overflow-scroll{overflow:scroll}.md\:overflow-x-auto{overflow-x:auto}.md\:overflow-y-auto{overflow-y:auto}.md\:overflow-x-hidden{overflow-x:hidden}.md\:overflow-y-hidden{overflow-y:hidden}.md\:overflow-x-visible{overflow-x:visible}.md\:overflow-y-visible{overflow-y:visible}.md\:overflow-x-scroll{overflow-x:scroll}.md\:overflow-y-scroll{overflow-y:scroll}.md\:scrolling-touch{-webkit-overflow-scrolling:touch}.md\:scrolling-auto{-webkit-overflow-scrolling:auto}.md\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.md\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.md\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.md\:overscroll-y-auto{overscroll-behavior-y:auto}.md\:overscroll-y-contain{overscroll-behavior-y:contain}.md\:overscroll-y-none{overscroll-behavior-y:none}.md\:overscroll-x-auto{overscroll-behavior-x:auto}.md\:overscroll-x-contain{overscroll-behavior-x:contain}.md\:overscroll-x-none{overscroll-behavior-x:none}.md\:p-0{padding:0}.md\:p-1{padding:.25rem}.md\:p-2{padding:.5rem}.md\:p-3{padding:.75rem}.md\:p-4{padding:1rem}.md\:p-5{padding:1.25rem}.md\:p-6{padding:1.5rem}.md\:p-7{padding:1.75rem}.md\:p-8{padding:2rem}.md\:p-9{padding:2.25rem}.md\:p-10{padding:2.5rem}.md\:p-11{padding:2.75rem}.md\:p-12{padding:3rem}.md\:p-15{padding:3.75rem}.md\:p-16{padding:4rem}.md\:p-20{padding:5rem}.md\:p-22{padding:5.5rem}.md\:p-24{padding:6rem}.md\:p-25{padding:6.25rem}.md\:p-26{padding:6.5rem}.md\:p-28{padding:8rem}.md\:p-30{padding:8.5rem}.md\:p-32{padding:9rem}.md\:p-40{padding:10rem}.md\:p-48{padding:12rem}.md\:p-52{padding:13rem}.md\:p-56{padding:14rem}.md\:p-60{padding:15rem}.md\:p-64{padding:16rem}.md\:p-68{padding:17rem}.md\:p-px{padding:1px}.md\:p-0\.5{padding:.125rem}.md\:p-1\.5{padding:.375rem}.md\:p-2\.5{padding:.625rem}.md\:p-7\.5{padding:1.875rem}.md\:py-0{padding-top:0;padding-bottom:0}.md\:px-0{padding-left:0;padding-right:0}.md\:py-1{padding-top:.25rem;padding-bottom:.25rem}.md\:px-1{padding-left:.25rem;padding-right:.25rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:px-2{padding-left:.5rem;padding-right:.5rem}.md\:py-3{padding-top:.75rem;padding-bottom:.75rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-7{padding-top:1.75rem;padding-bottom:1.75rem}.md\:px-7{padding-left:1.75rem;padding-right:1.75rem}.md\:py-8{padding-top:2rem;padding-bottom:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-9{padding-top:2.25rem;padding-bottom:2.25rem}.md\:px-9{padding-left:2.25rem;padding-right:2.25rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:py-11{padding-top:2.75rem;padding-bottom:2.75rem}.md\:px-11{padding-left:2.75rem;padding-right:2.75rem}.md\:py-12{padding-top:3rem;padding-bottom:3rem}.md\:px-12{padding-left:3rem;padding-right:3rem}.md\:py-15{padding-top:3.75rem;padding-bottom:3.75rem}.md\:px-15{padding-left:3.75rem;padding-right:3.75rem}.md\:py-16{padding-top:4rem;padding-bottom:4rem}.md\:px-16{padding-left:4rem;padding-right:4rem}.md\:py-20{padding-top:5rem;padding-bottom:5rem}.md\:px-20{padding-left:5rem;padding-right:5rem}.md\:py-22{padding-top:5.5rem;padding-bottom:5.5rem}.md\:px-22{padding-left:5.5rem;padding-right:5.5rem}.md\:py-24{padding-top:6rem;padding-bottom:6rem}.md\:px-24{padding-left:6rem;padding-right:6rem}.md\:py-25{padding-top:6.25rem;padding-bottom:6.25rem}.md\:px-25{padding-left:6.25rem;padding-right:6.25rem}.md\:py-26{padding-top:6.5rem;padding-bottom:6.5rem}.md\:px-26{padding-left:6.5rem;padding-right:6.5rem}.md\:py-28{padding-top:8rem;padding-bottom:8rem}.md\:px-28{padding-left:8rem;padding-right:8rem}.md\:py-30{padding-top:8.5rem;padding-bottom:8.5rem}.md\:px-30{padding-left:8.5rem;padding-right:8.5rem}.md\:py-32{padding-top:9rem;padding-bottom:9rem}.md\:px-32{padding-left:9rem;padding-right:9rem}.md\:py-40{padding-top:10rem;padding-bottom:10rem}.md\:px-40{padding-left:10rem;padding-right:10rem}.md\:py-48{padding-top:12rem;padding-bottom:12rem}.md\:px-48{padding-left:12rem;padding-right:12rem}.md\:py-52{padding-top:13rem;padding-bottom:13rem}.md\:px-52{padding-left:13rem;padding-right:13rem}.md\:py-56{padding-top:14rem;padding-bottom:14rem}.md\:px-56{padding-left:14rem;padding-right:14rem}.md\:py-60{padding-top:15rem;padding-bottom:15rem}.md\:px-60{padding-left:15rem;padding-right:15rem}.md\:py-64{padding-top:16rem;padding-bottom:16rem}.md\:px-64{padding-left:16rem;padding-right:16rem}.md\:py-68{padding-top:17rem;padding-bottom:17rem}.md\:px-68{padding-left:17rem;padding-right:17rem}.md\:py-px{padding-top:1px;padding-bottom:1px}.md\:px-px{padding-left:1px;padding-right:1px}.md\:py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.md\:px-0\.5{padding-left:.125rem;padding-right:.125rem}.md\:py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.md\:px-1\.5{padding-left:.375rem;padding-right:.375rem}.md\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.md\:px-2\.5{padding-left:.625rem;padding-right:.625rem}.md\:py-7\.5{padding-top:1.875rem;padding-bottom:1.875rem}.md\:px-7\.5{padding-left:1.875rem;padding-right:1.875rem}.md\:pt-0{padding-top:0}.md\:pr-0{padding-right:0}.md\:pb-0{padding-bottom:0}.md\:pl-0{padding-left:0}.md\:pt-1{padding-top:.25rem}.md\:pr-1{padding-right:.25rem}.md\:pb-1{padding-bottom:.25rem}.md\:pl-1{padding-left:.25rem}.md\:pt-2{padding-top:.5rem}.md\:pr-2{padding-right:.5rem}.md\:pb-2{padding-bottom:.5rem}.md\:pl-2{padding-left:.5rem}.md\:pt-3{padding-top:.75rem}.md\:pr-3{padding-right:.75rem}.md\:pb-3{padding-bottom:.75rem}.md\:pl-3{padding-left:.75rem}.md\:pt-4{padding-top:1rem}.md\:pr-4{padding-right:1rem}.md\:pb-4{padding-bottom:1rem}.md\:pl-4{padding-left:1rem}.md\:pt-5{padding-top:1.25rem}.md\:pr-5{padding-right:1.25rem}.md\:pb-5{padding-bottom:1.25rem}.md\:pl-5{padding-left:1.25rem}.md\:pt-6{padding-top:1.5rem}.md\:pr-6{padding-right:1.5rem}.md\:pb-6{padding-bottom:1.5rem}.md\:pl-6{padding-left:1.5rem}.md\:pt-7{padding-top:1.75rem}.md\:pr-7{padding-right:1.75rem}.md\:pb-7{padding-bottom:1.75rem}.md\:pl-7{padding-left:1.75rem}.md\:pt-8{padding-top:2rem}.md\:pr-8{padding-right:2rem}.md\:pb-8{padding-bottom:2rem}.md\:pl-8{padding-left:2rem}.md\:pt-9{padding-top:2.25rem}.md\:pr-9{padding-right:2.25rem}.md\:pb-9{padding-bottom:2.25rem}.md\:pl-9{padding-left:2.25rem}.md\:pt-10{padding-top:2.5rem}.md\:pr-10{padding-right:2.5rem}.md\:pb-10{padding-bottom:2.5rem}.md\:pl-10{padding-left:2.5rem}.md\:pt-11{padding-top:2.75rem}.md\:pr-11{padding-right:2.75rem}.md\:pb-11{padding-bottom:2.75rem}.md\:pl-11{padding-left:2.75rem}.md\:pt-12{padding-top:3rem}.md\:pr-12{padding-right:3rem}.md\:pb-12{padding-bottom:3rem}.md\:pl-12{padding-left:3rem}.md\:pt-15{padding-top:3.75rem}.md\:pr-15{padding-right:3.75rem}.md\:pb-15{padding-bottom:3.75rem}.md\:pl-15{padding-left:3.75rem}.md\:pt-16{padding-top:4rem}.md\:pr-16{padding-right:4rem}.md\:pb-16{padding-bottom:4rem}.md\:pl-16{padding-left:4rem}.md\:pt-20{padding-top:5rem}.md\:pr-20{padding-right:5rem}.md\:pb-20{padding-bottom:5rem}.md\:pl-20{padding-left:5rem}.md\:pt-22{padding-top:5.5rem}.md\:pr-22{padding-right:5.5rem}.md\:pb-22{padding-bottom:5.5rem}.md\:pl-22{padding-left:5.5rem}.md\:pt-24{padding-top:6rem}.md\:pr-24{padding-right:6rem}.md\:pb-24{padding-bottom:6rem}.md\:pl-24{padding-left:6rem}.md\:pt-25{padding-top:6.25rem}.md\:pr-25{padding-right:6.25rem}.md\:pb-25{padding-bottom:6.25rem}.md\:pl-25{padding-left:6.25rem}.md\:pt-26{padding-top:6.5rem}.md\:pr-26{padding-right:6.5rem}.md\:pb-26{padding-bottom:6.5rem}.md\:pl-26{padding-left:6.5rem}.md\:pt-28{padding-top:8rem}.md\:pr-28{padding-right:8rem}.md\:pb-28{padding-bottom:8rem}.md\:pl-28{padding-left:8rem}.md\:pt-30{padding-top:8.5rem}.md\:pr-30{padding-right:8.5rem}.md\:pb-30{padding-bottom:8.5rem}.md\:pl-30{padding-left:8.5rem}.md\:pt-32{padding-top:9rem}.md\:pr-32{padding-right:9rem}.md\:pb-32{padding-bottom:9rem}.md\:pl-32{padding-left:9rem}.md\:pt-40{padding-top:10rem}.md\:pr-40{padding-right:10rem}.md\:pb-40{padding-bottom:10rem}.md\:pl-40{padding-left:10rem}.md\:pt-48{padding-top:12rem}.md\:pr-48{padding-right:12rem}.md\:pb-48{padding-bottom:12rem}.md\:pl-48{padding-left:12rem}.md\:pt-52{padding-top:13rem}.md\:pr-52{padding-right:13rem}.md\:pb-52{padding-bottom:13rem}.md\:pl-52{padding-left:13rem}.md\:pt-56{padding-top:14rem}.md\:pr-56{padding-right:14rem}.md\:pb-56{padding-bottom:14rem}.md\:pl-56{padding-left:14rem}.md\:pt-60{padding-top:15rem}.md\:pr-60{padding-right:15rem}.md\:pb-60{padding-bottom:15rem}.md\:pl-60{padding-left:15rem}.md\:pt-64{padding-top:16rem}.md\:pr-64{padding-right:16rem}.md\:pb-64{padding-bottom:16rem}.md\:pl-64{padding-left:16rem}.md\:pt-68{padding-top:17rem}.md\:pr-68{padding-right:17rem}.md\:pb-68{padding-bottom:17rem}.md\:pl-68{padding-left:17rem}.md\:pt-px{padding-top:1px}.md\:pr-px{padding-right:1px}.md\:pb-px{padding-bottom:1px}.md\:pl-px{padding-left:1px}.md\:pt-0\.5{padding-top:.125rem}.md\:pr-0\.5{padding-right:.125rem}.md\:pb-0\.5{padding-bottom:.125rem}.md\:pl-0\.5{padding-left:.125rem}.md\:pt-1\.5{padding-top:.375rem}.md\:pr-1\.5{padding-right:.375rem}.md\:pb-1\.5{padding-bottom:.375rem}.md\:pl-1\.5{padding-left:.375rem}.md\:pt-2\.5{padding-top:.625rem}.md\:pr-2\.5{padding-right:.625rem}.md\:pb-2\.5{padding-bottom:.625rem}.md\:pl-2\.5{padding-left:.625rem}.md\:pt-7\.5{padding-top:1.875rem}.md\:pr-7\.5{padding-right:1.875rem}.md\:pb-7\.5{padding-bottom:1.875rem}.md\:pl-7\.5{padding-left:1.875rem}.md\:placeholder-transparent::-moz-placeholder{color:transparent}.md\:placeholder-transparent:-ms-input-placeholder{color:transparent}.md\:placeholder-transparent::placeholder{color:transparent}.md\:placeholder-current::-moz-placeholder{color:currentColor}.md\:placeholder-current:-ms-input-placeholder{color:currentColor}.md\:placeholder-current::placeholder{color:currentColor}.md\:placeholder-black::-moz-placeholder{color:#000}.md\:placeholder-black:-ms-input-placeholder{color:#000}.md\:placeholder-black::placeholder{color:#000}.md\:placeholder-white::-moz-placeholder{color:#fff}.md\:placeholder-white:-ms-input-placeholder{color:#fff}.md\:placeholder-white::placeholder{color:#fff}.md\:placeholder-gray-100::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:placeholder-gray-200::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:placeholder-gray-300::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:placeholder-gray-400::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:placeholder-gray-500::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:placeholder-gray-600::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-700::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:placeholder-gray-800::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:placeholder-gray-900::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:placeholder-gray-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-DEFAULT::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-red::-moz-placeholder{color:#d64343}.md\:placeholder-red:-ms-input-placeholder{color:#d64343}.md\:placeholder-red::placeholder{color:#d64343}.md\:placeholder-orange::-moz-placeholder{color:#eb6437}.md\:placeholder-orange:-ms-input-placeholder{color:#eb6437}.md\:placeholder-orange::placeholder{color:#eb6437}.md\:placeholder-yellow::-moz-placeholder{color:#f8da30}.md\:placeholder-yellow:-ms-input-placeholder{color:#f8da30}.md\:placeholder-yellow::placeholder{color:#f8da30}.md\:placeholder-green-100::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:placeholder-green-200::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:placeholder-green-300::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:placeholder-green-400::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:placeholder-green-500::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:placeholder-green-600::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-700::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:placeholder-green-800::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:placeholder-green-900::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:placeholder-green-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-DEFAULT::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-teal-100::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:placeholder-teal-200::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:placeholder-teal-300::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:placeholder-teal-400::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:placeholder-teal-500::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:placeholder-teal-600::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-700::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:placeholder-teal-800::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:placeholder-teal-900::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:placeholder-teal-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-DEFAULT::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-blue-50::-moz-placeholder{color:#d1eaff}.md\:placeholder-blue-50:-ms-input-placeholder{color:#d1eaff}.md\:placeholder-blue-50::placeholder{color:#d1eaff}.md\:placeholder-blue-100::-moz-placeholder{color:#a8d7ff}.md\:placeholder-blue-100:-ms-input-placeholder{color:#a8d7ff}.md\:placeholder-blue-100::placeholder{color:#a8d7ff}.md\:placeholder-blue-200::-moz-placeholder{color:#80c4ff}.md\:placeholder-blue-200:-ms-input-placeholder{color:#80c4ff}.md\:placeholder-blue-200::placeholder{color:#80c4ff}.md\:placeholder-blue-300::-moz-placeholder{color:#57b0ff}.md\:placeholder-blue-300:-ms-input-placeholder{color:#57b0ff}.md\:placeholder-blue-300::placeholder{color:#57b0ff}.md\:placeholder-blue-400::-moz-placeholder{color:#2e9dff}.md\:placeholder-blue-400:-ms-input-placeholder{color:#2e9dff}.md\:placeholder-blue-400::placeholder{color:#2e9dff}.md\:placeholder-blue-500::-moz-placeholder{color:#058aff}.md\:placeholder-blue-500:-ms-input-placeholder{color:#058aff}.md\:placeholder-blue-500::placeholder{color:#058aff}.md\:placeholder-blue-600::-moz-placeholder{color:#0075db}.md\:placeholder-blue-600:-ms-input-placeholder{color:#0075db}.md\:placeholder-blue-600::placeholder{color:#0075db}.md\:placeholder-blue-700::-moz-placeholder{color:#005fb3}.md\:placeholder-blue-700:-ms-input-placeholder{color:#005fb3}.md\:placeholder-blue-700::placeholder{color:#005fb3}.md\:placeholder-blue-800::-moz-placeholder{color:#00498a}.md\:placeholder-blue-800:-ms-input-placeholder{color:#00498a}.md\:placeholder-blue-800::placeholder{color:#00498a}.md\:placeholder-blue-900::-moz-placeholder{color:#003461}.md\:placeholder-blue-900:-ms-input-placeholder{color:#003461}.md\:placeholder-blue-900::placeholder{color:#003461}.md\:placeholder-blue-DEFAULT::-moz-placeholder{color:#0075db}.md\:placeholder-blue-DEFAULT:-ms-input-placeholder{color:#0075db}.md\:placeholder-blue-DEFAULT::placeholder{color:#0075db}.md\:placeholder-blue::-moz-placeholder{color:#0075db}.md\:placeholder-blue:-ms-input-placeholder{color:#0075db}.md\:placeholder-blue::placeholder{color:#0075db}.md\:placeholder-indigo-100::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:placeholder-indigo-200::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:placeholder-indigo-300::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:placeholder-indigo-400::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:placeholder-indigo-500::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:placeholder-indigo-600::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-700::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:placeholder-indigo-800::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:placeholder-indigo-900::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:placeholder-indigo-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-DEFAULT::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-purple-100::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:placeholder-purple-200::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:placeholder-purple-300::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:placeholder-purple-400::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:placeholder-purple-500::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:placeholder-purple-600::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-700::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:placeholder-purple-800::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:placeholder-purple-900::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:placeholder-purple-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-DEFAULT::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-pink::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.md\:placeholder-pink:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.md\:placeholder-pink::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.md\:placeholder-inherit::-moz-placeholder{color:inherit}.md\:placeholder-inherit:-ms-input-placeholder{color:inherit}.md\:placeholder-inherit::placeholder{color:inherit}.md\:placeholder-amber::-moz-placeholder{color:#d78737}.md\:placeholder-amber:-ms-input-placeholder{color:#d78737}.md\:placeholder-amber::placeholder{color:#d78737}.md\:placeholder-amber-active::-moz-placeholder{color:#e3872b}.md\:placeholder-amber-active:-ms-input-placeholder{color:#e3872b}.md\:placeholder-amber-active::placeholder{color:#e3872b}.md\:placeholder-ardoise::-moz-placeholder{color:#596a82}.md\:placeholder-ardoise:-ms-input-placeholder{color:#596a82}.md\:placeholder-ardoise::placeholder{color:#596a82}.md\:placeholder-ardoise-active::-moz-placeholder{color:#476794}.md\:placeholder-ardoise-active:-ms-input-placeholder{color:#476794}.md\:placeholder-ardoise-active::placeholder{color:#476794}.md\:placeholder-blue-active::-moz-placeholder{color:#14a5c2}.md\:placeholder-blue-active:-ms-input-placeholder{color:#14a5c2}.md\:placeholder-blue-active::placeholder{color:#14a5c2}.md\:placeholder-lightBlue::-moz-placeholder{color:rgba(0,85,138,.1)}.md\:placeholder-lightBlue:-ms-input-placeholder{color:rgba(0,85,138,.1)}.md\:placeholder-lightBlue::placeholder{color:rgba(0,85,138,.1)}.md\:placeholder-lightBlue-active::-moz-placeholder{color:rgba(0,85,138,.1)}.md\:placeholder-lightBlue-active:-ms-input-placeholder{color:rgba(0,85,138,.1)}.md\:placeholder-lightBlue-active::placeholder{color:rgba(0,85,138,.1)}.md\:placeholder-deepBlue::-moz-placeholder{color:#0e346c}.md\:placeholder-deepBlue:-ms-input-placeholder{color:#0e346c}.md\:placeholder-deepBlue::placeholder{color:#0e346c}.md\:placeholder-deepBlue-active::-moz-placeholder{color:#0a3f8f}.md\:placeholder-deepBlue-active:-ms-input-placeholder{color:#0a3f8f}.md\:placeholder-deepBlue-active::placeholder{color:#0a3f8f}.md\:placeholder-gold::-moz-placeholder{color:#bd9e56}.md\:placeholder-gold:-ms-input-placeholder{color:#bd9e56}.md\:placeholder-gold::placeholder{color:#bd9e56}.md\:placeholder-gold-active::-moz-placeholder{color:#c9a34a}.md\:placeholder-gold-active:-ms-input-placeholder{color:#c9a34a}.md\:placeholder-gold-active::placeholder{color:#c9a34a}.md\:placeholder-grenadine::-moz-placeholder{color:#c35078}.md\:placeholder-grenadine:-ms-input-placeholder{color:#c35078}.md\:placeholder-grenadine::placeholder{color:#c35078}.md\:placeholder-grenadine-active::-moz-placeholder{color:#cf4475}.md\:placeholder-grenadine-active:-ms-input-placeholder{color:#cf4475}.md\:placeholder-grenadine-active::placeholder{color:#cf4475}.md\:placeholder-kiwi::-moz-placeholder{color:#9a9f1e}.md\:placeholder-kiwi:-ms-input-placeholder{color:#9a9f1e}.md\:placeholder-kiwi::placeholder{color:#9a9f1e}.md\:placeholder-kiwi-active::-moz-placeholder{color:#a3a815}.md\:placeholder-kiwi-active:-ms-input-placeholder{color:#a3a815}.md\:placeholder-kiwi-active::placeholder{color:#a3a815}.md\:placeholder-lilas::-moz-placeholder{color:#7ea1d3}.md\:placeholder-lilas:-ms-input-placeholder{color:#7ea1d3}.md\:placeholder-lilas::placeholder{color:#7ea1d3}.md\:placeholder-lilas-active::-moz-placeholder{color:#75a0db}.md\:placeholder-lilas-active:-ms-input-placeholder{color:#75a0db}.md\:placeholder-lilas-active::placeholder{color:#75a0db}.md\:placeholder-mahogany::-moz-placeholder{color:#57142e}.md\:placeholder-mahogany:-ms-input-placeholder{color:#57142e}.md\:placeholder-mahogany::placeholder{color:#57142e}.md\:placeholder-mahogany-active::-moz-placeholder{color:#610a2b}.md\:placeholder-mahogany-active:-ms-input-placeholder{color:#610a2b}.md\:placeholder-mahogany-active::placeholder{color:#610a2b}.md\:placeholder-ocher::-moz-placeholder{color:#c29614}.md\:placeholder-ocher:-ms-input-placeholder{color:#c29614}.md\:placeholder-ocher::placeholder{color:#c29614}.md\:placeholder-ocher-active::-moz-placeholder{color:#cd9c0a}.md\:placeholder-ocher-active:-ms-input-placeholder{color:#cd9c0a}.md\:placeholder-ocher-active::placeholder{color:#cd9c0a}.md\:placeholder-pine::-moz-placeholder{color:#144d52}.md\:placeholder-pine:-ms-input-placeholder{color:#144d52}.md\:placeholder-pine::placeholder{color:#144d52}.md\:placeholder-pine-active::-moz-placeholder{color:#0a555c}.md\:placeholder-pine-active:-ms-input-placeholder{color:#0a555c}.md\:placeholder-pine-active::placeholder{color:#0a555c}.md\:placeholder-platinum::-moz-placeholder{color:#000}.md\:placeholder-platinum:-ms-input-placeholder{color:#000}.md\:placeholder-platinum::placeholder{color:#000}.md\:placeholder-platinum-active::-moz-placeholder{color:#000}.md\:placeholder-platinum-active:-ms-input-placeholder{color:#000}.md\:placeholder-platinum-active::placeholder{color:#000}.md\:placeholder-prune::-moz-placeholder{color:#661456}.md\:placeholder-prune:-ms-input-placeholder{color:#661456}.md\:placeholder-prune::placeholder{color:#661456}.md\:placeholder-prune-active::-moz-placeholder{color:#72085d}.md\:placeholder-prune-active:-ms-input-placeholder{color:#72085d}.md\:placeholder-prune-active::placeholder{color:#72085d}.md\:placeholder-sand::-moz-placeholder{color:#d7be88}.md\:placeholder-sand:-ms-input-placeholder{color:#d7be88}.md\:placeholder-sand::placeholder{color:#d7be88}.md\:placeholder-sand-active::-moz-placeholder{color:#dfc181}.md\:placeholder-sand-active:-ms-input-placeholder{color:#dfc181}.md\:placeholder-sand-active::placeholder{color:#dfc181}.md\:placeholder-sandPearl::-moz-placeholder{color:#f0e5d6}.md\:placeholder-sandPearl:-ms-input-placeholder{color:#f0e5d6}.md\:placeholder-sandPearl::placeholder{color:#f0e5d6}.md\:placeholder-sandPearl-active::-moz-placeholder{color:#f2e6d4}.md\:placeholder-sandPearl-active:-ms-input-placeholder{color:#f2e6d4}.md\:placeholder-sandPearl-active::placeholder{color:#f2e6d4}.md\:placeholder-silver::-moz-placeholder{color:#b1b2b4}.md\:placeholder-silver:-ms-input-placeholder{color:#b1b2b4}.md\:placeholder-silver::placeholder{color:#b1b2b4}.md\:placeholder-silver-active::-moz-placeholder{color:#a9afbc}.md\:placeholder-silver-active:-ms-input-placeholder{color:#a9afbc}.md\:placeholder-silver-active::placeholder{color:#a9afbc}.md\:placeholder-skyBlue::-moz-placeholder{color:#98d2d7}.md\:placeholder-skyBlue:-ms-input-placeholder{color:#98d2d7}.md\:placeholder-skyBlue::placeholder{color:#98d2d7}.md\:placeholder-skyBlue-active::-moz-placeholder{color:#91d8de}.md\:placeholder-skyBlue-active:-ms-input-placeholder{color:#91d8de}.md\:placeholder-skyBlue-active::placeholder{color:#91d8de}.md\:placeholder-southSea::-moz-placeholder{color:#9dc9cd}.md\:placeholder-southSea:-ms-input-placeholder{color:#9dc9cd}.md\:placeholder-southSea::placeholder{color:#9dc9cd}.md\:placeholder-southSea-active::-moz-placeholder{color:#95ced5}.md\:placeholder-southSea-active:-ms-input-placeholder{color:#95ced5}.md\:placeholder-southSea-active::placeholder{color:#95ced5}.md\:placeholder-turquoise::-moz-placeholder{color:#14a5c2}.md\:placeholder-turquoise:-ms-input-placeholder{color:#14a5c2}.md\:placeholder-turquoise::placeholder{color:#14a5c2}.md\:placeholder-turquoise-active::-moz-placeholder{color:#0aaccd}.md\:placeholder-turquoise-active:-ms-input-placeholder{color:#0aaccd}.md\:placeholder-turquoise-active::placeholder{color:#0aaccd}.md\:placeholder-waterGreen::-moz-placeholder{color:#007571}.md\:placeholder-waterGreen:-ms-input-placeholder{color:#007571}.md\:placeholder-waterGreen::placeholder{color:#007571}.md\:placeholder-waterGreen-active::-moz-placeholder{color:#00a8a3}.md\:placeholder-waterGreen-active:-ms-input-placeholder{color:#00a8a3}.md\:placeholder-waterGreen-active::placeholder{color:#00a8a3}.md\:placeholder-deepRed::-moz-placeholder{color:#c32222}.md\:placeholder-deepRed:-ms-input-placeholder{color:#c32222}.md\:placeholder-deepRed::placeholder{color:#c32222}.md\:placeholder-deepRed-active::-moz-placeholder{color:#cf1717}.md\:placeholder-deepRed-active:-ms-input-placeholder{color:#cf1717}.md\:placeholder-deepRed-active::placeholder{color:#cf1717}.md\:placeholder-emerald::-moz-placeholder{color:#14a33a}.md\:placeholder-emerald:-ms-input-placeholder{color:#14a33a}.md\:placeholder-emerald::placeholder{color:#14a33a}.md\:placeholder-emerald-active::-moz-placeholder{color:#0bad36}.md\:placeholder-emerald-active:-ms-input-placeholder{color:#0bad36}.md\:placeholder-emerald-active::placeholder{color:#0bad36}.md\:placeholder-greenLight::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.md\:placeholder-greenLight:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.md\:placeholder-greenLight::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.md\:placeholder-orange-active::-moz-placeholder{color:#f65f2c}.md\:placeholder-orange-active:-ms-input-placeholder{color:#f65f2c}.md\:placeholder-orange-active::placeholder{color:#f65f2c}.md\:placeholder-red-active::-moz-placeholder{color:#e13737}.md\:placeholder-red-active:-ms-input-placeholder{color:#e13737}.md\:placeholder-red-active::placeholder{color:#e13737}.md\:placeholder-white-active::-moz-placeholder{color:#14a5c2}.md\:placeholder-white-active:-ms-input-placeholder{color:#14a5c2}.md\:placeholder-white-active::placeholder{color:#14a5c2}.md\:placeholder-white-button::-moz-placeholder{color:#fff}.md\:placeholder-white-button:-ms-input-placeholder{color:#fff}.md\:placeholder-white-button::placeholder{color:#fff}.md\:placeholder-white-button-active::-moz-placeholder{color:#fff}.md\:placeholder-white-button-active:-ms-input-placeholder{color:#fff}.md\:placeholder-white-button-active::placeholder{color:#fff}.md\:placeholder-code::-moz-placeholder{color:#3f3d57}.md\:placeholder-code:-ms-input-placeholder{color:#3f3d57}.md\:placeholder-code::placeholder{color:#3f3d57}.md\:placeholder-code-active::-moz-placeholder{color:#37354b}.md\:placeholder-code-active:-ms-input-placeholder{color:#37354b}.md\:placeholder-code-active::placeholder{color:#37354b}.md\:placeholder-gray-lighter::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.md\:placeholder-gray-lighter:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.md\:placeholder-gray-lighter::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.md\:placeholder-gray-lighter-active::-moz-placeholder{color:#ebebeb}.md\:placeholder-gray-lighter-active:-ms-input-placeholder{color:#ebebeb}.md\:placeholder-gray-lighter-active::placeholder{color:#ebebeb}.md\:placeholder-gray-light::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.md\:placeholder-gray-light:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.md\:placeholder-gray-light::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.md\:placeholder-gray-medium::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.md\:placeholder-gray-medium:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.md\:placeholder-gray-medium::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.md\:placeholder-gray-darker::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.md\:placeholder-gray-darker:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.md\:placeholder-gray-darker::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.md\:placeholder-gray-darker-active::-moz-placeholder{color:#14a5c2}.md\:placeholder-gray-darker-active:-ms-input-placeholder{color:#14a5c2}.md\:placeholder-gray-darker-active::placeholder{color:#14a5c2}.md\:placeholder-api-default::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.md\:placeholder-api-default:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.md\:placeholder-api-default::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.md\:placeholder-gray-xxl::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.md\:placeholder-gray-xxl:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.md\:placeholder-gray-xxl::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.md\:placeholder-line-even::-moz-placeholder{color:#f3f6f7}.md\:placeholder-line-even:-ms-input-placeholder{color:#f3f6f7}.md\:placeholder-line-even::placeholder{color:#f3f6f7}.md\:focus\:placeholder-transparent:focus::-moz-placeholder{color:transparent}.md\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.md\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.md\:focus\:placeholder-current:focus::-moz-placeholder{color:currentColor}.md\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.md\:focus\:placeholder-current:focus::placeholder{color:currentColor}.md\:focus\:placeholder-black:focus::-moz-placeholder{color:#000}.md\:focus\:placeholder-black:focus:-ms-input-placeholder{color:#000}.md\:focus\:placeholder-black:focus::placeholder{color:#000}.md\:focus\:placeholder-white:focus::-moz-placeholder{color:#fff}.md\:focus\:placeholder-white:focus:-ms-input-placeholder{color:#fff}.md\:focus\:placeholder-white:focus::placeholder{color:#fff}.md\:focus\:placeholder-gray-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-red:focus::-moz-placeholder{color:#d64343}.md\:focus\:placeholder-red:focus:-ms-input-placeholder{color:#d64343}.md\:focus\:placeholder-red:focus::placeholder{color:#d64343}.md\:focus\:placeholder-orange:focus::-moz-placeholder{color:#eb6437}.md\:focus\:placeholder-orange:focus:-ms-input-placeholder{color:#eb6437}.md\:focus\:placeholder-orange:focus::placeholder{color:#eb6437}.md\:focus\:placeholder-yellow:focus::-moz-placeholder{color:#f8da30}.md\:focus\:placeholder-yellow:focus:-ms-input-placeholder{color:#f8da30}.md\:focus\:placeholder-yellow:focus::placeholder{color:#f8da30}.md\:focus\:placeholder-green-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:focus\:placeholder-green-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:focus\:placeholder-green-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:focus\:placeholder-green-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:focus\:placeholder-green-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:focus\:placeholder-green-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:focus\:placeholder-green-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:focus\:placeholder-green-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:focus\:placeholder-green-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-50:focus::-moz-placeholder{color:#d1eaff}.md\:focus\:placeholder-blue-50:focus:-ms-input-placeholder{color:#d1eaff}.md\:focus\:placeholder-blue-50:focus::placeholder{color:#d1eaff}.md\:focus\:placeholder-blue-100:focus::-moz-placeholder{color:#a8d7ff}.md\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{color:#a8d7ff}.md\:focus\:placeholder-blue-100:focus::placeholder{color:#a8d7ff}.md\:focus\:placeholder-blue-200:focus::-moz-placeholder{color:#80c4ff}.md\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{color:#80c4ff}.md\:focus\:placeholder-blue-200:focus::placeholder{color:#80c4ff}.md\:focus\:placeholder-blue-300:focus::-moz-placeholder{color:#57b0ff}.md\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{color:#57b0ff}.md\:focus\:placeholder-blue-300:focus::placeholder{color:#57b0ff}.md\:focus\:placeholder-blue-400:focus::-moz-placeholder{color:#2e9dff}.md\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{color:#2e9dff}.md\:focus\:placeholder-blue-400:focus::placeholder{color:#2e9dff}.md\:focus\:placeholder-blue-500:focus::-moz-placeholder{color:#058aff}.md\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{color:#058aff}.md\:focus\:placeholder-blue-500:focus::placeholder{color:#058aff}.md\:focus\:placeholder-blue-600:focus::-moz-placeholder{color:#0075db}.md\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{color:#0075db}.md\:focus\:placeholder-blue-600:focus::placeholder{color:#0075db}.md\:focus\:placeholder-blue-700:focus::-moz-placeholder{color:#005fb3}.md\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{color:#005fb3}.md\:focus\:placeholder-blue-700:focus::placeholder{color:#005fb3}.md\:focus\:placeholder-blue-800:focus::-moz-placeholder{color:#00498a}.md\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{color:#00498a}.md\:focus\:placeholder-blue-800:focus::placeholder{color:#00498a}.md\:focus\:placeholder-blue-900:focus::-moz-placeholder{color:#003461}.md\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{color:#003461}.md\:focus\:placeholder-blue-900:focus::placeholder{color:#003461}.md\:focus\:placeholder-blue-DEFAULT:focus::-moz-placeholder{color:#0075db}.md\:focus\:placeholder-blue-DEFAULT:focus:-ms-input-placeholder{color:#0075db}.md\:focus\:placeholder-blue-DEFAULT:focus::placeholder{color:#0075db}.md\:focus\:placeholder-blue:focus::-moz-placeholder{color:#0075db}.md\:focus\:placeholder-blue:focus:-ms-input-placeholder{color:#0075db}.md\:focus\:placeholder-blue:focus::placeholder{color:#0075db}.md\:focus\:placeholder-indigo-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-pink:focus::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.md\:focus\:placeholder-pink:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.md\:focus\:placeholder-pink:focus::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.md\:focus\:placeholder-inherit:focus::-moz-placeholder{color:inherit}.md\:focus\:placeholder-inherit:focus:-ms-input-placeholder{color:inherit}.md\:focus\:placeholder-inherit:focus::placeholder{color:inherit}.md\:focus\:placeholder-amber:focus::-moz-placeholder{color:#d78737}.md\:focus\:placeholder-amber:focus:-ms-input-placeholder{color:#d78737}.md\:focus\:placeholder-amber:focus::placeholder{color:#d78737}.md\:focus\:placeholder-amber-active:focus::-moz-placeholder{color:#e3872b}.md\:focus\:placeholder-amber-active:focus:-ms-input-placeholder{color:#e3872b}.md\:focus\:placeholder-amber-active:focus::placeholder{color:#e3872b}.md\:focus\:placeholder-ardoise:focus::-moz-placeholder{color:#596a82}.md\:focus\:placeholder-ardoise:focus:-ms-input-placeholder{color:#596a82}.md\:focus\:placeholder-ardoise:focus::placeholder{color:#596a82}.md\:focus\:placeholder-ardoise-active:focus::-moz-placeholder{color:#476794}.md\:focus\:placeholder-ardoise-active:focus:-ms-input-placeholder{color:#476794}.md\:focus\:placeholder-ardoise-active:focus::placeholder{color:#476794}.md\:focus\:placeholder-blue-active:focus::-moz-placeholder{color:#14a5c2}.md\:focus\:placeholder-blue-active:focus:-ms-input-placeholder{color:#14a5c2}.md\:focus\:placeholder-blue-active:focus::placeholder{color:#14a5c2}.md\:focus\:placeholder-lightBlue:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.md\:focus\:placeholder-lightBlue:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.md\:focus\:placeholder-lightBlue:focus::placeholder{color:rgba(0,85,138,.1)}.md\:focus\:placeholder-lightBlue-active:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.md\:focus\:placeholder-lightBlue-active:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.md\:focus\:placeholder-lightBlue-active:focus::placeholder{color:rgba(0,85,138,.1)}.md\:focus\:placeholder-deepBlue:focus::-moz-placeholder{color:#0e346c}.md\:focus\:placeholder-deepBlue:focus:-ms-input-placeholder{color:#0e346c}.md\:focus\:placeholder-deepBlue:focus::placeholder{color:#0e346c}.md\:focus\:placeholder-deepBlue-active:focus::-moz-placeholder{color:#0a3f8f}.md\:focus\:placeholder-deepBlue-active:focus:-ms-input-placeholder{color:#0a3f8f}.md\:focus\:placeholder-deepBlue-active:focus::placeholder{color:#0a3f8f}.md\:focus\:placeholder-gold:focus::-moz-placeholder{color:#bd9e56}.md\:focus\:placeholder-gold:focus:-ms-input-placeholder{color:#bd9e56}.md\:focus\:placeholder-gold:focus::placeholder{color:#bd9e56}.md\:focus\:placeholder-gold-active:focus::-moz-placeholder{color:#c9a34a}.md\:focus\:placeholder-gold-active:focus:-ms-input-placeholder{color:#c9a34a}.md\:focus\:placeholder-gold-active:focus::placeholder{color:#c9a34a}.md\:focus\:placeholder-grenadine:focus::-moz-placeholder{color:#c35078}.md\:focus\:placeholder-grenadine:focus:-ms-input-placeholder{color:#c35078}.md\:focus\:placeholder-grenadine:focus::placeholder{color:#c35078}.md\:focus\:placeholder-grenadine-active:focus::-moz-placeholder{color:#cf4475}.md\:focus\:placeholder-grenadine-active:focus:-ms-input-placeholder{color:#cf4475}.md\:focus\:placeholder-grenadine-active:focus::placeholder{color:#cf4475}.md\:focus\:placeholder-kiwi:focus::-moz-placeholder{color:#9a9f1e}.md\:focus\:placeholder-kiwi:focus:-ms-input-placeholder{color:#9a9f1e}.md\:focus\:placeholder-kiwi:focus::placeholder{color:#9a9f1e}.md\:focus\:placeholder-kiwi-active:focus::-moz-placeholder{color:#a3a815}.md\:focus\:placeholder-kiwi-active:focus:-ms-input-placeholder{color:#a3a815}.md\:focus\:placeholder-kiwi-active:focus::placeholder{color:#a3a815}.md\:focus\:placeholder-lilas:focus::-moz-placeholder{color:#7ea1d3}.md\:focus\:placeholder-lilas:focus:-ms-input-placeholder{color:#7ea1d3}.md\:focus\:placeholder-lilas:focus::placeholder{color:#7ea1d3}.md\:focus\:placeholder-lilas-active:focus::-moz-placeholder{color:#75a0db}.md\:focus\:placeholder-lilas-active:focus:-ms-input-placeholder{color:#75a0db}.md\:focus\:placeholder-lilas-active:focus::placeholder{color:#75a0db}.md\:focus\:placeholder-mahogany:focus::-moz-placeholder{color:#57142e}.md\:focus\:placeholder-mahogany:focus:-ms-input-placeholder{color:#57142e}.md\:focus\:placeholder-mahogany:focus::placeholder{color:#57142e}.md\:focus\:placeholder-mahogany-active:focus::-moz-placeholder{color:#610a2b}.md\:focus\:placeholder-mahogany-active:focus:-ms-input-placeholder{color:#610a2b}.md\:focus\:placeholder-mahogany-active:focus::placeholder{color:#610a2b}.md\:focus\:placeholder-ocher:focus::-moz-placeholder{color:#c29614}.md\:focus\:placeholder-ocher:focus:-ms-input-placeholder{color:#c29614}.md\:focus\:placeholder-ocher:focus::placeholder{color:#c29614}.md\:focus\:placeholder-ocher-active:focus::-moz-placeholder{color:#cd9c0a}.md\:focus\:placeholder-ocher-active:focus:-ms-input-placeholder{color:#cd9c0a}.md\:focus\:placeholder-ocher-active:focus::placeholder{color:#cd9c0a}.md\:focus\:placeholder-pine:focus::-moz-placeholder{color:#144d52}.md\:focus\:placeholder-pine:focus:-ms-input-placeholder{color:#144d52}.md\:focus\:placeholder-pine:focus::placeholder{color:#144d52}.md\:focus\:placeholder-pine-active:focus::-moz-placeholder{color:#0a555c}.md\:focus\:placeholder-pine-active:focus:-ms-input-placeholder{color:#0a555c}.md\:focus\:placeholder-pine-active:focus::placeholder{color:#0a555c}.md\:focus\:placeholder-platinum:focus::-moz-placeholder{color:#000}.md\:focus\:placeholder-platinum:focus:-ms-input-placeholder{color:#000}.md\:focus\:placeholder-platinum:focus::placeholder{color:#000}.md\:focus\:placeholder-platinum-active:focus::-moz-placeholder{color:#000}.md\:focus\:placeholder-platinum-active:focus:-ms-input-placeholder{color:#000}.md\:focus\:placeholder-platinum-active:focus::placeholder{color:#000}.md\:focus\:placeholder-prune:focus::-moz-placeholder{color:#661456}.md\:focus\:placeholder-prune:focus:-ms-input-placeholder{color:#661456}.md\:focus\:placeholder-prune:focus::placeholder{color:#661456}.md\:focus\:placeholder-prune-active:focus::-moz-placeholder{color:#72085d}.md\:focus\:placeholder-prune-active:focus:-ms-input-placeholder{color:#72085d}.md\:focus\:placeholder-prune-active:focus::placeholder{color:#72085d}.md\:focus\:placeholder-sand:focus::-moz-placeholder{color:#d7be88}.md\:focus\:placeholder-sand:focus:-ms-input-placeholder{color:#d7be88}.md\:focus\:placeholder-sand:focus::placeholder{color:#d7be88}.md\:focus\:placeholder-sand-active:focus::-moz-placeholder{color:#dfc181}.md\:focus\:placeholder-sand-active:focus:-ms-input-placeholder{color:#dfc181}.md\:focus\:placeholder-sand-active:focus::placeholder{color:#dfc181}.md\:focus\:placeholder-sandPearl:focus::-moz-placeholder{color:#f0e5d6}.md\:focus\:placeholder-sandPearl:focus:-ms-input-placeholder{color:#f0e5d6}.md\:focus\:placeholder-sandPearl:focus::placeholder{color:#f0e5d6}.md\:focus\:placeholder-sandPearl-active:focus::-moz-placeholder{color:#f2e6d4}.md\:focus\:placeholder-sandPearl-active:focus:-ms-input-placeholder{color:#f2e6d4}.md\:focus\:placeholder-sandPearl-active:focus::placeholder{color:#f2e6d4}.md\:focus\:placeholder-silver:focus::-moz-placeholder{color:#b1b2b4}.md\:focus\:placeholder-silver:focus:-ms-input-placeholder{color:#b1b2b4}.md\:focus\:placeholder-silver:focus::placeholder{color:#b1b2b4}.md\:focus\:placeholder-silver-active:focus::-moz-placeholder{color:#a9afbc}.md\:focus\:placeholder-silver-active:focus:-ms-input-placeholder{color:#a9afbc}.md\:focus\:placeholder-silver-active:focus::placeholder{color:#a9afbc}.md\:focus\:placeholder-skyBlue:focus::-moz-placeholder{color:#98d2d7}.md\:focus\:placeholder-skyBlue:focus:-ms-input-placeholder{color:#98d2d7}.md\:focus\:placeholder-skyBlue:focus::placeholder{color:#98d2d7}.md\:focus\:placeholder-skyBlue-active:focus::-moz-placeholder{color:#91d8de}.md\:focus\:placeholder-skyBlue-active:focus:-ms-input-placeholder{color:#91d8de}.md\:focus\:placeholder-skyBlue-active:focus::placeholder{color:#91d8de}.md\:focus\:placeholder-southSea:focus::-moz-placeholder{color:#9dc9cd}.md\:focus\:placeholder-southSea:focus:-ms-input-placeholder{color:#9dc9cd}.md\:focus\:placeholder-southSea:focus::placeholder{color:#9dc9cd}.md\:focus\:placeholder-southSea-active:focus::-moz-placeholder{color:#95ced5}.md\:focus\:placeholder-southSea-active:focus:-ms-input-placeholder{color:#95ced5}.md\:focus\:placeholder-southSea-active:focus::placeholder{color:#95ced5}.md\:focus\:placeholder-turquoise:focus::-moz-placeholder{color:#14a5c2}.md\:focus\:placeholder-turquoise:focus:-ms-input-placeholder{color:#14a5c2}.md\:focus\:placeholder-turquoise:focus::placeholder{color:#14a5c2}.md\:focus\:placeholder-turquoise-active:focus::-moz-placeholder{color:#0aaccd}.md\:focus\:placeholder-turquoise-active:focus:-ms-input-placeholder{color:#0aaccd}.md\:focus\:placeholder-turquoise-active:focus::placeholder{color:#0aaccd}.md\:focus\:placeholder-waterGreen:focus::-moz-placeholder{color:#007571}.md\:focus\:placeholder-waterGreen:focus:-ms-input-placeholder{color:#007571}.md\:focus\:placeholder-waterGreen:focus::placeholder{color:#007571}.md\:focus\:placeholder-waterGreen-active:focus::-moz-placeholder{color:#00a8a3}.md\:focus\:placeholder-waterGreen-active:focus:-ms-input-placeholder{color:#00a8a3}.md\:focus\:placeholder-waterGreen-active:focus::placeholder{color:#00a8a3}.md\:focus\:placeholder-deepRed:focus::-moz-placeholder{color:#c32222}.md\:focus\:placeholder-deepRed:focus:-ms-input-placeholder{color:#c32222}.md\:focus\:placeholder-deepRed:focus::placeholder{color:#c32222}.md\:focus\:placeholder-deepRed-active:focus::-moz-placeholder{color:#cf1717}.md\:focus\:placeholder-deepRed-active:focus:-ms-input-placeholder{color:#cf1717}.md\:focus\:placeholder-deepRed-active:focus::placeholder{color:#cf1717}.md\:focus\:placeholder-emerald:focus::-moz-placeholder{color:#14a33a}.md\:focus\:placeholder-emerald:focus:-ms-input-placeholder{color:#14a33a}.md\:focus\:placeholder-emerald:focus::placeholder{color:#14a33a}.md\:focus\:placeholder-emerald-active:focus::-moz-placeholder{color:#0bad36}.md\:focus\:placeholder-emerald-active:focus:-ms-input-placeholder{color:#0bad36}.md\:focus\:placeholder-emerald-active:focus::placeholder{color:#0bad36}.md\:focus\:placeholder-greenLight:focus::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.md\:focus\:placeholder-greenLight:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.md\:focus\:placeholder-greenLight:focus::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-active:focus::-moz-placeholder{color:#f65f2c}.md\:focus\:placeholder-orange-active:focus:-ms-input-placeholder{color:#f65f2c}.md\:focus\:placeholder-orange-active:focus::placeholder{color:#f65f2c}.md\:focus\:placeholder-red-active:focus::-moz-placeholder{color:#e13737}.md\:focus\:placeholder-red-active:focus:-ms-input-placeholder{color:#e13737}.md\:focus\:placeholder-red-active:focus::placeholder{color:#e13737}.md\:focus\:placeholder-white-active:focus::-moz-placeholder{color:#14a5c2}.md\:focus\:placeholder-white-active:focus:-ms-input-placeholder{color:#14a5c2}.md\:focus\:placeholder-white-active:focus::placeholder{color:#14a5c2}.md\:focus\:placeholder-white-button:focus::-moz-placeholder{color:#fff}.md\:focus\:placeholder-white-button:focus:-ms-input-placeholder{color:#fff}.md\:focus\:placeholder-white-button:focus::placeholder{color:#fff}.md\:focus\:placeholder-white-button-active:focus::-moz-placeholder{color:#fff}.md\:focus\:placeholder-white-button-active:focus:-ms-input-placeholder{color:#fff}.md\:focus\:placeholder-white-button-active:focus::placeholder{color:#fff}.md\:focus\:placeholder-code:focus::-moz-placeholder{color:#3f3d57}.md\:focus\:placeholder-code:focus:-ms-input-placeholder{color:#3f3d57}.md\:focus\:placeholder-code:focus::placeholder{color:#3f3d57}.md\:focus\:placeholder-code-active:focus::-moz-placeholder{color:#37354b}.md\:focus\:placeholder-code-active:focus:-ms-input-placeholder{color:#37354b}.md\:focus\:placeholder-code-active:focus::placeholder{color:#37354b}.md\:focus\:placeholder-gray-lighter:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-lighter:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-lighter:focus::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-lighter-active:focus::-moz-placeholder{color:#ebebeb}.md\:focus\:placeholder-gray-lighter-active:focus:-ms-input-placeholder{color:#ebebeb}.md\:focus\:placeholder-gray-lighter-active:focus::placeholder{color:#ebebeb}.md\:focus\:placeholder-gray-light:focus::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-light:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-light:focus::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-medium:focus::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-medium:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-medium:focus::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-darker:focus::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-darker:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-darker:focus::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-darker-active:focus::-moz-placeholder{color:#14a5c2}.md\:focus\:placeholder-gray-darker-active:focus:-ms-input-placeholder{color:#14a5c2}.md\:focus\:placeholder-gray-darker-active:focus::placeholder{color:#14a5c2}.md\:focus\:placeholder-api-default:focus::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.md\:focus\:placeholder-api-default:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.md\:focus\:placeholder-api-default:focus::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-xxl:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-xxl:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-xxl:focus::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.md\:focus\:placeholder-line-even:focus::-moz-placeholder{color:#f3f6f7}.md\:focus\:placeholder-line-even:focus:-ms-input-placeholder{color:#f3f6f7}.md\:focus\:placeholder-line-even:focus::placeholder{color:#f3f6f7}.md\:placeholder-opacity-0::-moz-placeholder{--placeholder-opacity:0}.md\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.md\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.md\:placeholder-opacity-25::-moz-placeholder{--placeholder-opacity:0.25}.md\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.md\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.md\:placeholder-opacity-50::-moz-placeholder{--placeholder-opacity:0.5}.md\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.md\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.md\:placeholder-opacity-75::-moz-placeholder{--placeholder-opacity:0.75}.md\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.md\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.md\:placeholder-opacity-100::-moz-placeholder{--placeholder-opacity:1}.md\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.md\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.md\:focus\:placeholder-opacity-0:focus::-moz-placeholder{--placeholder-opacity:0}.md\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.md\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.md\:focus\:placeholder-opacity-25:focus::-moz-placeholder{--placeholder-opacity:0.25}.md\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.md\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.md\:focus\:placeholder-opacity-50:focus::-moz-placeholder{--placeholder-opacity:0.5}.md\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.md\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.md\:focus\:placeholder-opacity-75:focus::-moz-placeholder{--placeholder-opacity:0.75}.md\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.md\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.md\:focus\:placeholder-opacity-100:focus::-moz-placeholder{--placeholder-opacity:1}.md\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.md\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.md\:pointer-events-none{pointer-events:none}.md\:pointer-events-auto{pointer-events:auto}.md\:static{position:static}.md\:fixed{position:fixed}.md\:absolute{position:absolute}.md\:relative{position:relative}.md\:sticky{position:-webkit-sticky;position:sticky}.md\:inset-0{top:0;right:0;bottom:0;left:0}.md\:inset-1{top:.25rem;right:.25rem;bottom:.25rem;left:.25rem}.md\:inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.md\:inset-3{top:.75rem;right:.75rem;bottom:.75rem;left:.75rem}.md\:inset-4{top:1rem;right:1rem;bottom:1rem;left:1rem}.md\:inset-5{top:1.25rem;right:1.25rem;bottom:1.25rem;left:1.25rem}.md\:inset-6{top:1.5rem;right:1.5rem;bottom:1.5rem;left:1.5rem}.md\:inset-7{top:1.75rem;right:1.75rem;bottom:1.75rem;left:1.75rem}.md\:inset-8{top:2rem;right:2rem;bottom:2rem;left:2rem}.md\:inset-9{top:2.25rem;right:2.25rem;bottom:2.25rem;left:2.25rem}.md\:inset-10{top:2.5rem;right:2.5rem;bottom:2.5rem;left:2.5rem}.md\:inset-11{top:2.75rem;right:2.75rem;bottom:2.75rem;left:2.75rem}.md\:inset-12{top:3rem;right:3rem;bottom:3rem;left:3rem}.md\:inset-15{top:3.75rem;right:3.75rem;bottom:3.75rem;left:3.75rem}.md\:inset-16{top:4rem;right:4rem;bottom:4rem;left:4rem}.md\:inset-20{top:5rem;right:5rem;bottom:5rem;left:5rem}.md\:inset-22{top:5.5rem;right:5.5rem;bottom:5.5rem;left:5.5rem}.md\:inset-24{top:6rem;right:6rem;bottom:6rem;left:6rem}.md\:inset-25{top:6.25rem;right:6.25rem;bottom:6.25rem;left:6.25rem}.md\:inset-26{top:6.5rem;right:6.5rem;bottom:6.5rem;left:6.5rem}.md\:inset-28{top:8rem;right:8rem;bottom:8rem;left:8rem}.md\:inset-30{top:8.5rem;right:8.5rem;bottom:8.5rem;left:8.5rem}.md\:inset-32{top:9rem;right:9rem;bottom:9rem;left:9rem}.md\:inset-40{top:10rem;right:10rem;bottom:10rem;left:10rem}.md\:inset-48{top:12rem;right:12rem;bottom:12rem;left:12rem}.md\:inset-52{top:13rem;right:13rem;bottom:13rem;left:13rem}.md\:inset-56{top:14rem;right:14rem;bottom:14rem;left:14rem}.md\:inset-60{top:15rem;right:15rem;bottom:15rem;left:15rem}.md\:inset-64{top:16rem;right:16rem;bottom:16rem;left:16rem}.md\:inset-68{top:17rem;right:17rem;bottom:17rem;left:17rem}.md\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.md\:inset-px{top:1px;right:1px;bottom:1px;left:1px}.md\:inset-0\.5{top:.125rem;right:.125rem;bottom:.125rem;left:.125rem}.md\:inset-1\.5{top:.375rem;right:.375rem;bottom:.375rem;left:.375rem}.md\:inset-2\.5{top:.625rem;right:.625rem;bottom:.625rem;left:.625rem}.md\:inset-7\.5{top:1.875rem;right:1.875rem;bottom:1.875rem;left:1.875rem}.md\:inset-y-0{top:0;bottom:0}.md\:inset-x-0{right:0;left:0}.md\:inset-y-1{top:.25rem;bottom:.25rem}.md\:inset-x-1{right:.25rem;left:.25rem}.md\:inset-y-2{top:.5rem;bottom:.5rem}.md\:inset-x-2{right:.5rem;left:.5rem}.md\:inset-y-3{top:.75rem;bottom:.75rem}.md\:inset-x-3{right:.75rem;left:.75rem}.md\:inset-y-4{top:1rem;bottom:1rem}.md\:inset-x-4{right:1rem;left:1rem}.md\:inset-y-5{top:1.25rem;bottom:1.25rem}.md\:inset-x-5{right:1.25rem;left:1.25rem}.md\:inset-y-6{top:1.5rem;bottom:1.5rem}.md\:inset-x-6{right:1.5rem;left:1.5rem}.md\:inset-y-7{top:1.75rem;bottom:1.75rem}.md\:inset-x-7{right:1.75rem;left:1.75rem}.md\:inset-y-8{top:2rem;bottom:2rem}.md\:inset-x-8{right:2rem;left:2rem}.md\:inset-y-9{top:2.25rem;bottom:2.25rem}.md\:inset-x-9{right:2.25rem;left:2.25rem}.md\:inset-y-10{top:2.5rem;bottom:2.5rem}.md\:inset-x-10{right:2.5rem;left:2.5rem}.md\:inset-y-11{top:2.75rem;bottom:2.75rem}.md\:inset-x-11{right:2.75rem;left:2.75rem}.md\:inset-y-12{top:3rem;bottom:3rem}.md\:inset-x-12{right:3rem;left:3rem}.md\:inset-y-15{top:3.75rem;bottom:3.75rem}.md\:inset-x-15{right:3.75rem;left:3.75rem}.md\:inset-y-16{top:4rem;bottom:4rem}.md\:inset-x-16{right:4rem;left:4rem}.md\:inset-y-20{top:5rem;bottom:5rem}.md\:inset-x-20{right:5rem;left:5rem}.md\:inset-y-22{top:5.5rem;bottom:5.5rem}.md\:inset-x-22{right:5.5rem;left:5.5rem}.md\:inset-y-24{top:6rem;bottom:6rem}.md\:inset-x-24{right:6rem;left:6rem}.md\:inset-y-25{top:6.25rem;bottom:6.25rem}.md\:inset-x-25{right:6.25rem;left:6.25rem}.md\:inset-y-26{top:6.5rem;bottom:6.5rem}.md\:inset-x-26{right:6.5rem;left:6.5rem}.md\:inset-y-28{top:8rem;bottom:8rem}.md\:inset-x-28{right:8rem;left:8rem}.md\:inset-y-30{top:8.5rem;bottom:8.5rem}.md\:inset-x-30{right:8.5rem;left:8.5rem}.md\:inset-y-32{top:9rem;bottom:9rem}.md\:inset-x-32{right:9rem;left:9rem}.md\:inset-y-40{top:10rem;bottom:10rem}.md\:inset-x-40{right:10rem;left:10rem}.md\:inset-y-48{top:12rem;bottom:12rem}.md\:inset-x-48{right:12rem;left:12rem}.md\:inset-y-52{top:13rem;bottom:13rem}.md\:inset-x-52{right:13rem;left:13rem}.md\:inset-y-56{top:14rem;bottom:14rem}.md\:inset-x-56{right:14rem;left:14rem}.md\:inset-y-60{top:15rem;bottom:15rem}.md\:inset-x-60{right:15rem;left:15rem}.md\:inset-y-64{top:16rem;bottom:16rem}.md\:inset-x-64{right:16rem;left:16rem}.md\:inset-y-68{top:17rem;bottom:17rem}.md\:inset-x-68{right:17rem;left:17rem}.md\:inset-y-auto{top:auto;bottom:auto}.md\:inset-x-auto{right:auto;left:auto}.md\:inset-y-px{top:1px;bottom:1px}.md\:inset-x-px{right:1px;left:1px}.md\:inset-y-0\.5{top:.125rem;bottom:.125rem}.md\:inset-x-0\.5{right:.125rem;left:.125rem}.md\:inset-y-1\.5{top:.375rem;bottom:.375rem}.md\:inset-x-1\.5{right:.375rem;left:.375rem}.md\:inset-y-2\.5{top:.625rem;bottom:.625rem}.md\:inset-x-2\.5{right:.625rem;left:.625rem}.md\:inset-y-7\.5{top:1.875rem;bottom:1.875rem}.md\:inset-x-7\.5{right:1.875rem;left:1.875rem}.md\:top-0{top:0}.md\:right-0{right:0}.md\:bottom-0{bottom:0}.md\:left-0{left:0}.md\:top-1{top:.25rem}.md\:right-1{right:.25rem}.md\:bottom-1{bottom:.25rem}.md\:left-1{left:.25rem}.md\:top-2{top:.5rem}.md\:right-2{right:.5rem}.md\:bottom-2{bottom:.5rem}.md\:left-2{left:.5rem}.md\:top-3{top:.75rem}.md\:right-3{right:.75rem}.md\:bottom-3{bottom:.75rem}.md\:left-3{left:.75rem}.md\:top-4{top:1rem}.md\:right-4{right:1rem}.md\:bottom-4{bottom:1rem}.md\:left-4{left:1rem}.md\:top-5{top:1.25rem}.md\:right-5{right:1.25rem}.md\:bottom-5{bottom:1.25rem}.md\:left-5{left:1.25rem}.md\:top-6{top:1.5rem}.md\:right-6{right:1.5rem}.md\:bottom-6{bottom:1.5rem}.md\:left-6{left:1.5rem}.md\:top-7{top:1.75rem}.md\:right-7{right:1.75rem}.md\:bottom-7{bottom:1.75rem}.md\:left-7{left:1.75rem}.md\:top-8{top:2rem}.md\:right-8{right:2rem}.md\:bottom-8{bottom:2rem}.md\:left-8{left:2rem}.md\:top-9{top:2.25rem}.md\:right-9{right:2.25rem}.md\:bottom-9{bottom:2.25rem}.md\:left-9{left:2.25rem}.md\:top-10{top:2.5rem}.md\:right-10{right:2.5rem}.md\:bottom-10{bottom:2.5rem}.md\:left-10{left:2.5rem}.md\:top-11{top:2.75rem}.md\:right-11{right:2.75rem}.md\:bottom-11{bottom:2.75rem}.md\:left-11{left:2.75rem}.md\:top-12{top:3rem}.md\:right-12{right:3rem}.md\:bottom-12{bottom:3rem}.md\:left-12{left:3rem}.md\:top-15{top:3.75rem}.md\:right-15{right:3.75rem}.md\:bottom-15{bottom:3.75rem}.md\:left-15{left:3.75rem}.md\:top-16{top:4rem}.md\:right-16{right:4rem}.md\:bottom-16{bottom:4rem}.md\:left-16{left:4rem}.md\:top-20{top:5rem}.md\:right-20{right:5rem}.md\:bottom-20{bottom:5rem}.md\:left-20{left:5rem}.md\:top-22{top:5.5rem}.md\:right-22{right:5.5rem}.md\:bottom-22{bottom:5.5rem}.md\:left-22{left:5.5rem}.md\:top-24{top:6rem}.md\:right-24{right:6rem}.md\:bottom-24{bottom:6rem}.md\:left-24{left:6rem}.md\:top-25{top:6.25rem}.md\:right-25{right:6.25rem}.md\:bottom-25{bottom:6.25rem}.md\:left-25{left:6.25rem}.md\:top-26{top:6.5rem}.md\:right-26{right:6.5rem}.md\:bottom-26{bottom:6.5rem}.md\:left-26{left:6.5rem}.md\:top-28{top:8rem}.md\:right-28{right:8rem}.md\:bottom-28{bottom:8rem}.md\:left-28{left:8rem}.md\:top-30{top:8.5rem}.md\:right-30{right:8.5rem}.md\:bottom-30{bottom:8.5rem}.md\:left-30{left:8.5rem}.md\:top-32{top:9rem}.md\:right-32{right:9rem}.md\:bottom-32{bottom:9rem}.md\:left-32{left:9rem}.md\:top-40{top:10rem}.md\:right-40{right:10rem}.md\:bottom-40{bottom:10rem}.md\:left-40{left:10rem}.md\:top-48{top:12rem}.md\:right-48{right:12rem}.md\:bottom-48{bottom:12rem}.md\:left-48{left:12rem}.md\:top-52{top:13rem}.md\:right-52{right:13rem}.md\:bottom-52{bottom:13rem}.md\:left-52{left:13rem}.md\:top-56{top:14rem}.md\:right-56{right:14rem}.md\:bottom-56{bottom:14rem}.md\:left-56{left:14rem}.md\:top-60{top:15rem}.md\:right-60{right:15rem}.md\:bottom-60{bottom:15rem}.md\:left-60{left:15rem}.md\:top-64{top:16rem}.md\:right-64{right:16rem}.md\:bottom-64{bottom:16rem}.md\:left-64{left:16rem}.md\:top-68{top:17rem}.md\:right-68{right:17rem}.md\:bottom-68{bottom:17rem}.md\:left-68{left:17rem}.md\:top-auto{top:auto}.md\:right-auto{right:auto}.md\:bottom-auto{bottom:auto}.md\:left-auto{left:auto}.md\:top-px{top:1px}.md\:right-px{right:1px}.md\:bottom-px{bottom:1px}.md\:left-px{left:1px}.md\:top-0\.5{top:.125rem}.md\:right-0\.5{right:.125rem}.md\:bottom-0\.5{bottom:.125rem}.md\:left-0\.5{left:.125rem}.md\:top-1\.5{top:.375rem}.md\:right-1\.5{right:.375rem}.md\:bottom-1\.5{bottom:.375rem}.md\:left-1\.5{left:.375rem}.md\:top-2\.5{top:.625rem}.md\:right-2\.5{right:.625rem}.md\:bottom-2\.5{bottom:.625rem}.md\:left-2\.5{left:.625rem}.md\:top-7\.5{top:1.875rem}.md\:right-7\.5{right:1.875rem}.md\:bottom-7\.5{bottom:1.875rem}.md\:left-7\.5{left:1.875rem}.md\:resize-none{resize:none}.md\:resize-y{resize:vertical}.md\:resize-x{resize:horizontal}.md\:resize{resize:both}.md\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.md\:shadow-sm{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.md\:shadow{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.md\:shadow-md{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.md\:shadow-lg{box-shadow:0 0 20px rgba(0,0,0,.15)}.md\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:shadow-inner{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.md\:shadow-outline{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.md\:shadow-none{box-shadow:none}.md\:shadow-strong{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.md\:shadow-top{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.md\:shadow-symbol{box-shadow:0 1px 2px rgba(10,16,20,.24)}.md\:shadow-sidebar{box-shadow:0 0 25px rgba(0,0,0,.1)}.md\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.md\:hover\:shadow-sm:hover{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.md\:hover\:shadow:hover{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.md\:hover\:shadow-md:hover{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.md\:hover\:shadow-lg:hover{box-shadow:0 0 20px rgba(0,0,0,.15)}.md\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:hover\:shadow-inner:hover{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.md\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.md\:hover\:shadow-none:hover{box-shadow:none}.md\:hover\:shadow-strong:hover{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.md\:hover\:shadow-top:hover{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.md\:hover\:shadow-symbol:hover{box-shadow:0 1px 2px rgba(10,16,20,.24)}.md\:hover\:shadow-sidebar:hover{box-shadow:0 0 25px rgba(0,0,0,.1)}.md\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.md\:focus\:shadow-sm:focus{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.md\:focus\:shadow:focus{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.md\:focus\:shadow-md:focus{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.md\:focus\:shadow-lg:focus{box-shadow:0 0 20px rgba(0,0,0,.15)}.md\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:focus\:shadow-inner:focus{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.md\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.md\:focus\:shadow-none:focus{box-shadow:none}.md\:focus\:shadow-strong:focus{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.md\:focus\:shadow-top:focus{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.md\:focus\:shadow-symbol:focus{box-shadow:0 1px 2px rgba(10,16,20,.24)}.md\:focus\:shadow-sidebar:focus{box-shadow:0 0 25px rgba(0,0,0,.1)}.md\:fill-current{fill:currentColor}.md\:fill-transparent{fill:transparent}.md\:stroke-current{stroke:currentColor}.md\:stroke-0{stroke-width:0}.md\:stroke-1{stroke-width:1}.md\:stroke-2{stroke-width:2}.md\:table-auto{table-layout:auto}.md\:table-fixed{table-layout:fixed}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-right{text-align:right}.md\:text-justify{text-align:justify}.md\:text-transparent{color:transparent}.md\:text-current{color:currentColor}.md\:text-black{color:#000}.md\:text-white{color:#fff}.md\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.md\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.md\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.md\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.md\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.md\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.md\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.md\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.md\:text-gray,.md\:text-gray-DEFAULT{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:text-red{color:#d64343}.md\:text-orange{color:#eb6437}.md\:text-yellow{color:#f8da30}.md\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.md\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.md\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.md\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.md\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.md\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.md\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.md\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.md\:text-green,.md\:text-green-DEFAULT{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.md\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.md\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.md\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.md\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.md\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.md\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.md\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.md\:text-teal,.md\:text-teal-DEFAULT{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:text-blue-50{color:#d1eaff}.md\:text-blue-100{color:#a8d7ff}.md\:text-blue-200{color:#80c4ff}.md\:text-blue-300{color:#57b0ff}.md\:text-blue-400{color:#2e9dff}.md\:text-blue-500{color:#058aff}.md\:text-blue-600{color:#0075db}.md\:text-blue-700{color:#005fb3}.md\:text-blue-800{color:#00498a}.md\:text-blue-900{color:#003461}.md\:text-blue,.md\:text-blue-DEFAULT{color:#0075db}.md\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.md\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.md\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.md\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.md\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.md\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.md\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.md\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.md\:text-indigo,.md\:text-indigo-DEFAULT{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.md\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.md\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.md\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.md\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.md\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.md\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.md\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.md\:text-purple,.md\:text-purple-DEFAULT{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:text-pink{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.md\:text-inherit{color:inherit}.md\:text-amber{color:#d78737}.md\:text-amber-active{color:#e3872b}.md\:text-ardoise{color:#596a82}.md\:text-ardoise-active{color:#476794}.md\:text-blue-active{color:#14a5c2}.md\:text-lightBlue,.md\:text-lightBlue-active{color:rgba(0,85,138,.1)}.md\:text-deepBlue{color:#0e346c}.md\:text-deepBlue-active{color:#0a3f8f}.md\:text-gold{color:#bd9e56}.md\:text-gold-active{color:#c9a34a}.md\:text-grenadine{color:#c35078}.md\:text-grenadine-active{color:#cf4475}.md\:text-kiwi{color:#9a9f1e}.md\:text-kiwi-active{color:#a3a815}.md\:text-lilas{color:#7ea1d3}.md\:text-lilas-active{color:#75a0db}.md\:text-mahogany{color:#57142e}.md\:text-mahogany-active{color:#610a2b}.md\:text-ocher{color:#c29614}.md\:text-ocher-active{color:#cd9c0a}.md\:text-pine{color:#144d52}.md\:text-pine-active{color:#0a555c}.md\:text-platinum,.md\:text-platinum-active{color:#000}.md\:text-prune{color:#661456}.md\:text-prune-active{color:#72085d}.md\:text-sand{color:#d7be88}.md\:text-sand-active{color:#dfc181}.md\:text-sandPearl{color:#f0e5d6}.md\:text-sandPearl-active{color:#f2e6d4}.md\:text-silver{color:#b1b2b4}.md\:text-silver-active{color:#a9afbc}.md\:text-skyBlue{color:#98d2d7}.md\:text-skyBlue-active{color:#91d8de}.md\:text-southSea{color:#9dc9cd}.md\:text-southSea-active{color:#95ced5}.md\:text-turquoise{color:#14a5c2}.md\:text-turquoise-active{color:#0aaccd}.md\:text-waterGreen{color:#007571}.md\:text-waterGreen-active{color:#00a8a3}.md\:text-deepRed{color:#c32222}.md\:text-deepRed-active{color:#cf1717}.md\:text-emerald{color:#14a33a}.md\:text-emerald-active{color:#0bad36}.md\:text-greenLight{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.md\:text-orange-active{color:#f65f2c}.md\:text-red-active{color:#e13737}.md\:text-white-active{color:#14a5c2}.md\:text-white-button,.md\:text-white-button-active{color:#fff}.md\:text-code{color:#3f3d57}.md\:text-code-active{color:#37354b}.md\:text-gray-lighter{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.md\:text-gray-lighter-active{color:#ebebeb}.md\:text-gray-light{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.md\:text-gray-medium{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.md\:text-gray-darker{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.md\:text-gray-darker-active{color:#14a5c2}.md\:text-api-default{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.md\:text-gray-xxl{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.md\:text-line-even{color:#f3f6f7}.md\:hover\:text-transparent:hover{color:transparent}.md\:hover\:text-current:hover{color:currentColor}.md\:hover\:text-black:hover{color:#000}.md\:hover\:text-white:hover{color:#fff}.md\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.md\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.md\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.md\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.md\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.md\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.md\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.md\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.md\:hover\:text-gray-DEFAULT:hover,.md\:hover\:text-gray:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:hover\:text-red:hover{color:#d64343}.md\:hover\:text-orange:hover{color:#eb6437}.md\:hover\:text-yellow:hover{color:#f8da30}.md\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.md\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.md\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.md\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.md\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.md\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.md\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.md\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.md\:hover\:text-green-DEFAULT:hover,.md\:hover\:text-green:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.md\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.md\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.md\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.md\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.md\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.md\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.md\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.md\:hover\:text-teal-DEFAULT:hover,.md\:hover\:text-teal:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:hover\:text-blue-50:hover{color:#d1eaff}.md\:hover\:text-blue-100:hover{color:#a8d7ff}.md\:hover\:text-blue-200:hover{color:#80c4ff}.md\:hover\:text-blue-300:hover{color:#57b0ff}.md\:hover\:text-blue-400:hover{color:#2e9dff}.md\:hover\:text-blue-500:hover{color:#058aff}.md\:hover\:text-blue-600:hover{color:#0075db}.md\:hover\:text-blue-700:hover{color:#005fb3}.md\:hover\:text-blue-800:hover{color:#00498a}.md\:hover\:text-blue-900:hover{color:#003461}.md\:hover\:text-blue-DEFAULT:hover,.md\:hover\:text-blue:hover{color:#0075db}.md\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.md\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.md\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.md\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.md\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.md\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.md\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.md\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.md\:hover\:text-indigo-DEFAULT:hover,.md\:hover\:text-indigo:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.md\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.md\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.md\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.md\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.md\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.md\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.md\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.md\:hover\:text-purple-DEFAULT:hover,.md\:hover\:text-purple:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:hover\:text-pink:hover{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.md\:hover\:text-inherit:hover{color:inherit}.md\:hover\:text-amber:hover{color:#d78737}.md\:hover\:text-amber-active:hover{color:#e3872b}.md\:hover\:text-ardoise:hover{color:#596a82}.md\:hover\:text-ardoise-active:hover{color:#476794}.md\:hover\:text-blue-active:hover{color:#14a5c2}.md\:hover\:text-lightBlue-active:hover,.md\:hover\:text-lightBlue:hover{color:rgba(0,85,138,.1)}.md\:hover\:text-deepBlue:hover{color:#0e346c}.md\:hover\:text-deepBlue-active:hover{color:#0a3f8f}.md\:hover\:text-gold:hover{color:#bd9e56}.md\:hover\:text-gold-active:hover{color:#c9a34a}.md\:hover\:text-grenadine:hover{color:#c35078}.md\:hover\:text-grenadine-active:hover{color:#cf4475}.md\:hover\:text-kiwi:hover{color:#9a9f1e}.md\:hover\:text-kiwi-active:hover{color:#a3a815}.md\:hover\:text-lilas:hover{color:#7ea1d3}.md\:hover\:text-lilas-active:hover{color:#75a0db}.md\:hover\:text-mahogany:hover{color:#57142e}.md\:hover\:text-mahogany-active:hover{color:#610a2b}.md\:hover\:text-ocher:hover{color:#c29614}.md\:hover\:text-ocher-active:hover{color:#cd9c0a}.md\:hover\:text-pine:hover{color:#144d52}.md\:hover\:text-pine-active:hover{color:#0a555c}.md\:hover\:text-platinum-active:hover,.md\:hover\:text-platinum:hover{color:#000}.md\:hover\:text-prune:hover{color:#661456}.md\:hover\:text-prune-active:hover{color:#72085d}.md\:hover\:text-sand:hover{color:#d7be88}.md\:hover\:text-sand-active:hover{color:#dfc181}.md\:hover\:text-sandPearl:hover{color:#f0e5d6}.md\:hover\:text-sandPearl-active:hover{color:#f2e6d4}.md\:hover\:text-silver:hover{color:#b1b2b4}.md\:hover\:text-silver-active:hover{color:#a9afbc}.md\:hover\:text-skyBlue:hover{color:#98d2d7}.md\:hover\:text-skyBlue-active:hover{color:#91d8de}.md\:hover\:text-southSea:hover{color:#9dc9cd}.md\:hover\:text-southSea-active:hover{color:#95ced5}.md\:hover\:text-turquoise:hover{color:#14a5c2}.md\:hover\:text-turquoise-active:hover{color:#0aaccd}.md\:hover\:text-waterGreen:hover{color:#007571}.md\:hover\:text-waterGreen-active:hover{color:#00a8a3}.md\:hover\:text-deepRed:hover{color:#c32222}.md\:hover\:text-deepRed-active:hover{color:#cf1717}.md\:hover\:text-emerald:hover{color:#14a33a}.md\:hover\:text-emerald-active:hover{color:#0bad36}.md\:hover\:text-greenLight:hover{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.md\:hover\:text-orange-active:hover{color:#f65f2c}.md\:hover\:text-red-active:hover{color:#e13737}.md\:hover\:text-white-active:hover{color:#14a5c2}.md\:hover\:text-white-button-active:hover,.md\:hover\:text-white-button:hover{color:#fff}.md\:hover\:text-code:hover{color:#3f3d57}.md\:hover\:text-code-active:hover{color:#37354b}.md\:hover\:text-gray-lighter:hover{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.md\:hover\:text-gray-lighter-active:hover{color:#ebebeb}.md\:hover\:text-gray-light:hover{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.md\:hover\:text-gray-medium:hover{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.md\:hover\:text-gray-darker:hover{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.md\:hover\:text-gray-darker-active:hover{color:#14a5c2}.md\:hover\:text-api-default:hover{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.md\:hover\:text-gray-xxl:hover{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.md\:hover\:text-line-even:hover{color:#f3f6f7}.md\:focus\:text-transparent:focus{color:transparent}.md\:focus\:text-current:focus{color:currentColor}.md\:focus\:text-black:focus{color:#000}.md\:focus\:text-white:focus{color:#fff}.md\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.md\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.md\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.md\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.md\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.md\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.md\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.md\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.md\:focus\:text-gray-DEFAULT:focus,.md\:focus\:text-gray:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:focus\:text-red:focus{color:#d64343}.md\:focus\:text-orange:focus{color:#eb6437}.md\:focus\:text-yellow:focus{color:#f8da30}.md\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.md\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.md\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.md\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.md\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.md\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.md\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.md\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.md\:focus\:text-green-DEFAULT:focus,.md\:focus\:text-green:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.md\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.md\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.md\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.md\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.md\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.md\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.md\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.md\:focus\:text-teal-DEFAULT:focus,.md\:focus\:text-teal:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:focus\:text-blue-50:focus{color:#d1eaff}.md\:focus\:text-blue-100:focus{color:#a8d7ff}.md\:focus\:text-blue-200:focus{color:#80c4ff}.md\:focus\:text-blue-300:focus{color:#57b0ff}.md\:focus\:text-blue-400:focus{color:#2e9dff}.md\:focus\:text-blue-500:focus{color:#058aff}.md\:focus\:text-blue-600:focus{color:#0075db}.md\:focus\:text-blue-700:focus{color:#005fb3}.md\:focus\:text-blue-800:focus{color:#00498a}.md\:focus\:text-blue-900:focus{color:#003461}.md\:focus\:text-blue-DEFAULT:focus,.md\:focus\:text-blue:focus{color:#0075db}.md\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.md\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.md\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.md\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.md\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.md\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.md\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.md\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.md\:focus\:text-indigo-DEFAULT:focus,.md\:focus\:text-indigo:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.md\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.md\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.md\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.md\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.md\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.md\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.md\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.md\:focus\:text-purple-DEFAULT:focus,.md\:focus\:text-purple:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:focus\:text-pink:focus{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.md\:focus\:text-inherit:focus{color:inherit}.md\:focus\:text-amber:focus{color:#d78737}.md\:focus\:text-amber-active:focus{color:#e3872b}.md\:focus\:text-ardoise:focus{color:#596a82}.md\:focus\:text-ardoise-active:focus{color:#476794}.md\:focus\:text-blue-active:focus{color:#14a5c2}.md\:focus\:text-lightBlue-active:focus,.md\:focus\:text-lightBlue:focus{color:rgba(0,85,138,.1)}.md\:focus\:text-deepBlue:focus{color:#0e346c}.md\:focus\:text-deepBlue-active:focus{color:#0a3f8f}.md\:focus\:text-gold:focus{color:#bd9e56}.md\:focus\:text-gold-active:focus{color:#c9a34a}.md\:focus\:text-grenadine:focus{color:#c35078}.md\:focus\:text-grenadine-active:focus{color:#cf4475}.md\:focus\:text-kiwi:focus{color:#9a9f1e}.md\:focus\:text-kiwi-active:focus{color:#a3a815}.md\:focus\:text-lilas:focus{color:#7ea1d3}.md\:focus\:text-lilas-active:focus{color:#75a0db}.md\:focus\:text-mahogany:focus{color:#57142e}.md\:focus\:text-mahogany-active:focus{color:#610a2b}.md\:focus\:text-ocher:focus{color:#c29614}.md\:focus\:text-ocher-active:focus{color:#cd9c0a}.md\:focus\:text-pine:focus{color:#144d52}.md\:focus\:text-pine-active:focus{color:#0a555c}.md\:focus\:text-platinum-active:focus,.md\:focus\:text-platinum:focus{color:#000}.md\:focus\:text-prune:focus{color:#661456}.md\:focus\:text-prune-active:focus{color:#72085d}.md\:focus\:text-sand:focus{color:#d7be88}.md\:focus\:text-sand-active:focus{color:#dfc181}.md\:focus\:text-sandPearl:focus{color:#f0e5d6}.md\:focus\:text-sandPearl-active:focus{color:#f2e6d4}.md\:focus\:text-silver:focus{color:#b1b2b4}.md\:focus\:text-silver-active:focus{color:#a9afbc}.md\:focus\:text-skyBlue:focus{color:#98d2d7}.md\:focus\:text-skyBlue-active:focus{color:#91d8de}.md\:focus\:text-southSea:focus{color:#9dc9cd}.md\:focus\:text-southSea-active:focus{color:#95ced5}.md\:focus\:text-turquoise:focus{color:#14a5c2}.md\:focus\:text-turquoise-active:focus{color:#0aaccd}.md\:focus\:text-waterGreen:focus{color:#007571}.md\:focus\:text-waterGreen-active:focus{color:#00a8a3}.md\:focus\:text-deepRed:focus{color:#c32222}.md\:focus\:text-deepRed-active:focus{color:#cf1717}.md\:focus\:text-emerald:focus{color:#14a33a}.md\:focus\:text-emerald-active:focus{color:#0bad36}.md\:focus\:text-greenLight:focus{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.md\:focus\:text-orange-active:focus{color:#f65f2c}.md\:focus\:text-red-active:focus{color:#e13737}.md\:focus\:text-white-active:focus{color:#14a5c2}.md\:focus\:text-white-button-active:focus,.md\:focus\:text-white-button:focus{color:#fff}.md\:focus\:text-code:focus{color:#3f3d57}.md\:focus\:text-code-active:focus{color:#37354b}.md\:focus\:text-gray-lighter:focus{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.md\:focus\:text-gray-lighter-active:focus{color:#ebebeb}.md\:focus\:text-gray-light:focus{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.md\:focus\:text-gray-medium:focus{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.md\:focus\:text-gray-darker:focus{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.md\:focus\:text-gray-darker-active:focus{color:#14a5c2}.md\:focus\:text-api-default:focus{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.md\:focus\:text-gray-xxl:focus{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.md\:focus\:text-line-even:focus{color:#f3f6f7}.md\:text-opacity-0{--text-opacity:0}.md\:text-opacity-25{--text-opacity:0.25}.md\:text-opacity-50{--text-opacity:0.5}.md\:text-opacity-75{--text-opacity:0.75}.md\:text-opacity-100{--text-opacity:1}.md\:hover\:text-opacity-0:hover{--text-opacity:0}.md\:hover\:text-opacity-25:hover{--text-opacity:0.25}.md\:hover\:text-opacity-50:hover{--text-opacity:0.5}.md\:hover\:text-opacity-75:hover{--text-opacity:0.75}.md\:hover\:text-opacity-100:hover{--text-opacity:1}.md\:focus\:text-opacity-0:focus{--text-opacity:0}.md\:focus\:text-opacity-25:focus{--text-opacity:0.25}.md\:focus\:text-opacity-50:focus{--text-opacity:0.5}.md\:focus\:text-opacity-75:focus{--text-opacity:0.75}.md\:focus\:text-opacity-100:focus{--text-opacity:1}.md\:italic{font-style:italic}.md\:not-italic{font-style:normal}.md\:uppercase{text-transform:uppercase}.md\:lowercase{text-transform:lowercase}.md\:capitalize{text-transform:capitalize}.md\:normal-case{text-transform:none}.md\:underline{text-decoration:underline}.md\:line-through{text-decoration:line-through}.md\:no-underline{text-decoration:none}.md\:hover\:underline:hover{text-decoration:underline}.md\:hover\:line-through:hover{text-decoration:line-through}.md\:hover\:no-underline:hover{text-decoration:none}.md\:focus\:underline:focus{text-decoration:underline}.md\:focus\:line-through:focus{text-decoration:line-through}.md\:focus\:no-underline:focus{text-decoration:none}.md\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.md\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.md\:diagonal-fractions,.md\:lining-nums,.md\:oldstyle-nums,.md\:ordinal,.md\:proportional-nums,.md\:slashed-zero,.md\:stacked-fractions,.md\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/);font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.md\:normal-nums{font-variant-numeric:normal}.md\:ordinal{--font-variant-numeric-ordinal:ordinal}.md\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.md\:lining-nums{--font-variant-numeric-figure:lining-nums}.md\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.md\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.md\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.md\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.md\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.md\:tracking-tighter{letter-spacing:-.05em}.md\:tracking-tight{letter-spacing:-.025em}.md\:tracking-normal{letter-spacing:0}.md\:tracking-wide{letter-spacing:.025em}.md\:tracking-wider{letter-spacing:.05em}.md\:tracking-widest{letter-spacing:.1em}.md\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.md\:select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.md\:select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.md\:align-baseline{vertical-align:baseline}.md\:align-top{vertical-align:top}.md\:align-middle{vertical-align:middle}.md\:align-bottom{vertical-align:bottom}.md\:align-text-top{vertical-align:text-top}.md\:align-text-bottom{vertical-align:text-bottom}.md\:visible{visibility:visible}.md\:invisible{visibility:hidden}.md\:whitespace-normal{white-space:normal}.md\:whitespace-no-wrap{white-space:nowrap}.md\:whitespace-pre{white-space:pre}.md\:whitespace-pre-line{white-space:pre-line}.md\:whitespace-pre-wrap{white-space:pre-wrap}.md\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.md\:break-words{word-wrap:break-word;overflow-wrap:break-word}.md\:break-all{word-break:break-all}.md\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md\:w-0{width:0}.md\:w-1{width:.25rem}.md\:w-2{width:.5rem}.md\:w-3{width:.75rem}.md\:w-4{width:1rem}.md\:w-5{width:1.25rem}.md\:w-6{width:1.5rem}.md\:w-7{width:1.75rem}.md\:w-8{width:2rem}.md\:w-9{width:2.25rem}.md\:w-10{width:2.5rem}.md\:w-11{width:2.75rem}.md\:w-12{width:3rem}.md\:w-15{width:3.75rem}.md\:w-16{width:4rem}.md\:w-20{width:5rem}.md\:w-22{width:5.5rem}.md\:w-24{width:6rem}.md\:w-25{width:6.25rem}.md\:w-26{width:6.5rem}.md\:w-28{width:8rem}.md\:w-30{width:8.5rem}.md\:w-32{width:9rem}.md\:w-40{width:10rem}.md\:w-48{width:12rem}.md\:w-52{width:13rem}.md\:w-56{width:14rem}.md\:w-60{width:15rem}.md\:w-64{width:16rem}.md\:w-68{width:17rem}.md\:w-auto{width:auto}.md\:w-px{width:1px}.md\:w-0\.5{width:.125rem}.md\:w-1\.5{width:.375rem}.md\:w-2\.5{width:.625rem}.md\:w-7\.5{width:1.875rem}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.333333%}.md\:w-2\/3{width:66.666667%}.md\:w-1\/4{width:25%}.md\:w-2\/4{width:50%}.md\:w-3\/4{width:75%}.md\:w-1\/5{width:20%}.md\:w-2\/5{width:40%}.md\:w-3\/5{width:60%}.md\:w-4\/5{width:80%}.md\:w-1\/6{width:16.666667%}.md\:w-2\/6{width:33.333333%}.md\:w-3\/6{width:50%}.md\:w-4\/6{width:66.666667%}.md\:w-5\/6{width:83.333333%}.md\:w-1\/12{width:8.333333%}.md\:w-2\/12{width:16.666667%}.md\:w-3\/12{width:25%}.md\:w-4\/12{width:33.333333%}.md\:w-5\/12{width:41.666667%}.md\:w-6\/12{width:50%}.md\:w-7\/12{width:58.333333%}.md\:w-8\/12{width:66.666667%}.md\:w-9\/12{width:75%}.md\:w-10\/12{width:83.333333%}.md\:w-11\/12{width:91.666667%}.md\:w-full{width:100%}.md\:w-screen{width:100vw}.md\:w-3\/10{width:30%}.md\:w-7\/10{width:70%}.md\:w-9\/10{width:90%}.md\:w-12\/25{width:48%}.md\:z-0{z-index:0}.md\:z-1{z-index:1}.md\:z-2{z-index:2}.md\:z-3{z-index:3}.md\:z-4{z-index:4}.md\:z-5{z-index:5}.md\:z-6{z-index:6}.md\:z-10{z-index:10}.md\:z-20{z-index:20}.md\:z-30{z-index:30}.md\:z-40{z-index:40}.md\:z-50{z-index:50}.md\:z-auto{z-index:auto}.md\:gap-0{grid-gap:0;gap:0}.md\:gap-1{grid-gap:.25rem;gap:.25rem}.md\:gap-2{grid-gap:.5rem;gap:.5rem}.md\:gap-3{grid-gap:.75rem;gap:.75rem}.md\:gap-4{grid-gap:1rem;gap:1rem}.md\:gap-5{grid-gap:1.25rem;gap:1.25rem}.md\:gap-6{grid-gap:1.5rem;gap:1.5rem}.md\:gap-7{grid-gap:1.75rem;gap:1.75rem}.md\:gap-8{grid-gap:2rem;gap:2rem}.md\:gap-9{grid-gap:2.25rem;gap:2.25rem}.md\:gap-10{grid-gap:2.5rem;gap:2.5rem}.md\:gap-11{grid-gap:2.75rem;gap:2.75rem}.md\:gap-12{grid-gap:3rem;gap:3rem}.md\:gap-15{grid-gap:3.75rem;gap:3.75rem}.md\:gap-16{grid-gap:4rem;gap:4rem}.md\:gap-20{grid-gap:5rem;gap:5rem}.md\:gap-22{grid-gap:5.5rem;gap:5.5rem}.md\:gap-24{grid-gap:6rem;gap:6rem}.md\:gap-25{grid-gap:6.25rem;gap:6.25rem}.md\:gap-26{grid-gap:6.5rem;gap:6.5rem}.md\:gap-28{grid-gap:8rem;gap:8rem}.md\:gap-30{grid-gap:8.5rem;gap:8.5rem}.md\:gap-32{grid-gap:9rem;gap:9rem}.md\:gap-40{grid-gap:10rem;gap:10rem}.md\:gap-48{grid-gap:12rem;gap:12rem}.md\:gap-52{grid-gap:13rem;gap:13rem}.md\:gap-56{grid-gap:14rem;gap:14rem}.md\:gap-60{grid-gap:15rem;gap:15rem}.md\:gap-64{grid-gap:16rem;gap:16rem}.md\:gap-68{grid-gap:17rem;gap:17rem}.md\:gap-px{grid-gap:1px;gap:1px}.md\:gap-0\.5{grid-gap:.125rem;gap:.125rem}.md\:gap-1\.5{grid-gap:.375rem;gap:.375rem}.md\:gap-2\.5{grid-gap:.625rem;gap:.625rem}.md\:gap-7\.5{grid-gap:1.875rem;gap:1.875rem}.md\:col-gap-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.md\:col-gap-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.md\:col-gap-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.md\:col-gap-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.md\:col-gap-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.md\:col-gap-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.md\:col-gap-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:col-gap-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.md\:col-gap-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.md\:col-gap-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.md\:col-gap-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.md\:col-gap-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.md\:col-gap-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.md\:col-gap-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.md\:col-gap-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.md\:col-gap-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.md\:col-gap-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.md\:col-gap-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.md\:col-gap-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.md\:col-gap-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.md\:col-gap-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.md\:col-gap-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.md\:col-gap-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.md\:col-gap-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.md\:col-gap-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.md\:col-gap-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.md\:col-gap-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.md\:col-gap-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.md\:col-gap-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.md\:col-gap-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.md\:col-gap-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.md\:col-gap-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.md\:col-gap-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.md\:col-gap-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.md\:col-gap-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.md\:gap-x-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.md\:gap-x-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.md\:gap-x-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.md\:gap-x-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.md\:gap-x-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.md\:gap-x-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.md\:gap-x-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:gap-x-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.md\:gap-x-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.md\:gap-x-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.md\:gap-x-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.md\:gap-x-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.md\:gap-x-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.md\:gap-x-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.md\:gap-x-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.md\:gap-x-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.md\:gap-x-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.md\:gap-x-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.md\:gap-x-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.md\:gap-x-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.md\:gap-x-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.md\:gap-x-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.md\:gap-x-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.md\:gap-x-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.md\:gap-x-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.md\:gap-x-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.md\:gap-x-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.md\:gap-x-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.md\:gap-x-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.md\:gap-x-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.md\:gap-x-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.md\:gap-x-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.md\:gap-x-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.md\:gap-x-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.md\:gap-x-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.md\:row-gap-0{grid-row-gap:0;row-gap:0}.md\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.md\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.md\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.md\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.md\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.md\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.md\:row-gap-7{grid-row-gap:1.75rem;row-gap:1.75rem}.md\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.md\:row-gap-9{grid-row-gap:2.25rem;row-gap:2.25rem}.md\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.md\:row-gap-11{grid-row-gap:2.75rem;row-gap:2.75rem}.md\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.md\:row-gap-15{grid-row-gap:3.75rem;row-gap:3.75rem}.md\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.md\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.md\:row-gap-22{grid-row-gap:5.5rem;row-gap:5.5rem}.md\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.md\:row-gap-25{grid-row-gap:6.25rem;row-gap:6.25rem}.md\:row-gap-26{grid-row-gap:6.5rem;row-gap:6.5rem}.md\:row-gap-28{grid-row-gap:8rem;row-gap:8rem}.md\:row-gap-30{grid-row-gap:8.5rem;row-gap:8.5rem}.md\:row-gap-32{grid-row-gap:9rem;row-gap:9rem}.md\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.md\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.md\:row-gap-52{grid-row-gap:13rem;row-gap:13rem}.md\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.md\:row-gap-60{grid-row-gap:15rem;row-gap:15rem}.md\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.md\:row-gap-68{grid-row-gap:17rem;row-gap:17rem}.md\:row-gap-px{grid-row-gap:1px;row-gap:1px}.md\:row-gap-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.md\:row-gap-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.md\:row-gap-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.md\:row-gap-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.md\:gap-y-0{grid-row-gap:0;row-gap:0}.md\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.md\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.md\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.md\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.md\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.md\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.md\:gap-y-7{grid-row-gap:1.75rem;row-gap:1.75rem}.md\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.md\:gap-y-9{grid-row-gap:2.25rem;row-gap:2.25rem}.md\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.md\:gap-y-11{grid-row-gap:2.75rem;row-gap:2.75rem}.md\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.md\:gap-y-15{grid-row-gap:3.75rem;row-gap:3.75rem}.md\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.md\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.md\:gap-y-22{grid-row-gap:5.5rem;row-gap:5.5rem}.md\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.md\:gap-y-25{grid-row-gap:6.25rem;row-gap:6.25rem}.md\:gap-y-26{grid-row-gap:6.5rem;row-gap:6.5rem}.md\:gap-y-28{grid-row-gap:8rem;row-gap:8rem}.md\:gap-y-30{grid-row-gap:8.5rem;row-gap:8.5rem}.md\:gap-y-32{grid-row-gap:9rem;row-gap:9rem}.md\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.md\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.md\:gap-y-52{grid-row-gap:13rem;row-gap:13rem}.md\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.md\:gap-y-60{grid-row-gap:15rem;row-gap:15rem}.md\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.md\:gap-y-68{grid-row-gap:17rem;row-gap:17rem}.md\:gap-y-px{grid-row-gap:1px;row-gap:1px}.md\:gap-y-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.md\:gap-y-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.md\:gap-y-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.md\:gap-y-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.md\:grid-flow-row{grid-auto-flow:row}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-flow-row-dense{grid-auto-flow:row dense}.md\:grid-flow-col-dense{grid-auto-flow:column dense}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-none{grid-template-columns:none}.md\:auto-cols-auto{grid-auto-columns:auto}.md\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.md\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.md\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.md\:col-auto{grid-column:auto}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:col-span-9{grid-column:span 9/span 9}.md\:col-span-10{grid-column:span 10/span 10}.md\:col-span-11{grid-column:span 11/span 11}.md\:col-span-12{grid-column:span 12/span 12}.md\:col-span-full{grid-column:1/-1}.md\:col-start-1{grid-column-start:1}.md\:col-start-2{grid-column-start:2}.md\:col-start-3{grid-column-start:3}.md\:col-start-4{grid-column-start:4}.md\:col-start-5{grid-column-start:5}.md\:col-start-6{grid-column-start:6}.md\:col-start-7{grid-column-start:7}.md\:col-start-8{grid-column-start:8}.md\:col-start-9{grid-column-start:9}.md\:col-start-10{grid-column-start:10}.md\:col-start-11{grid-column-start:11}.md\:col-start-12{grid-column-start:12}.md\:col-start-13{grid-column-start:13}.md\:col-start-auto{grid-column-start:auto}.md\:col-end-1{grid-column-end:1}.md\:col-end-2{grid-column-end:2}.md\:col-end-3{grid-column-end:3}.md\:col-end-4{grid-column-end:4}.md\:col-end-5{grid-column-end:5}.md\:col-end-6{grid-column-end:6}.md\:col-end-7{grid-column-end:7}.md\:col-end-8{grid-column-end:8}.md\:col-end-9{grid-column-end:9}.md\:col-end-10{grid-column-end:10}.md\:col-end-11{grid-column-end:11}.md\:col-end-12{grid-column-end:12}.md\:col-end-13{grid-column-end:13}.md\:col-end-auto{grid-column-end:auto}.md\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.md\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.md\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.md\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.md\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.md\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.md\:grid-rows-none{grid-template-rows:none}.md\:auto-rows-auto{grid-auto-rows:auto}.md\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.md\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.md\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.md\:row-auto{grid-row:auto}.md\:row-span-1{grid-row:span 1/span 1}.md\:row-span-2{grid-row:span 2/span 2}.md\:row-span-3{grid-row:span 3/span 3}.md\:row-span-4{grid-row:span 4/span 4}.md\:row-span-5{grid-row:span 5/span 5}.md\:row-span-6{grid-row:span 6/span 6}.md\:row-span-full{grid-row:1/-1}.md\:row-start-1{grid-row-start:1}.md\:row-start-2{grid-row-start:2}.md\:row-start-3{grid-row-start:3}.md\:row-start-4{grid-row-start:4}.md\:row-start-5{grid-row-start:5}.md\:row-start-6{grid-row-start:6}.md\:row-start-7{grid-row-start:7}.md\:row-start-auto{grid-row-start:auto}.md\:row-end-1{grid-row-end:1}.md\:row-end-2{grid-row-end:2}.md\:row-end-3{grid-row-end:3}.md\:row-end-4{grid-row-end:4}.md\:row-end-5{grid-row-end:5}.md\:row-end-6{grid-row-end:6}.md\:row-end-7{grid-row-end:7}.md\:row-end-auto{grid-row-end:auto}.md\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.md\:origin-center{transform-origin:center}.md\:origin-top{transform-origin:top}.md\:origin-top-right{transform-origin:top right}.md\:origin-right{transform-origin:right}.md\:origin-bottom-right{transform-origin:bottom right}.md\:origin-bottom{transform-origin:bottom}.md\:origin-bottom-left{transform-origin:bottom left}.md\:origin-left{transform-origin:left}.md\:origin-top-left{transform-origin:top left}.md\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.md\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.md\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.md\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.md\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.md\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.md\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.md\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.md\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.md\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.md\:scale-x-0{--transform-scale-x:0}.md\:scale-x-50{--transform-scale-x:.5}.md\:scale-x-75{--transform-scale-x:.75}.md\:scale-x-90{--transform-scale-x:.9}.md\:scale-x-95{--transform-scale-x:.95}.md\:scale-x-100{--transform-scale-x:1}.md\:scale-x-105{--transform-scale-x:1.05}.md\:scale-x-110{--transform-scale-x:1.1}.md\:scale-x-125{--transform-scale-x:1.25}.md\:scale-x-150{--transform-scale-x:1.5}.md\:scale-y-0{--transform-scale-y:0}.md\:scale-y-50{--transform-scale-y:.5}.md\:scale-y-75{--transform-scale-y:.75}.md\:scale-y-90{--transform-scale-y:.9}.md\:scale-y-95{--transform-scale-y:.95}.md\:scale-y-100{--transform-scale-y:1}.md\:scale-y-105{--transform-scale-y:1.05}.md\:scale-y-110{--transform-scale-y:1.1}.md\:scale-y-125{--transform-scale-y:1.25}.md\:scale-y-150{--transform-scale-y:1.5}.md\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.md\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.md\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.md\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.md\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.md\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.md\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.md\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.md\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.md\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.md\:hover\:scale-x-0:hover{--transform-scale-x:0}.md\:hover\:scale-x-50:hover{--transform-scale-x:.5}.md\:hover\:scale-x-75:hover{--transform-scale-x:.75}.md\:hover\:scale-x-90:hover{--transform-scale-x:.9}.md\:hover\:scale-x-95:hover{--transform-scale-x:.95}.md\:hover\:scale-x-100:hover{--transform-scale-x:1}.md\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.md\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.md\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.md\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.md\:hover\:scale-y-0:hover{--transform-scale-y:0}.md\:hover\:scale-y-50:hover{--transform-scale-y:.5}.md\:hover\:scale-y-75:hover{--transform-scale-y:.75}.md\:hover\:scale-y-90:hover{--transform-scale-y:.9}.md\:hover\:scale-y-95:hover{--transform-scale-y:.95}.md\:hover\:scale-y-100:hover{--transform-scale-y:1}.md\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.md\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.md\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.md\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.md\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.md\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.md\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.md\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.md\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.md\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.md\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.md\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.md\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.md\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.md\:focus\:scale-x-0:focus{--transform-scale-x:0}.md\:focus\:scale-x-50:focus{--transform-scale-x:.5}.md\:focus\:scale-x-75:focus{--transform-scale-x:.75}.md\:focus\:scale-x-90:focus{--transform-scale-x:.9}.md\:focus\:scale-x-95:focus{--transform-scale-x:.95}.md\:focus\:scale-x-100:focus{--transform-scale-x:1}.md\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.md\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.md\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.md\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.md\:focus\:scale-y-0:focus{--transform-scale-y:0}.md\:focus\:scale-y-50:focus{--transform-scale-y:.5}.md\:focus\:scale-y-75:focus{--transform-scale-y:.75}.md\:focus\:scale-y-90:focus{--transform-scale-y:.9}.md\:focus\:scale-y-95:focus{--transform-scale-y:.95}.md\:focus\:scale-y-100:focus{--transform-scale-y:1}.md\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.md\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.md\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.md\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.md\:rotate-0{--transform-rotate:0}.md\:rotate-90{--transform-rotate:90deg}.md\:rotate-135{--transform-rotate:135deg}.md\:rotate-180{--transform-rotate:180deg}.md\:-rotate-180{--transform-rotate:-180deg}.md\:-rotate-135{--transform-rotate:-135deg}.md\:-rotate-90{--transform-rotate:-90deg}.md\:hover\:rotate-0:hover{--transform-rotate:0}.md\:hover\:rotate-90:hover{--transform-rotate:90deg}.md\:hover\:rotate-135:hover{--transform-rotate:135deg}.md\:hover\:rotate-180:hover{--transform-rotate:180deg}.md\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.md\:hover\:-rotate-135:hover{--transform-rotate:-135deg}.md\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.md\:focus\:rotate-0:focus{--transform-rotate:0}.md\:focus\:rotate-90:focus{--transform-rotate:90deg}.md\:focus\:rotate-135:focus{--transform-rotate:135deg}.md\:focus\:rotate-180:focus{--transform-rotate:180deg}.md\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.md\:focus\:-rotate-135:focus{--transform-rotate:-135deg}.md\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.md\:translate-x-0{--transform-translate-x:0}.md\:translate-x-1{--transform-translate-x:.25rem}.md\:translate-x-2{--transform-translate-x:.5rem}.md\:translate-x-3{--transform-translate-x:.75rem}.md\:translate-x-4{--transform-translate-x:1rem}.md\:translate-x-5{--transform-translate-x:1.25rem}.md\:translate-x-6{--transform-translate-x:1.5rem}.md\:translate-x-7{--transform-translate-x:1.75rem}.md\:translate-x-8{--transform-translate-x:2rem}.md\:translate-x-9{--transform-translate-x:2.25rem}.md\:translate-x-10{--transform-translate-x:2.5rem}.md\:translate-x-11{--transform-translate-x:2.75rem}.md\:translate-x-12{--transform-translate-x:3rem}.md\:translate-x-15{--transform-translate-x:3.75rem}.md\:translate-x-16{--transform-translate-x:4rem}.md\:translate-x-20{--transform-translate-x:5rem}.md\:translate-x-22{--transform-translate-x:5.5rem}.md\:translate-x-24{--transform-translate-x:6rem}.md\:translate-x-25{--transform-translate-x:6.25rem}.md\:translate-x-26{--transform-translate-x:6.5rem}.md\:translate-x-28{--transform-translate-x:8rem}.md\:translate-x-30{--transform-translate-x:8.5rem}.md\:translate-x-32{--transform-translate-x:9rem}.md\:translate-x-40{--transform-translate-x:10rem}.md\:translate-x-48{--transform-translate-x:12rem}.md\:translate-x-52{--transform-translate-x:13rem}.md\:translate-x-56{--transform-translate-x:14rem}.md\:translate-x-60{--transform-translate-x:15rem}.md\:translate-x-64{--transform-translate-x:16rem}.md\:translate-x-68{--transform-translate-x:17rem}.md\:translate-x-px{--transform-translate-x:1px}.md\:translate-x-0\.5{--transform-translate-x:.125rem}.md\:translate-x-1\.5{--transform-translate-x:.375rem}.md\:translate-x-2\.5{--transform-translate-x:.625rem}.md\:translate-x-7\.5{--transform-translate-x:1.875rem}.md\:-translate-x-1{--transform-translate-x:-0.25rem}.md\:-translate-x-2{--transform-translate-x:-0.5rem}.md\:-translate-x-3{--transform-translate-x:-0.75rem}.md\:-translate-x-4{--transform-translate-x:-1rem}.md\:-translate-x-5{--transform-translate-x:-1.25rem}.md\:-translate-x-6{--transform-translate-x:-1.5rem}.md\:-translate-x-7{--transform-translate-x:-1.75rem}.md\:-translate-x-8{--transform-translate-x:-2rem}.md\:-translate-x-9{--transform-translate-x:-2.25rem}.md\:-translate-x-10{--transform-translate-x:-2.5rem}.md\:-translate-x-11{--transform-translate-x:-2.75rem}.md\:-translate-x-12{--transform-translate-x:-3rem}.md\:-translate-x-15{--transform-translate-x:-3.75rem}.md\:-translate-x-16{--transform-translate-x:-4rem}.md\:-translate-x-20{--transform-translate-x:-5rem}.md\:-translate-x-22{--transform-translate-x:-5.5rem}.md\:-translate-x-24{--transform-translate-x:-6rem}.md\:-translate-x-25{--transform-translate-x:-6.25rem}.md\:-translate-x-26{--transform-translate-x:-6.5rem}.md\:-translate-x-28{--transform-translate-x:-8rem}.md\:-translate-x-30{--transform-translate-x:-8.5rem}.md\:-translate-x-32{--transform-translate-x:-9rem}.md\:-translate-x-40{--transform-translate-x:-10rem}.md\:-translate-x-48{--transform-translate-x:-12rem}.md\:-translate-x-52{--transform-translate-x:-13rem}.md\:-translate-x-56{--transform-translate-x:-14rem}.md\:-translate-x-60{--transform-translate-x:-15rem}.md\:-translate-x-64{--transform-translate-x:-16rem}.md\:-translate-x-68{--transform-translate-x:-17rem}.md\:-translate-x-px{--transform-translate-x:-1px}.md\:-translate-x-0\.5{--transform-translate-x:-0.125rem}.md\:-translate-x-1\.5{--transform-translate-x:-0.375rem}.md\:-translate-x-2\.5{--transform-translate-x:-0.625rem}.md\:-translate-x-7\.5{--transform-translate-x:-1.875rem}.md\:-translate-x-full{--transform-translate-x:-100%}.md\:-translate-x-1\/2{--transform-translate-x:-50%}.md\:translate-x-1\/2{--transform-translate-x:50%}.md\:translate-x-full{--transform-translate-x:100%}.md\:translate-y-0{--transform-translate-y:0}.md\:translate-y-1{--transform-translate-y:.25rem}.md\:translate-y-2{--transform-translate-y:.5rem}.md\:translate-y-3{--transform-translate-y:.75rem}.md\:translate-y-4{--transform-translate-y:1rem}.md\:translate-y-5{--transform-translate-y:1.25rem}.md\:translate-y-6{--transform-translate-y:1.5rem}.md\:translate-y-7{--transform-translate-y:1.75rem}.md\:translate-y-8{--transform-translate-y:2rem}.md\:translate-y-9{--transform-translate-y:2.25rem}.md\:translate-y-10{--transform-translate-y:2.5rem}.md\:translate-y-11{--transform-translate-y:2.75rem}.md\:translate-y-12{--transform-translate-y:3rem}.md\:translate-y-15{--transform-translate-y:3.75rem}.md\:translate-y-16{--transform-translate-y:4rem}.md\:translate-y-20{--transform-translate-y:5rem}.md\:translate-y-22{--transform-translate-y:5.5rem}.md\:translate-y-24{--transform-translate-y:6rem}.md\:translate-y-25{--transform-translate-y:6.25rem}.md\:translate-y-26{--transform-translate-y:6.5rem}.md\:translate-y-28{--transform-translate-y:8rem}.md\:translate-y-30{--transform-translate-y:8.5rem}.md\:translate-y-32{--transform-translate-y:9rem}.md\:translate-y-40{--transform-translate-y:10rem}.md\:translate-y-48{--transform-translate-y:12rem}.md\:translate-y-52{--transform-translate-y:13rem}.md\:translate-y-56{--transform-translate-y:14rem}.md\:translate-y-60{--transform-translate-y:15rem}.md\:translate-y-64{--transform-translate-y:16rem}.md\:translate-y-68{--transform-translate-y:17rem}.md\:translate-y-px{--transform-translate-y:1px}.md\:translate-y-0\.5{--transform-translate-y:.125rem}.md\:translate-y-1\.5{--transform-translate-y:.375rem}.md\:translate-y-2\.5{--transform-translate-y:.625rem}.md\:translate-y-7\.5{--transform-translate-y:1.875rem}.md\:-translate-y-1{--transform-translate-y:-0.25rem}.md\:-translate-y-2{--transform-translate-y:-0.5rem}.md\:-translate-y-3{--transform-translate-y:-0.75rem}.md\:-translate-y-4{--transform-translate-y:-1rem}.md\:-translate-y-5{--transform-translate-y:-1.25rem}.md\:-translate-y-6{--transform-translate-y:-1.5rem}.md\:-translate-y-7{--transform-translate-y:-1.75rem}.md\:-translate-y-8{--transform-translate-y:-2rem}.md\:-translate-y-9{--transform-translate-y:-2.25rem}.md\:-translate-y-10{--transform-translate-y:-2.5rem}.md\:-translate-y-11{--transform-translate-y:-2.75rem}.md\:-translate-y-12{--transform-translate-y:-3rem}.md\:-translate-y-15{--transform-translate-y:-3.75rem}.md\:-translate-y-16{--transform-translate-y:-4rem}.md\:-translate-y-20{--transform-translate-y:-5rem}.md\:-translate-y-22{--transform-translate-y:-5.5rem}.md\:-translate-y-24{--transform-translate-y:-6rem}.md\:-translate-y-25{--transform-translate-y:-6.25rem}.md\:-translate-y-26{--transform-translate-y:-6.5rem}.md\:-translate-y-28{--transform-translate-y:-8rem}.md\:-translate-y-30{--transform-translate-y:-8.5rem}.md\:-translate-y-32{--transform-translate-y:-9rem}.md\:-translate-y-40{--transform-translate-y:-10rem}.md\:-translate-y-48{--transform-translate-y:-12rem}.md\:-translate-y-52{--transform-translate-y:-13rem}.md\:-translate-y-56{--transform-translate-y:-14rem}.md\:-translate-y-60{--transform-translate-y:-15rem}.md\:-translate-y-64{--transform-translate-y:-16rem}.md\:-translate-y-68{--transform-translate-y:-17rem}.md\:-translate-y-px{--transform-translate-y:-1px}.md\:-translate-y-0\.5{--transform-translate-y:-0.125rem}.md\:-translate-y-1\.5{--transform-translate-y:-0.375rem}.md\:-translate-y-2\.5{--transform-translate-y:-0.625rem}.md\:-translate-y-7\.5{--transform-translate-y:-1.875rem}.md\:-translate-y-full{--transform-translate-y:-100%}.md\:-translate-y-1\/2{--transform-translate-y:-50%}.md\:translate-y-1\/2{--transform-translate-y:50%}.md\:translate-y-full{--transform-translate-y:100%}.md\:hover\:translate-x-0:hover{--transform-translate-x:0}.md\:hover\:translate-x-1:hover{--transform-translate-x:.25rem}.md\:hover\:translate-x-2:hover{--transform-translate-x:.5rem}.md\:hover\:translate-x-3:hover{--transform-translate-x:.75rem}.md\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.md\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.md\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.md\:hover\:translate-x-7:hover{--transform-translate-x:1.75rem}.md\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.md\:hover\:translate-x-9:hover{--transform-translate-x:2.25rem}.md\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.md\:hover\:translate-x-11:hover{--transform-translate-x:2.75rem}.md\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.md\:hover\:translate-x-15:hover{--transform-translate-x:3.75rem}.md\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.md\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.md\:hover\:translate-x-22:hover{--transform-translate-x:5.5rem}.md\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.md\:hover\:translate-x-25:hover{--transform-translate-x:6.25rem}.md\:hover\:translate-x-26:hover{--transform-translate-x:6.5rem}.md\:hover\:translate-x-28:hover{--transform-translate-x:8rem}.md\:hover\:translate-x-30:hover{--transform-translate-x:8.5rem}.md\:hover\:translate-x-32:hover{--transform-translate-x:9rem}.md\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.md\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.md\:hover\:translate-x-52:hover{--transform-translate-x:13rem}.md\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.md\:hover\:translate-x-60:hover{--transform-translate-x:15rem}.md\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.md\:hover\:translate-x-68:hover{--transform-translate-x:17rem}.md\:hover\:translate-x-px:hover{--transform-translate-x:1px}.md\:hover\:translate-x-0\.5:hover{--transform-translate-x:.125rem}.md\:hover\:translate-x-1\.5:hover{--transform-translate-x:.375rem}.md\:hover\:translate-x-2\.5:hover{--transform-translate-x:.625rem}.md\:hover\:translate-x-7\.5:hover{--transform-translate-x:1.875rem}.md\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.md\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.md\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.md\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.md\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.md\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.md\:hover\:-translate-x-7:hover{--transform-translate-x:-1.75rem}.md\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.md\:hover\:-translate-x-9:hover{--transform-translate-x:-2.25rem}.md\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.md\:hover\:-translate-x-11:hover{--transform-translate-x:-2.75rem}.md\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.md\:hover\:-translate-x-15:hover{--transform-translate-x:-3.75rem}.md\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.md\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.md\:hover\:-translate-x-22:hover{--transform-translate-x:-5.5rem}.md\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.md\:hover\:-translate-x-25:hover{--transform-translate-x:-6.25rem}.md\:hover\:-translate-x-26:hover{--transform-translate-x:-6.5rem}.md\:hover\:-translate-x-28:hover{--transform-translate-x:-8rem}.md\:hover\:-translate-x-30:hover{--transform-translate-x:-8.5rem}.md\:hover\:-translate-x-32:hover{--transform-translate-x:-9rem}.md\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.md\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.md\:hover\:-translate-x-52:hover{--transform-translate-x:-13rem}.md\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.md\:hover\:-translate-x-60:hover{--transform-translate-x:-15rem}.md\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.md\:hover\:-translate-x-68:hover{--transform-translate-x:-17rem}.md\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.md\:hover\:-translate-x-0\.5:hover{--transform-translate-x:-0.125rem}.md\:hover\:-translate-x-1\.5:hover{--transform-translate-x:-0.375rem}.md\:hover\:-translate-x-2\.5:hover{--transform-translate-x:-0.625rem}.md\:hover\:-translate-x-7\.5:hover{--transform-translate-x:-1.875rem}.md\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.md\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.md\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.md\:hover\:translate-x-full:hover{--transform-translate-x:100%}.md\:hover\:translate-y-0:hover{--transform-translate-y:0}.md\:hover\:translate-y-1:hover{--transform-translate-y:.25rem}.md\:hover\:translate-y-2:hover{--transform-translate-y:.5rem}.md\:hover\:translate-y-3:hover{--transform-translate-y:.75rem}.md\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.md\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.md\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.md\:hover\:translate-y-7:hover{--transform-translate-y:1.75rem}.md\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.md\:hover\:translate-y-9:hover{--transform-translate-y:2.25rem}.md\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.md\:hover\:translate-y-11:hover{--transform-translate-y:2.75rem}.md\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.md\:hover\:translate-y-15:hover{--transform-translate-y:3.75rem}.md\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.md\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.md\:hover\:translate-y-22:hover{--transform-translate-y:5.5rem}.md\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.md\:hover\:translate-y-25:hover{--transform-translate-y:6.25rem}.md\:hover\:translate-y-26:hover{--transform-translate-y:6.5rem}.md\:hover\:translate-y-28:hover{--transform-translate-y:8rem}.md\:hover\:translate-y-30:hover{--transform-translate-y:8.5rem}.md\:hover\:translate-y-32:hover{--transform-translate-y:9rem}.md\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.md\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.md\:hover\:translate-y-52:hover{--transform-translate-y:13rem}.md\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.md\:hover\:translate-y-60:hover{--transform-translate-y:15rem}.md\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.md\:hover\:translate-y-68:hover{--transform-translate-y:17rem}.md\:hover\:translate-y-px:hover{--transform-translate-y:1px}.md\:hover\:translate-y-0\.5:hover{--transform-translate-y:.125rem}.md\:hover\:translate-y-1\.5:hover{--transform-translate-y:.375rem}.md\:hover\:translate-y-2\.5:hover{--transform-translate-y:.625rem}.md\:hover\:translate-y-7\.5:hover{--transform-translate-y:1.875rem}.md\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.md\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.md\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.md\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.md\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.md\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.md\:hover\:-translate-y-7:hover{--transform-translate-y:-1.75rem}.md\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.md\:hover\:-translate-y-9:hover{--transform-translate-y:-2.25rem}.md\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.md\:hover\:-translate-y-11:hover{--transform-translate-y:-2.75rem}.md\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.md\:hover\:-translate-y-15:hover{--transform-translate-y:-3.75rem}.md\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.md\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.md\:hover\:-translate-y-22:hover{--transform-translate-y:-5.5rem}.md\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.md\:hover\:-translate-y-25:hover{--transform-translate-y:-6.25rem}.md\:hover\:-translate-y-26:hover{--transform-translate-y:-6.5rem}.md\:hover\:-translate-y-28:hover{--transform-translate-y:-8rem}.md\:hover\:-translate-y-30:hover{--transform-translate-y:-8.5rem}.md\:hover\:-translate-y-32:hover{--transform-translate-y:-9rem}.md\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.md\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.md\:hover\:-translate-y-52:hover{--transform-translate-y:-13rem}.md\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.md\:hover\:-translate-y-60:hover{--transform-translate-y:-15rem}.md\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.md\:hover\:-translate-y-68:hover{--transform-translate-y:-17rem}.md\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.md\:hover\:-translate-y-0\.5:hover{--transform-translate-y:-0.125rem}.md\:hover\:-translate-y-1\.5:hover{--transform-translate-y:-0.375rem}.md\:hover\:-translate-y-2\.5:hover{--transform-translate-y:-0.625rem}.md\:hover\:-translate-y-7\.5:hover{--transform-translate-y:-1.875rem}.md\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.md\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.md\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.md\:hover\:translate-y-full:hover{--transform-translate-y:100%}.md\:focus\:translate-x-0:focus{--transform-translate-x:0}.md\:focus\:translate-x-1:focus{--transform-translate-x:.25rem}.md\:focus\:translate-x-2:focus{--transform-translate-x:.5rem}.md\:focus\:translate-x-3:focus{--transform-translate-x:.75rem}.md\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.md\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.md\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.md\:focus\:translate-x-7:focus{--transform-translate-x:1.75rem}.md\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.md\:focus\:translate-x-9:focus{--transform-translate-x:2.25rem}.md\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.md\:focus\:translate-x-11:focus{--transform-translate-x:2.75rem}.md\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.md\:focus\:translate-x-15:focus{--transform-translate-x:3.75rem}.md\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.md\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.md\:focus\:translate-x-22:focus{--transform-translate-x:5.5rem}.md\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.md\:focus\:translate-x-25:focus{--transform-translate-x:6.25rem}.md\:focus\:translate-x-26:focus{--transform-translate-x:6.5rem}.md\:focus\:translate-x-28:focus{--transform-translate-x:8rem}.md\:focus\:translate-x-30:focus{--transform-translate-x:8.5rem}.md\:focus\:translate-x-32:focus{--transform-translate-x:9rem}.md\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.md\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.md\:focus\:translate-x-52:focus{--transform-translate-x:13rem}.md\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.md\:focus\:translate-x-60:focus{--transform-translate-x:15rem}.md\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.md\:focus\:translate-x-68:focus{--transform-translate-x:17rem}.md\:focus\:translate-x-px:focus{--transform-translate-x:1px}.md\:focus\:translate-x-0\.5:focus{--transform-translate-x:.125rem}.md\:focus\:translate-x-1\.5:focus{--transform-translate-x:.375rem}.md\:focus\:translate-x-2\.5:focus{--transform-translate-x:.625rem}.md\:focus\:translate-x-7\.5:focus{--transform-translate-x:1.875rem}.md\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.md\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.md\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.md\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.md\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.md\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.md\:focus\:-translate-x-7:focus{--transform-translate-x:-1.75rem}.md\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.md\:focus\:-translate-x-9:focus{--transform-translate-x:-2.25rem}.md\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.md\:focus\:-translate-x-11:focus{--transform-translate-x:-2.75rem}.md\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.md\:focus\:-translate-x-15:focus{--transform-translate-x:-3.75rem}.md\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.md\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.md\:focus\:-translate-x-22:focus{--transform-translate-x:-5.5rem}.md\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.md\:focus\:-translate-x-25:focus{--transform-translate-x:-6.25rem}.md\:focus\:-translate-x-26:focus{--transform-translate-x:-6.5rem}.md\:focus\:-translate-x-28:focus{--transform-translate-x:-8rem}.md\:focus\:-translate-x-30:focus{--transform-translate-x:-8.5rem}.md\:focus\:-translate-x-32:focus{--transform-translate-x:-9rem}.md\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.md\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.md\:focus\:-translate-x-52:focus{--transform-translate-x:-13rem}.md\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.md\:focus\:-translate-x-60:focus{--transform-translate-x:-15rem}.md\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.md\:focus\:-translate-x-68:focus{--transform-translate-x:-17rem}.md\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.md\:focus\:-translate-x-0\.5:focus{--transform-translate-x:-0.125rem}.md\:focus\:-translate-x-1\.5:focus{--transform-translate-x:-0.375rem}.md\:focus\:-translate-x-2\.5:focus{--transform-translate-x:-0.625rem}.md\:focus\:-translate-x-7\.5:focus{--transform-translate-x:-1.875rem}.md\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.md\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.md\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.md\:focus\:translate-x-full:focus{--transform-translate-x:100%}.md\:focus\:translate-y-0:focus{--transform-translate-y:0}.md\:focus\:translate-y-1:focus{--transform-translate-y:.25rem}.md\:focus\:translate-y-2:focus{--transform-translate-y:.5rem}.md\:focus\:translate-y-3:focus{--transform-translate-y:.75rem}.md\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.md\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.md\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.md\:focus\:translate-y-7:focus{--transform-translate-y:1.75rem}.md\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.md\:focus\:translate-y-9:focus{--transform-translate-y:2.25rem}.md\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.md\:focus\:translate-y-11:focus{--transform-translate-y:2.75rem}.md\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.md\:focus\:translate-y-15:focus{--transform-translate-y:3.75rem}.md\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.md\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.md\:focus\:translate-y-22:focus{--transform-translate-y:5.5rem}.md\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.md\:focus\:translate-y-25:focus{--transform-translate-y:6.25rem}.md\:focus\:translate-y-26:focus{--transform-translate-y:6.5rem}.md\:focus\:translate-y-28:focus{--transform-translate-y:8rem}.md\:focus\:translate-y-30:focus{--transform-translate-y:8.5rem}.md\:focus\:translate-y-32:focus{--transform-translate-y:9rem}.md\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.md\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.md\:focus\:translate-y-52:focus{--transform-translate-y:13rem}.md\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.md\:focus\:translate-y-60:focus{--transform-translate-y:15rem}.md\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.md\:focus\:translate-y-68:focus{--transform-translate-y:17rem}.md\:focus\:translate-y-px:focus{--transform-translate-y:1px}.md\:focus\:translate-y-0\.5:focus{--transform-translate-y:.125rem}.md\:focus\:translate-y-1\.5:focus{--transform-translate-y:.375rem}.md\:focus\:translate-y-2\.5:focus{--transform-translate-y:.625rem}.md\:focus\:translate-y-7\.5:focus{--transform-translate-y:1.875rem}.md\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.md\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.md\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.md\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.md\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.md\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.md\:focus\:-translate-y-7:focus{--transform-translate-y:-1.75rem}.md\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.md\:focus\:-translate-y-9:focus{--transform-translate-y:-2.25rem}.md\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.md\:focus\:-translate-y-11:focus{--transform-translate-y:-2.75rem}.md\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.md\:focus\:-translate-y-15:focus{--transform-translate-y:-3.75rem}.md\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.md\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.md\:focus\:-translate-y-22:focus{--transform-translate-y:-5.5rem}.md\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.md\:focus\:-translate-y-25:focus{--transform-translate-y:-6.25rem}.md\:focus\:-translate-y-26:focus{--transform-translate-y:-6.5rem}.md\:focus\:-translate-y-28:focus{--transform-translate-y:-8rem}.md\:focus\:-translate-y-30:focus{--transform-translate-y:-8.5rem}.md\:focus\:-translate-y-32:focus{--transform-translate-y:-9rem}.md\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.md\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.md\:focus\:-translate-y-52:focus{--transform-translate-y:-13rem}.md\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.md\:focus\:-translate-y-60:focus{--transform-translate-y:-15rem}.md\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.md\:focus\:-translate-y-68:focus{--transform-translate-y:-17rem}.md\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.md\:focus\:-translate-y-0\.5:focus{--transform-translate-y:-0.125rem}.md\:focus\:-translate-y-1\.5:focus{--transform-translate-y:-0.375rem}.md\:focus\:-translate-y-2\.5:focus{--transform-translate-y:-0.625rem}.md\:focus\:-translate-y-7\.5:focus{--transform-translate-y:-1.875rem}.md\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.md\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.md\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.md\:focus\:translate-y-full:focus{--transform-translate-y:100%}.md\:skew-x-0{--transform-skew-x:0}.md\:skew-x-1{--transform-skew-x:1deg}.md\:skew-x-2{--transform-skew-x:2deg}.md\:skew-x-3{--transform-skew-x:3deg}.md\:skew-x-6{--transform-skew-x:6deg}.md\:skew-x-12{--transform-skew-x:12deg}.md\:-skew-x-12{--transform-skew-x:-12deg}.md\:-skew-x-6{--transform-skew-x:-6deg}.md\:-skew-x-3{--transform-skew-x:-3deg}.md\:-skew-x-2{--transform-skew-x:-2deg}.md\:-skew-x-1{--transform-skew-x:-1deg}.md\:skew-y-0{--transform-skew-y:0}.md\:skew-y-1{--transform-skew-y:1deg}.md\:skew-y-2{--transform-skew-y:2deg}.md\:skew-y-3{--transform-skew-y:3deg}.md\:skew-y-6{--transform-skew-y:6deg}.md\:skew-y-12{--transform-skew-y:12deg}.md\:-skew-y-12{--transform-skew-y:-12deg}.md\:-skew-y-6{--transform-skew-y:-6deg}.md\:-skew-y-3{--transform-skew-y:-3deg}.md\:-skew-y-2{--transform-skew-y:-2deg}.md\:-skew-y-1{--transform-skew-y:-1deg}.md\:hover\:skew-x-0:hover{--transform-skew-x:0}.md\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.md\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.md\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.md\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.md\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.md\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.md\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.md\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.md\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.md\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.md\:hover\:skew-y-0:hover{--transform-skew-y:0}.md\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.md\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.md\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.md\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.md\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.md\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.md\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.md\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.md\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.md\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.md\:focus\:skew-x-0:focus{--transform-skew-x:0}.md\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.md\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.md\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.md\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.md\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.md\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.md\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.md\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.md\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.md\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.md\:focus\:skew-y-0:focus{--transform-skew-y:0}.md\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.md\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.md\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.md\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.md\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.md\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.md\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.md\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.md\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.md\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.md\:transition-none{transition-property:none}.md\:transition-all{transition-property:all}.md\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.md\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.md\:transition-opacity{transition-property:opacity}.md\:transition-shadow{transition-property:box-shadow}.md\:transition-transform{transition-property:transform}.md\:ease-linear{transition-timing-function:linear}.md\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.md\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.md\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.md\:duration-75{transition-duration:75ms}.md\:duration-100{transition-duration:.1s}.md\:duration-150{transition-duration:.15s}.md\:duration-200{transition-duration:.2s}.md\:duration-300{transition-duration:.3s}.md\:duration-500{transition-duration:.5s}.md\:duration-700{transition-duration:.7s}.md\:duration-1000{transition-duration:1s}.md\:delay-75{transition-delay:75ms}.md\:delay-100{transition-delay:.1s}.md\:delay-150{transition-delay:.15s}.md\:delay-200{transition-delay:.2s}.md\:delay-300{transition-delay:.3s}.md\:delay-500{transition-delay:.5s}.md\:delay-700{transition-delay:.7s}.md\:delay-1000{transition-delay:1s}.md\:animate-none{-webkit-animation:none;animation:none}.md\:animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.md\:animate-ping{-webkit-animation:ping 1s cubic-bezier(0,0,.2,1) infinite;animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.md\:animate-pulse{-webkit-animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.md\:animate-bounce{-webkit-animation:bounce 1s infinite;animation:bounce 1s infinite}.md\:transform-none{transform:none}.md\:transform-center{transform-origin:center}.md\:transform-top{transform-origin:top}.md\:transform-top-right{transform-origin:top right}.md\:transform-right{transform-origin:right}.md\:transform-bottom-right{transform-origin:bottom right}.md\:transform-bottom{transform-origin:bottom}.md\:transform-bottom-left{transform-origin:bottom left}.md\:transform-left{transform-origin:left}.md\:transform-top-left{transform-origin:top left}.md\:translate-x-0{transform:translateX(0)}.md\:translate-y-0{transform:translateY(0)}.md\:translate-x-1{transform:translateX(.25rem)}.md\:translate-y-1{transform:translateY(.25rem)}.md\:translate-x-2{transform:translateX(.5rem)}.md\:translate-y-2{transform:translateY(.5rem)}.md\:translate-x-3{transform:translateX(.75rem)}.md\:translate-y-3{transform:translateY(.75rem)}.md\:translate-x-4{transform:translateX(1rem)}.md\:translate-y-4{transform:translateY(1rem)}.md\:translate-x-5{transform:translateX(1.25rem)}.md\:translate-y-5{transform:translateY(1.25rem)}.md\:translate-x-6{transform:translateX(1.5rem)}.md\:translate-y-6{transform:translateY(1.5rem)}.md\:translate-x-7{transform:translateX(1.75rem)}.md\:translate-y-7{transform:translateY(1.75rem)}.md\:translate-x-8{transform:translateX(2rem)}.md\:translate-y-8{transform:translateY(2rem)}.md\:translate-x-9{transform:translateX(2.25rem)}.md\:translate-y-9{transform:translateY(2.25rem)}.md\:translate-x-10{transform:translateX(2.5rem)}.md\:translate-y-10{transform:translateY(2.5rem)}.md\:translate-x-11{transform:translateX(2.75rem)}.md\:translate-y-11{transform:translateY(2.75rem)}.md\:translate-x-12{transform:translateX(3rem)}.md\:translate-y-12{transform:translateY(3rem)}.md\:translate-x-15{transform:translateX(3.75rem)}.md\:translate-y-15{transform:translateY(3.75rem)}.md\:translate-x-16{transform:translateX(4rem)}.md\:translate-y-16{transform:translateY(4rem)}.md\:translate-x-20{transform:translateX(5rem)}.md\:translate-y-20{transform:translateY(5rem)}.md\:translate-x-22{transform:translateX(5.5rem)}.md\:translate-y-22{transform:translateY(5.5rem)}.md\:translate-x-24{transform:translateX(6rem)}.md\:translate-y-24{transform:translateY(6rem)}.md\:translate-x-25{transform:translateX(6.25rem)}.md\:translate-y-25{transform:translateY(6.25rem)}.md\:translate-x-26{transform:translateX(6.5rem)}.md\:translate-y-26{transform:translateY(6.5rem)}.md\:translate-x-28{transform:translateX(8rem)}.md\:translate-y-28{transform:translateY(8rem)}.md\:translate-x-30{transform:translateX(8.5rem)}.md\:translate-y-30{transform:translateY(8.5rem)}.md\:translate-x-32{transform:translateX(9rem)}.md\:translate-y-32{transform:translateY(9rem)}.md\:translate-x-40{transform:translateX(10rem)}.md\:translate-y-40{transform:translateY(10rem)}.md\:translate-x-48{transform:translateX(12rem)}.md\:translate-y-48{transform:translateY(12rem)}.md\:translate-x-52{transform:translateX(13rem)}.md\:translate-y-52{transform:translateY(13rem)}.md\:translate-x-56{transform:translateX(14rem)}.md\:translate-y-56{transform:translateY(14rem)}.md\:translate-x-60{transform:translateX(15rem)}.md\:translate-y-60{transform:translateY(15rem)}.md\:translate-x-64{transform:translateX(16rem)}.md\:translate-y-64{transform:translateY(16rem)}.md\:translate-x-68{transform:translateX(17rem)}.md\:translate-y-68{transform:translateY(17rem)}.md\:translate-x-px{transform:translateX(1px)}.md\:translate-y-px{transform:translateY(1px)}.md\:translate-x-0\.5{transform:translateX(.125rem)}.md\:translate-y-0\.5{transform:translateY(.125rem)}.md\:translate-x-1\.5{transform:translateX(.375rem)}.md\:translate-y-1\.5{transform:translateY(.375rem)}.md\:translate-x-2\.5{transform:translateX(.625rem)}.md\:translate-y-2\.5{transform:translateY(.625rem)}.md\:translate-x-7\.5{transform:translateX(1.875rem)}.md\:translate-y-7\.5{transform:translateY(1.875rem)}.md\:-translate-x-1{transform:translateX(-.25rem)}.md\:-translate-y-1{transform:translateY(-.25rem)}.md\:-translate-x-2{transform:translateX(-.5rem)}.md\:-translate-y-2{transform:translateY(-.5rem)}.md\:-translate-x-3{transform:translateX(-.75rem)}.md\:-translate-y-3{transform:translateY(-.75rem)}.md\:-translate-x-4{transform:translateX(-1rem)}.md\:-translate-y-4{transform:translateY(-1rem)}.md\:-translate-x-5{transform:translateX(-1.25rem)}.md\:-translate-y-5{transform:translateY(-1.25rem)}.md\:-translate-x-6{transform:translateX(-1.5rem)}.md\:-translate-y-6{transform:translateY(-1.5rem)}.md\:-translate-x-7{transform:translateX(-1.75rem)}.md\:-translate-y-7{transform:translateY(-1.75rem)}.md\:-translate-x-8{transform:translateX(-2rem)}.md\:-translate-y-8{transform:translateY(-2rem)}.md\:-translate-x-9{transform:translateX(-2.25rem)}.md\:-translate-y-9{transform:translateY(-2.25rem)}.md\:-translate-x-10{transform:translateX(-2.5rem)}.md\:-translate-y-10{transform:translateY(-2.5rem)}.md\:-translate-x-11{transform:translateX(-2.75rem)}.md\:-translate-y-11{transform:translateY(-2.75rem)}.md\:-translate-x-12{transform:translateX(-3rem)}.md\:-translate-y-12{transform:translateY(-3rem)}.md\:-translate-x-15{transform:translateX(-3.75rem)}.md\:-translate-y-15{transform:translateY(-3.75rem)}.md\:-translate-x-16{transform:translateX(-4rem)}.md\:-translate-y-16{transform:translateY(-4rem)}.md\:-translate-x-20{transform:translateX(-5rem)}.md\:-translate-y-20{transform:translateY(-5rem)}.md\:-translate-x-22{transform:translateX(-5.5rem)}.md\:-translate-y-22{transform:translateY(-5.5rem)}.md\:-translate-x-24{transform:translateX(-6rem)}.md\:-translate-y-24{transform:translateY(-6rem)}.md\:-translate-x-25{transform:translateX(-6.25rem)}.md\:-translate-y-25{transform:translateY(-6.25rem)}.md\:-translate-x-26{transform:translateX(-6.5rem)}.md\:-translate-y-26{transform:translateY(-6.5rem)}.md\:-translate-x-28{transform:translateX(-8rem)}.md\:-translate-y-28{transform:translateY(-8rem)}.md\:-translate-x-30{transform:translateX(-8.5rem)}.md\:-translate-y-30{transform:translateY(-8.5rem)}.md\:-translate-x-32{transform:translateX(-9rem)}.md\:-translate-y-32{transform:translateY(-9rem)}.md\:-translate-x-40{transform:translateX(-10rem)}.md\:-translate-y-40{transform:translateY(-10rem)}.md\:-translate-x-48{transform:translateX(-12rem)}.md\:-translate-y-48{transform:translateY(-12rem)}.md\:-translate-x-52{transform:translateX(-13rem)}.md\:-translate-y-52{transform:translateY(-13rem)}.md\:-translate-x-56{transform:translateX(-14rem)}.md\:-translate-y-56{transform:translateY(-14rem)}.md\:-translate-x-60{transform:translateX(-15rem)}.md\:-translate-y-60{transform:translateY(-15rem)}.md\:-translate-x-64{transform:translateX(-16rem)}.md\:-translate-y-64{transform:translateY(-16rem)}.md\:-translate-x-68{transform:translateX(-17rem)}.md\:-translate-y-68{transform:translateY(-17rem)}.md\:-translate-x-px{transform:translateX(-1px)}.md\:-translate-y-px{transform:translateY(-1px)}.md\:-translate-x-0\.5{transform:translateX(-.125rem)}.md\:-translate-y-0\.5{transform:translateY(-.125rem)}.md\:-translate-x-1\.5{transform:translateX(-.375rem)}.md\:-translate-y-1\.5{transform:translateY(-.375rem)}.md\:-translate-x-2\.5{transform:translateX(-.625rem)}.md\:-translate-y-2\.5{transform:translateY(-.625rem)}.md\:-translate-x-7\.5{transform:translateX(-1.875rem)}.md\:-translate-y-7\.5{transform:translateY(-1.875rem)}.md\:-translate-x-full{transform:translateX(-100%)}.md\:-translate-y-full{transform:translateY(-100%)}.md\:-translate-x-1\/2{transform:translateX(-50%)}.md\:-translate-y-1\/2{transform:translateY(-50%)}.md\:translate-x-1\/2{transform:translateX(50%)}.md\:translate-y-1\/2{transform:translateY(50%)}.md\:translate-x-full{transform:translateX(100%)}.md\:translate-y-full{transform:translateY(100%)}.md\:hover\:translate-x-0:hover{transform:translateX(0)}.md\:hover\:translate-y-0:hover{transform:translateY(0)}.md\:hover\:translate-x-1:hover{transform:translateX(.25rem)}.md\:hover\:translate-y-1:hover{transform:translateY(.25rem)}.md\:hover\:translate-x-2:hover{transform:translateX(.5rem)}.md\:hover\:translate-y-2:hover{transform:translateY(.5rem)}.md\:hover\:translate-x-3:hover{transform:translateX(.75rem)}.md\:hover\:translate-y-3:hover{transform:translateY(.75rem)}.md\:hover\:translate-x-4:hover{transform:translateX(1rem)}.md\:hover\:translate-y-4:hover{transform:translateY(1rem)}.md\:hover\:translate-x-5:hover{transform:translateX(1.25rem)}.md\:hover\:translate-y-5:hover{transform:translateY(1.25rem)}.md\:hover\:translate-x-6:hover{transform:translateX(1.5rem)}.md\:hover\:translate-y-6:hover{transform:translateY(1.5rem)}.md\:hover\:translate-x-7:hover{transform:translateX(1.75rem)}.md\:hover\:translate-y-7:hover{transform:translateY(1.75rem)}.md\:hover\:translate-x-8:hover{transform:translateX(2rem)}.md\:hover\:translate-y-8:hover{transform:translateY(2rem)}.md\:hover\:translate-x-9:hover{transform:translateX(2.25rem)}.md\:hover\:translate-y-9:hover{transform:translateY(2.25rem)}.md\:hover\:translate-x-10:hover{transform:translateX(2.5rem)}.md\:hover\:translate-y-10:hover{transform:translateY(2.5rem)}.md\:hover\:translate-x-11:hover{transform:translateX(2.75rem)}.md\:hover\:translate-y-11:hover{transform:translateY(2.75rem)}.md\:hover\:translate-x-12:hover{transform:translateX(3rem)}.md\:hover\:translate-y-12:hover{transform:translateY(3rem)}.md\:hover\:translate-x-15:hover{transform:translateX(3.75rem)}.md\:hover\:translate-y-15:hover{transform:translateY(3.75rem)}.md\:hover\:translate-x-16:hover{transform:translateX(4rem)}.md\:hover\:translate-y-16:hover{transform:translateY(4rem)}.md\:hover\:translate-x-20:hover{transform:translateX(5rem)}.md\:hover\:translate-y-20:hover{transform:translateY(5rem)}.md\:hover\:translate-x-22:hover{transform:translateX(5.5rem)}.md\:hover\:translate-y-22:hover{transform:translateY(5.5rem)}.md\:hover\:translate-x-24:hover{transform:translateX(6rem)}.md\:hover\:translate-y-24:hover{transform:translateY(6rem)}.md\:hover\:translate-x-25:hover{transform:translateX(6.25rem)}.md\:hover\:translate-y-25:hover{transform:translateY(6.25rem)}.md\:hover\:translate-x-26:hover{transform:translateX(6.5rem)}.md\:hover\:translate-y-26:hover{transform:translateY(6.5rem)}.md\:hover\:translate-x-28:hover{transform:translateX(8rem)}.md\:hover\:translate-y-28:hover{transform:translateY(8rem)}.md\:hover\:translate-x-30:hover{transform:translateX(8.5rem)}.md\:hover\:translate-y-30:hover{transform:translateY(8.5rem)}.md\:hover\:translate-x-32:hover{transform:translateX(9rem)}.md\:hover\:translate-y-32:hover{transform:translateY(9rem)}.md\:hover\:translate-x-40:hover{transform:translateX(10rem)}.md\:hover\:translate-y-40:hover{transform:translateY(10rem)}.md\:hover\:translate-x-48:hover{transform:translateX(12rem)}.md\:hover\:translate-y-48:hover{transform:translateY(12rem)}.md\:hover\:translate-x-52:hover{transform:translateX(13rem)}.md\:hover\:translate-y-52:hover{transform:translateY(13rem)}.md\:hover\:translate-x-56:hover{transform:translateX(14rem)}.md\:hover\:translate-y-56:hover{transform:translateY(14rem)}.md\:hover\:translate-x-60:hover{transform:translateX(15rem)}.md\:hover\:translate-y-60:hover{transform:translateY(15rem)}.md\:hover\:translate-x-64:hover{transform:translateX(16rem)}.md\:hover\:translate-y-64:hover{transform:translateY(16rem)}.md\:hover\:translate-x-68:hover{transform:translateX(17rem)}.md\:hover\:translate-y-68:hover{transform:translateY(17rem)}.md\:hover\:translate-x-px:hover{transform:translateX(1px)}.md\:hover\:translate-y-px:hover{transform:translateY(1px)}.md\:hover\:translate-x-0\.5:hover{transform:translateX(.125rem)}.md\:hover\:translate-y-0\.5:hover{transform:translateY(.125rem)}.md\:hover\:translate-x-1\.5:hover{transform:translateX(.375rem)}.md\:hover\:translate-y-1\.5:hover{transform:translateY(.375rem)}.md\:hover\:translate-x-2\.5:hover{transform:translateX(.625rem)}.md\:hover\:translate-y-2\.5:hover{transform:translateY(.625rem)}.md\:hover\:translate-x-7\.5:hover{transform:translateX(1.875rem)}.md\:hover\:translate-y-7\.5:hover{transform:translateY(1.875rem)}.md\:hover\:-translate-x-1:hover{transform:translateX(-.25rem)}.md\:hover\:-translate-y-1:hover{transform:translateY(-.25rem)}.md\:hover\:-translate-x-2:hover{transform:translateX(-.5rem)}.md\:hover\:-translate-y-2:hover{transform:translateY(-.5rem)}.md\:hover\:-translate-x-3:hover{transform:translateX(-.75rem)}.md\:hover\:-translate-y-3:hover{transform:translateY(-.75rem)}.md\:hover\:-translate-x-4:hover{transform:translateX(-1rem)}.md\:hover\:-translate-y-4:hover{transform:translateY(-1rem)}.md\:hover\:-translate-x-5:hover{transform:translateX(-1.25rem)}.md\:hover\:-translate-y-5:hover{transform:translateY(-1.25rem)}.md\:hover\:-translate-x-6:hover{transform:translateX(-1.5rem)}.md\:hover\:-translate-y-6:hover{transform:translateY(-1.5rem)}.md\:hover\:-translate-x-7:hover{transform:translateX(-1.75rem)}.md\:hover\:-translate-y-7:hover{transform:translateY(-1.75rem)}.md\:hover\:-translate-x-8:hover{transform:translateX(-2rem)}.md\:hover\:-translate-y-8:hover{transform:translateY(-2rem)}.md\:hover\:-translate-x-9:hover{transform:translateX(-2.25rem)}.md\:hover\:-translate-y-9:hover{transform:translateY(-2.25rem)}.md\:hover\:-translate-x-10:hover{transform:translateX(-2.5rem)}.md\:hover\:-translate-y-10:hover{transform:translateY(-2.5rem)}.md\:hover\:-translate-x-11:hover{transform:translateX(-2.75rem)}.md\:hover\:-translate-y-11:hover{transform:translateY(-2.75rem)}.md\:hover\:-translate-x-12:hover{transform:translateX(-3rem)}.md\:hover\:-translate-y-12:hover{transform:translateY(-3rem)}.md\:hover\:-translate-x-15:hover{transform:translateX(-3.75rem)}.md\:hover\:-translate-y-15:hover{transform:translateY(-3.75rem)}.md\:hover\:-translate-x-16:hover{transform:translateX(-4rem)}.md\:hover\:-translate-y-16:hover{transform:translateY(-4rem)}.md\:hover\:-translate-x-20:hover{transform:translateX(-5rem)}.md\:hover\:-translate-y-20:hover{transform:translateY(-5rem)}.md\:hover\:-translate-x-22:hover{transform:translateX(-5.5rem)}.md\:hover\:-translate-y-22:hover{transform:translateY(-5.5rem)}.md\:hover\:-translate-x-24:hover{transform:translateX(-6rem)}.md\:hover\:-translate-y-24:hover{transform:translateY(-6rem)}.md\:hover\:-translate-x-25:hover{transform:translateX(-6.25rem)}.md\:hover\:-translate-y-25:hover{transform:translateY(-6.25rem)}.md\:hover\:-translate-x-26:hover{transform:translateX(-6.5rem)}.md\:hover\:-translate-y-26:hover{transform:translateY(-6.5rem)}.md\:hover\:-translate-x-28:hover{transform:translateX(-8rem)}.md\:hover\:-translate-y-28:hover{transform:translateY(-8rem)}.md\:hover\:-translate-x-30:hover{transform:translateX(-8.5rem)}.md\:hover\:-translate-y-30:hover{transform:translateY(-8.5rem)}.md\:hover\:-translate-x-32:hover{transform:translateX(-9rem)}.md\:hover\:-translate-y-32:hover{transform:translateY(-9rem)}.md\:hover\:-translate-x-40:hover{transform:translateX(-10rem)}.md\:hover\:-translate-y-40:hover{transform:translateY(-10rem)}.md\:hover\:-translate-x-48:hover{transform:translateX(-12rem)}.md\:hover\:-translate-y-48:hover{transform:translateY(-12rem)}.md\:hover\:-translate-x-52:hover{transform:translateX(-13rem)}.md\:hover\:-translate-y-52:hover{transform:translateY(-13rem)}.md\:hover\:-translate-x-56:hover{transform:translateX(-14rem)}.md\:hover\:-translate-y-56:hover{transform:translateY(-14rem)}.md\:hover\:-translate-x-60:hover{transform:translateX(-15rem)}.md\:hover\:-translate-y-60:hover{transform:translateY(-15rem)}.md\:hover\:-translate-x-64:hover{transform:translateX(-16rem)}.md\:hover\:-translate-y-64:hover{transform:translateY(-16rem)}.md\:hover\:-translate-x-68:hover{transform:translateX(-17rem)}.md\:hover\:-translate-y-68:hover{transform:translateY(-17rem)}.md\:hover\:-translate-x-px:hover{transform:translateX(-1px)}.md\:hover\:-translate-y-px:hover{transform:translateY(-1px)}.md\:hover\:-translate-x-0\.5:hover{transform:translateX(-.125rem)}.md\:hover\:-translate-y-0\.5:hover{transform:translateY(-.125rem)}.md\:hover\:-translate-x-1\.5:hover{transform:translateX(-.375rem)}.md\:hover\:-translate-y-1\.5:hover{transform:translateY(-.375rem)}.md\:hover\:-translate-x-2\.5:hover{transform:translateX(-.625rem)}.md\:hover\:-translate-y-2\.5:hover{transform:translateY(-.625rem)}.md\:hover\:-translate-x-7\.5:hover{transform:translateX(-1.875rem)}.md\:hover\:-translate-y-7\.5:hover{transform:translateY(-1.875rem)}.md\:hover\:-translate-x-full:hover{transform:translateX(-100%)}.md\:hover\:-translate-y-full:hover{transform:translateY(-100%)}.md\:hover\:-translate-x-1\/2:hover{transform:translateX(-50%)}.md\:hover\:-translate-y-1\/2:hover{transform:translateY(-50%)}.md\:hover\:translate-x-1\/2:hover{transform:translateX(50%)}.md\:hover\:translate-y-1\/2:hover{transform:translateY(50%)}.md\:hover\:translate-x-full:hover{transform:translateX(100%)}.md\:hover\:translate-y-full:hover{transform:translateY(100%)}.md\:focus\:translate-x-0:focus{transform:translateX(0)}.md\:focus\:translate-y-0:focus{transform:translateY(0)}.md\:focus\:translate-x-1:focus{transform:translateX(.25rem)}.md\:focus\:translate-y-1:focus{transform:translateY(.25rem)}.md\:focus\:translate-x-2:focus{transform:translateX(.5rem)}.md\:focus\:translate-y-2:focus{transform:translateY(.5rem)}.md\:focus\:translate-x-3:focus{transform:translateX(.75rem)}.md\:focus\:translate-y-3:focus{transform:translateY(.75rem)}.md\:focus\:translate-x-4:focus{transform:translateX(1rem)}.md\:focus\:translate-y-4:focus{transform:translateY(1rem)}.md\:focus\:translate-x-5:focus{transform:translateX(1.25rem)}.md\:focus\:translate-y-5:focus{transform:translateY(1.25rem)}.md\:focus\:translate-x-6:focus{transform:translateX(1.5rem)}.md\:focus\:translate-y-6:focus{transform:translateY(1.5rem)}.md\:focus\:translate-x-7:focus{transform:translateX(1.75rem)}.md\:focus\:translate-y-7:focus{transform:translateY(1.75rem)}.md\:focus\:translate-x-8:focus{transform:translateX(2rem)}.md\:focus\:translate-y-8:focus{transform:translateY(2rem)}.md\:focus\:translate-x-9:focus{transform:translateX(2.25rem)}.md\:focus\:translate-y-9:focus{transform:translateY(2.25rem)}.md\:focus\:translate-x-10:focus{transform:translateX(2.5rem)}.md\:focus\:translate-y-10:focus{transform:translateY(2.5rem)}.md\:focus\:translate-x-11:focus{transform:translateX(2.75rem)}.md\:focus\:translate-y-11:focus{transform:translateY(2.75rem)}.md\:focus\:translate-x-12:focus{transform:translateX(3rem)}.md\:focus\:translate-y-12:focus{transform:translateY(3rem)}.md\:focus\:translate-x-15:focus{transform:translateX(3.75rem)}.md\:focus\:translate-y-15:focus{transform:translateY(3.75rem)}.md\:focus\:translate-x-16:focus{transform:translateX(4rem)}.md\:focus\:translate-y-16:focus{transform:translateY(4rem)}.md\:focus\:translate-x-20:focus{transform:translateX(5rem)}.md\:focus\:translate-y-20:focus{transform:translateY(5rem)}.md\:focus\:translate-x-22:focus{transform:translateX(5.5rem)}.md\:focus\:translate-y-22:focus{transform:translateY(5.5rem)}.md\:focus\:translate-x-24:focus{transform:translateX(6rem)}.md\:focus\:translate-y-24:focus{transform:translateY(6rem)}.md\:focus\:translate-x-25:focus{transform:translateX(6.25rem)}.md\:focus\:translate-y-25:focus{transform:translateY(6.25rem)}.md\:focus\:translate-x-26:focus{transform:translateX(6.5rem)}.md\:focus\:translate-y-26:focus{transform:translateY(6.5rem)}.md\:focus\:translate-x-28:focus{transform:translateX(8rem)}.md\:focus\:translate-y-28:focus{transform:translateY(8rem)}.md\:focus\:translate-x-30:focus{transform:translateX(8.5rem)}.md\:focus\:translate-y-30:focus{transform:translateY(8.5rem)}.md\:focus\:translate-x-32:focus{transform:translateX(9rem)}.md\:focus\:translate-y-32:focus{transform:translateY(9rem)}.md\:focus\:translate-x-40:focus{transform:translateX(10rem)}.md\:focus\:translate-y-40:focus{transform:translateY(10rem)}.md\:focus\:translate-x-48:focus{transform:translateX(12rem)}.md\:focus\:translate-y-48:focus{transform:translateY(12rem)}.md\:focus\:translate-x-52:focus{transform:translateX(13rem)}.md\:focus\:translate-y-52:focus{transform:translateY(13rem)}.md\:focus\:translate-x-56:focus{transform:translateX(14rem)}.md\:focus\:translate-y-56:focus{transform:translateY(14rem)}.md\:focus\:translate-x-60:focus{transform:translateX(15rem)}.md\:focus\:translate-y-60:focus{transform:translateY(15rem)}.md\:focus\:translate-x-64:focus{transform:translateX(16rem)}.md\:focus\:translate-y-64:focus{transform:translateY(16rem)}.md\:focus\:translate-x-68:focus{transform:translateX(17rem)}.md\:focus\:translate-y-68:focus{transform:translateY(17rem)}.md\:focus\:translate-x-px:focus{transform:translateX(1px)}.md\:focus\:translate-y-px:focus{transform:translateY(1px)}.md\:focus\:translate-x-0\.5:focus{transform:translateX(.125rem)}.md\:focus\:translate-y-0\.5:focus{transform:translateY(.125rem)}.md\:focus\:translate-x-1\.5:focus{transform:translateX(.375rem)}.md\:focus\:translate-y-1\.5:focus{transform:translateY(.375rem)}.md\:focus\:translate-x-2\.5:focus{transform:translateX(.625rem)}.md\:focus\:translate-y-2\.5:focus{transform:translateY(.625rem)}.md\:focus\:translate-x-7\.5:focus{transform:translateX(1.875rem)}.md\:focus\:translate-y-7\.5:focus{transform:translateY(1.875rem)}.md\:focus\:-translate-x-1:focus{transform:translateX(-.25rem)}.md\:focus\:-translate-y-1:focus{transform:translateY(-.25rem)}.md\:focus\:-translate-x-2:focus{transform:translateX(-.5rem)}.md\:focus\:-translate-y-2:focus{transform:translateY(-.5rem)}.md\:focus\:-translate-x-3:focus{transform:translateX(-.75rem)}.md\:focus\:-translate-y-3:focus{transform:translateY(-.75rem)}.md\:focus\:-translate-x-4:focus{transform:translateX(-1rem)}.md\:focus\:-translate-y-4:focus{transform:translateY(-1rem)}.md\:focus\:-translate-x-5:focus{transform:translateX(-1.25rem)}.md\:focus\:-translate-y-5:focus{transform:translateY(-1.25rem)}.md\:focus\:-translate-x-6:focus{transform:translateX(-1.5rem)}.md\:focus\:-translate-y-6:focus{transform:translateY(-1.5rem)}.md\:focus\:-translate-x-7:focus{transform:translateX(-1.75rem)}.md\:focus\:-translate-y-7:focus{transform:translateY(-1.75rem)}.md\:focus\:-translate-x-8:focus{transform:translateX(-2rem)}.md\:focus\:-translate-y-8:focus{transform:translateY(-2rem)}.md\:focus\:-translate-x-9:focus{transform:translateX(-2.25rem)}.md\:focus\:-translate-y-9:focus{transform:translateY(-2.25rem)}.md\:focus\:-translate-x-10:focus{transform:translateX(-2.5rem)}.md\:focus\:-translate-y-10:focus{transform:translateY(-2.5rem)}.md\:focus\:-translate-x-11:focus{transform:translateX(-2.75rem)}.md\:focus\:-translate-y-11:focus{transform:translateY(-2.75rem)}.md\:focus\:-translate-x-12:focus{transform:translateX(-3rem)}.md\:focus\:-translate-y-12:focus{transform:translateY(-3rem)}.md\:focus\:-translate-x-15:focus{transform:translateX(-3.75rem)}.md\:focus\:-translate-y-15:focus{transform:translateY(-3.75rem)}.md\:focus\:-translate-x-16:focus{transform:translateX(-4rem)}.md\:focus\:-translate-y-16:focus{transform:translateY(-4rem)}.md\:focus\:-translate-x-20:focus{transform:translateX(-5rem)}.md\:focus\:-translate-y-20:focus{transform:translateY(-5rem)}.md\:focus\:-translate-x-22:focus{transform:translateX(-5.5rem)}.md\:focus\:-translate-y-22:focus{transform:translateY(-5.5rem)}.md\:focus\:-translate-x-24:focus{transform:translateX(-6rem)}.md\:focus\:-translate-y-24:focus{transform:translateY(-6rem)}.md\:focus\:-translate-x-25:focus{transform:translateX(-6.25rem)}.md\:focus\:-translate-y-25:focus{transform:translateY(-6.25rem)}.md\:focus\:-translate-x-26:focus{transform:translateX(-6.5rem)}.md\:focus\:-translate-y-26:focus{transform:translateY(-6.5rem)}.md\:focus\:-translate-x-28:focus{transform:translateX(-8rem)}.md\:focus\:-translate-y-28:focus{transform:translateY(-8rem)}.md\:focus\:-translate-x-30:focus{transform:translateX(-8.5rem)}.md\:focus\:-translate-y-30:focus{transform:translateY(-8.5rem)}.md\:focus\:-translate-x-32:focus{transform:translateX(-9rem)}.md\:focus\:-translate-y-32:focus{transform:translateY(-9rem)}.md\:focus\:-translate-x-40:focus{transform:translateX(-10rem)}.md\:focus\:-translate-y-40:focus{transform:translateY(-10rem)}.md\:focus\:-translate-x-48:focus{transform:translateX(-12rem)}.md\:focus\:-translate-y-48:focus{transform:translateY(-12rem)}.md\:focus\:-translate-x-52:focus{transform:translateX(-13rem)}.md\:focus\:-translate-y-52:focus{transform:translateY(-13rem)}.md\:focus\:-translate-x-56:focus{transform:translateX(-14rem)}.md\:focus\:-translate-y-56:focus{transform:translateY(-14rem)}.md\:focus\:-translate-x-60:focus{transform:translateX(-15rem)}.md\:focus\:-translate-y-60:focus{transform:translateY(-15rem)}.md\:focus\:-translate-x-64:focus{transform:translateX(-16rem)}.md\:focus\:-translate-y-64:focus{transform:translateY(-16rem)}.md\:focus\:-translate-x-68:focus{transform:translateX(-17rem)}.md\:focus\:-translate-y-68:focus{transform:translateY(-17rem)}.md\:focus\:-translate-x-px:focus{transform:translateX(-1px)}.md\:focus\:-translate-y-px:focus{transform:translateY(-1px)}.md\:focus\:-translate-x-0\.5:focus{transform:translateX(-.125rem)}.md\:focus\:-translate-y-0\.5:focus{transform:translateY(-.125rem)}.md\:focus\:-translate-x-1\.5:focus{transform:translateX(-.375rem)}.md\:focus\:-translate-y-1\.5:focus{transform:translateY(-.375rem)}.md\:focus\:-translate-x-2\.5:focus{transform:translateX(-.625rem)}.md\:focus\:-translate-y-2\.5:focus{transform:translateY(-.625rem)}.md\:focus\:-translate-x-7\.5:focus{transform:translateX(-1.875rem)}.md\:focus\:-translate-y-7\.5:focus{transform:translateY(-1.875rem)}.md\:focus\:-translate-x-full:focus{transform:translateX(-100%)}.md\:focus\:-translate-y-full:focus{transform:translateY(-100%)}.md\:focus\:-translate-x-1\/2:focus{transform:translateX(-50%)}.md\:focus\:-translate-y-1\/2:focus{transform:translateY(-50%)}.md\:focus\:translate-x-1\/2:focus{transform:translateX(50%)}.md\:focus\:translate-y-1\/2:focus{transform:translateY(50%)}.md\:focus\:translate-x-full:focus{transform:translateX(100%)}.md\:focus\:translate-y-full:focus{transform:translateY(100%)}.md\:scale-0{transform:scale(0)}.md\:scale-x-0{transform:scaleX(0)}.md\:scale-y-0{transform:scaleY(0)}.md\:scale-50{transform:scale(.5)}.md\:scale-x-50{transform:scaleX(.5)}.md\:scale-y-50{transform:scaleY(.5)}.md\:scale-75{transform:scale(.75)}.md\:scale-x-75{transform:scaleX(.75)}.md\:scale-y-75{transform:scaleY(.75)}.md\:scale-90{transform:scale(.9)}.md\:scale-x-90{transform:scaleX(.9)}.md\:scale-y-90{transform:scaleY(.9)}.md\:scale-95{transform:scale(.95)}.md\:scale-x-95{transform:scaleX(.95)}.md\:scale-y-95{transform:scaleY(.95)}.md\:scale-100{transform:scale(1)}.md\:scale-x-100{transform:scaleX(1)}.md\:scale-y-100{transform:scaleY(1)}.md\:scale-105{transform:scale(1.05)}.md\:scale-x-105{transform:scaleX(1.05)}.md\:scale-y-105{transform:scaleY(1.05)}.md\:scale-110{transform:scale(1.1)}.md\:scale-x-110{transform:scaleX(1.1)}.md\:scale-y-110{transform:scaleY(1.1)}.md\:scale-125{transform:scale(1.25)}.md\:scale-x-125{transform:scaleX(1.25)}.md\:scale-y-125{transform:scaleY(1.25)}.md\:scale-150{transform:scale(1.5)}.md\:scale-x-150{transform:scaleX(1.5)}.md\:scale-y-150{transform:scaleY(1.5)}.md\:hover\:scale-0:hover{transform:scale(0)}.md\:hover\:scale-x-0:hover{transform:scaleX(0)}.md\:hover\:scale-y-0:hover{transform:scaleY(0)}.md\:hover\:scale-50:hover{transform:scale(.5)}.md\:hover\:scale-x-50:hover{transform:scaleX(.5)}.md\:hover\:scale-y-50:hover{transform:scaleY(.5)}.md\:hover\:scale-75:hover{transform:scale(.75)}.md\:hover\:scale-x-75:hover{transform:scaleX(.75)}.md\:hover\:scale-y-75:hover{transform:scaleY(.75)}.md\:hover\:scale-90:hover{transform:scale(.9)}.md\:hover\:scale-x-90:hover{transform:scaleX(.9)}.md\:hover\:scale-y-90:hover{transform:scaleY(.9)}.md\:hover\:scale-95:hover{transform:scale(.95)}.md\:hover\:scale-x-95:hover{transform:scaleX(.95)}.md\:hover\:scale-y-95:hover{transform:scaleY(.95)}.md\:hover\:scale-100:hover{transform:scale(1)}.md\:hover\:scale-x-100:hover{transform:scaleX(1)}.md\:hover\:scale-y-100:hover{transform:scaleY(1)}.md\:hover\:scale-105:hover{transform:scale(1.05)}.md\:hover\:scale-x-105:hover{transform:scaleX(1.05)}.md\:hover\:scale-y-105:hover{transform:scaleY(1.05)}.md\:hover\:scale-110:hover{transform:scale(1.1)}.md\:hover\:scale-x-110:hover{transform:scaleX(1.1)}.md\:hover\:scale-y-110:hover{transform:scaleY(1.1)}.md\:hover\:scale-125:hover{transform:scale(1.25)}.md\:hover\:scale-x-125:hover{transform:scaleX(1.25)}.md\:hover\:scale-y-125:hover{transform:scaleY(1.25)}.md\:hover\:scale-150:hover{transform:scale(1.5)}.md\:hover\:scale-x-150:hover{transform:scaleX(1.5)}.md\:hover\:scale-y-150:hover{transform:scaleY(1.5)}.md\:focus\:scale-0:focus{transform:scale(0)}.md\:focus\:scale-x-0:focus{transform:scaleX(0)}.md\:focus\:scale-y-0:focus{transform:scaleY(0)}.md\:focus\:scale-50:focus{transform:scale(.5)}.md\:focus\:scale-x-50:focus{transform:scaleX(.5)}.md\:focus\:scale-y-50:focus{transform:scaleY(.5)}.md\:focus\:scale-75:focus{transform:scale(.75)}.md\:focus\:scale-x-75:focus{transform:scaleX(.75)}.md\:focus\:scale-y-75:focus{transform:scaleY(.75)}.md\:focus\:scale-90:focus{transform:scale(.9)}.md\:focus\:scale-x-90:focus{transform:scaleX(.9)}.md\:focus\:scale-y-90:focus{transform:scaleY(.9)}.md\:focus\:scale-95:focus{transform:scale(.95)}.md\:focus\:scale-x-95:focus{transform:scaleX(.95)}.md\:focus\:scale-y-95:focus{transform:scaleY(.95)}.md\:focus\:scale-100:focus{transform:scale(1)}.md\:focus\:scale-x-100:focus{transform:scaleX(1)}.md\:focus\:scale-y-100:focus{transform:scaleY(1)}.md\:focus\:scale-105:focus{transform:scale(1.05)}.md\:focus\:scale-x-105:focus{transform:scaleX(1.05)}.md\:focus\:scale-y-105:focus{transform:scaleY(1.05)}.md\:focus\:scale-110:focus{transform:scale(1.1)}.md\:focus\:scale-x-110:focus{transform:scaleX(1.1)}.md\:focus\:scale-y-110:focus{transform:scaleY(1.1)}.md\:focus\:scale-125:focus{transform:scale(1.25)}.md\:focus\:scale-x-125:focus{transform:scaleX(1.25)}.md\:focus\:scale-y-125:focus{transform:scaleY(1.25)}.md\:focus\:scale-150:focus{transform:scale(1.5)}.md\:focus\:scale-x-150:focus{transform:scaleX(1.5)}.md\:focus\:scale-y-150:focus{transform:scaleY(1.5)}.md\:rotate-0{transform:rotate(0)}.md\:rotate-90{transform:rotate(90deg)}.md\:rotate-135{transform:rotate(135deg)}.md\:rotate-180{transform:rotate(180deg)}.md\:-rotate-180{transform:rotate(-180deg)}.md\:-rotate-135{transform:rotate(-135deg)}.md\:-rotate-90{transform:rotate(-90deg)}.md\:hover\:rotate-0:hover{transform:rotate(0)}.md\:hover\:rotate-90:hover{transform:rotate(90deg)}.md\:hover\:rotate-135:hover{transform:rotate(135deg)}.md\:hover\:rotate-180:hover{transform:rotate(180deg)}.md\:hover\:-rotate-180:hover{transform:rotate(-180deg)}.md\:hover\:-rotate-135:hover{transform:rotate(-135deg)}.md\:hover\:-rotate-90:hover{transform:rotate(-90deg)}.md\:focus\:rotate-0:focus{transform:rotate(0)}.md\:focus\:rotate-90:focus{transform:rotate(90deg)}.md\:focus\:rotate-135:focus{transform:rotate(135deg)}.md\:focus\:rotate-180:focus{transform:rotate(180deg)}.md\:focus\:-rotate-180:focus{transform:rotate(-180deg)}.md\:focus\:-rotate-135:focus{transform:rotate(-135deg)}.md\:focus\:-rotate-90:focus{transform:rotate(-90deg)}.md\:skew-x-0{transform:skewX(0)}.md\:skew-y-0{transform:skewY(0)}.md\:skew-x-1{transform:skewX(1deg)}.md\:skew-y-1{transform:skewY(1deg)}.md\:skew-x-2{transform:skewX(2deg)}.md\:skew-y-2{transform:skewY(2deg)}.md\:skew-x-3{transform:skewX(3deg)}.md\:skew-y-3{transform:skewY(3deg)}.md\:skew-x-6{transform:skewX(6deg)}.md\:skew-y-6{transform:skewY(6deg)}.md\:skew-x-12{transform:skewX(12deg)}.md\:skew-y-12{transform:skewY(12deg)}.md\:-skew-x-12{transform:skewX(-12deg)}.md\:-skew-y-12{transform:skewY(-12deg)}.md\:-skew-x-6{transform:skewX(-6deg)}.md\:-skew-y-6{transform:skewY(-6deg)}.md\:-skew-x-3{transform:skewX(-3deg)}.md\:-skew-y-3{transform:skewY(-3deg)}.md\:-skew-x-2{transform:skewX(-2deg)}.md\:-skew-y-2{transform:skewY(-2deg)}.md\:-skew-x-1{transform:skewX(-1deg)}.md\:-skew-y-1{transform:skewY(-1deg)}.md\:hover\:skew-x-0:hover{transform:skewX(0)}.md\:hover\:skew-y-0:hover{transform:skewY(0)}.md\:hover\:skew-x-1:hover{transform:skewX(1deg)}.md\:hover\:skew-y-1:hover{transform:skewY(1deg)}.md\:hover\:skew-x-2:hover{transform:skewX(2deg)}.md\:hover\:skew-y-2:hover{transform:skewY(2deg)}.md\:hover\:skew-x-3:hover{transform:skewX(3deg)}.md\:hover\:skew-y-3:hover{transform:skewY(3deg)}.md\:hover\:skew-x-6:hover{transform:skewX(6deg)}.md\:hover\:skew-y-6:hover{transform:skewY(6deg)}.md\:hover\:skew-x-12:hover{transform:skewX(12deg)}.md\:hover\:skew-y-12:hover{transform:skewY(12deg)}.md\:hover\:-skew-x-12:hover{transform:skewX(-12deg)}.md\:hover\:-skew-y-12:hover{transform:skewY(-12deg)}.md\:hover\:-skew-x-6:hover{transform:skewX(-6deg)}.md\:hover\:-skew-y-6:hover{transform:skewY(-6deg)}.md\:hover\:-skew-x-3:hover{transform:skewX(-3deg)}.md\:hover\:-skew-y-3:hover{transform:skewY(-3deg)}.md\:hover\:-skew-x-2:hover{transform:skewX(-2deg)}.md\:hover\:-skew-y-2:hover{transform:skewY(-2deg)}.md\:hover\:-skew-x-1:hover{transform:skewX(-1deg)}.md\:hover\:-skew-y-1:hover{transform:skewY(-1deg)}.md\:focus\:skew-x-0:focus{transform:skewX(0)}.md\:focus\:skew-y-0:focus{transform:skewY(0)}.md\:focus\:skew-x-1:focus{transform:skewX(1deg)}.md\:focus\:skew-y-1:focus{transform:skewY(1deg)}.md\:focus\:skew-x-2:focus{transform:skewX(2deg)}.md\:focus\:skew-y-2:focus{transform:skewY(2deg)}.md\:focus\:skew-x-3:focus{transform:skewX(3deg)}.md\:focus\:skew-y-3:focus{transform:skewY(3deg)}.md\:focus\:skew-x-6:focus{transform:skewX(6deg)}.md\:focus\:skew-y-6:focus{transform:skewY(6deg)}.md\:focus\:skew-x-12:focus{transform:skewX(12deg)}.md\:focus\:skew-y-12:focus{transform:skewY(12deg)}.md\:focus\:-skew-x-12:focus{transform:skewX(-12deg)}.md\:focus\:-skew-y-12:focus{transform:skewY(-12deg)}.md\:focus\:-skew-x-6:focus{transform:skewX(-6deg)}.md\:focus\:-skew-y-6:focus{transform:skewY(-6deg)}.md\:focus\:-skew-x-3:focus{transform:skewX(-3deg)}.md\:focus\:-skew-y-3:focus{transform:skewY(-3deg)}.md\:focus\:-skew-x-2:focus{transform:skewX(-2deg)}.md\:focus\:-skew-y-2:focus{transform:skewY(-2deg)}.md\:focus\:-skew-x-1:focus{transform:skewX(-1deg)}.md\:focus\:-skew-y-1:focus{transform:skewY(-1deg)}.md\:transform-border{transform-box:border-box}.md\:transform-fill{transform-box:fill-box}.md\:transform-view{transform-box:view-box}}@media (min-width:64.01em){.lg\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px*(1 - var(--space-y-reverse)));margin-bottom:calc(0px*var(--space-y-reverse))}.lg\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px*var(--space-x-reverse));margin-left:calc(0px*(1 - var(--space-x-reverse)))}.lg\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.25rem*var(--space-y-reverse))}.lg\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.25rem*var(--space-x-reverse));margin-left:calc(0.25rem*(1 - var(--space-x-reverse)))}.lg\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.5rem*var(--space-y-reverse))}.lg\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.5rem*var(--space-x-reverse));margin-left:calc(0.5rem*(1 - var(--space-x-reverse)))}.lg\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.75rem*var(--space-y-reverse))}.lg\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.75rem*var(--space-x-reverse));margin-left:calc(0.75rem*(1 - var(--space-x-reverse)))}.lg\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1rem*var(--space-y-reverse))}.lg\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem*var(--space-x-reverse));margin-left:calc(1rem*(1 - var(--space-x-reverse)))}.lg\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem*var(--space-y-reverse))}.lg\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem*var(--space-x-reverse));margin-left:calc(1.25rem*(1 - var(--space-x-reverse)))}.lg\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem*var(--space-y-reverse))}.lg\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem*var(--space-x-reverse));margin-left:calc(1.5rem*(1 - var(--space-x-reverse)))}.lg\:space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.75rem*var(--space-y-reverse))}.lg\:space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.75rem*var(--space-x-reverse));margin-left:calc(1.75rem*(1 - var(--space-x-reverse)))}.lg\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2rem*var(--space-y-reverse))}.lg\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem*var(--space-x-reverse));margin-left:calc(2rem*(1 - var(--space-x-reverse)))}.lg\:space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.25rem*var(--space-y-reverse))}.lg\:space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.25rem*var(--space-x-reverse));margin-left:calc(2.25rem*(1 - var(--space-x-reverse)))}.lg\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem*var(--space-y-reverse))}.lg\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem*var(--space-x-reverse));margin-left:calc(2.5rem*(1 - var(--space-x-reverse)))}.lg\:space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.75rem*var(--space-y-reverse))}.lg\:space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.75rem*var(--space-x-reverse));margin-left:calc(2.75rem*(1 - var(--space-x-reverse)))}.lg\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3rem*var(--space-y-reverse))}.lg\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem*var(--space-x-reverse));margin-left:calc(3rem*(1 - var(--space-x-reverse)))}.lg\:space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3.75rem*var(--space-y-reverse))}.lg\:space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3.75rem*var(--space-x-reverse));margin-left:calc(3.75rem*(1 - var(--space-x-reverse)))}.lg\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(4rem*var(--space-y-reverse))}.lg\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem*var(--space-x-reverse));margin-left:calc(4rem*(1 - var(--space-x-reverse)))}.lg\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5rem*var(--space-y-reverse))}.lg\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem*var(--space-x-reverse));margin-left:calc(5rem*(1 - var(--space-x-reverse)))}.lg\:space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5.5rem*var(--space-y-reverse))}.lg\:space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5.5rem*var(--space-x-reverse));margin-left:calc(5.5rem*(1 - var(--space-x-reverse)))}.lg\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6rem*var(--space-y-reverse))}.lg\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem*var(--space-x-reverse));margin-left:calc(6rem*(1 - var(--space-x-reverse)))}.lg\:space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.25rem*var(--space-y-reverse))}.lg\:space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.25rem*var(--space-x-reverse));margin-left:calc(6.25rem*(1 - var(--space-x-reverse)))}.lg\:space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.5rem*var(--space-y-reverse))}.lg\:space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.5rem*var(--space-x-reverse));margin-left:calc(6.5rem*(1 - var(--space-x-reverse)))}.lg\:space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8rem*var(--space-y-reverse))}.lg\:space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem*var(--space-x-reverse));margin-left:calc(8rem*(1 - var(--space-x-reverse)))}.lg\:space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8.5rem*var(--space-y-reverse))}.lg\:space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8.5rem*var(--space-x-reverse));margin-left:calc(8.5rem*(1 - var(--space-x-reverse)))}.lg\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(9rem*var(--space-y-reverse))}.lg\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(9rem*var(--space-x-reverse));margin-left:calc(9rem*(1 - var(--space-x-reverse)))}.lg\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(10rem*var(--space-y-reverse))}.lg\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem*var(--space-x-reverse));margin-left:calc(10rem*(1 - var(--space-x-reverse)))}.lg\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(12rem*var(--space-y-reverse))}.lg\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem*var(--space-x-reverse));margin-left:calc(12rem*(1 - var(--space-x-reverse)))}.lg\:space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(13rem*var(--space-y-reverse))}.lg\:space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(13rem*var(--space-x-reverse));margin-left:calc(13rem*(1 - var(--space-x-reverse)))}.lg\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(14rem*var(--space-y-reverse))}.lg\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem*var(--space-x-reverse));margin-left:calc(14rem*(1 - var(--space-x-reverse)))}.lg\:space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(15rem*var(--space-y-reverse))}.lg\:space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(15rem*var(--space-x-reverse));margin-left:calc(15rem*(1 - var(--space-x-reverse)))}.lg\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(16rem*var(--space-y-reverse))}.lg\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem*var(--space-x-reverse));margin-left:calc(16rem*(1 - var(--space-x-reverse)))}.lg\:space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(17rem*var(--space-y-reverse))}.lg\:space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(17rem*var(--space-x-reverse));margin-left:calc(17rem*(1 - var(--space-x-reverse)))}.lg\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px*(1 - var(--space-y-reverse)));margin-bottom:calc(1px*var(--space-y-reverse))}.lg\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px*var(--space-x-reverse));margin-left:calc(1px*(1 - var(--space-x-reverse)))}.lg\:space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.125rem*var(--space-y-reverse))}.lg\:space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.125rem*var(--space-x-reverse));margin-left:calc(0.125rem*(1 - var(--space-x-reverse)))}.lg\:space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.375rem*var(--space-y-reverse))}.lg\:space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.375rem*var(--space-x-reverse));margin-left:calc(0.375rem*(1 - var(--space-x-reverse)))}.lg\:space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.625rem*var(--space-y-reverse))}.lg\:space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.625rem*var(--space-x-reverse));margin-left:calc(0.625rem*(1 - var(--space-x-reverse)))}.lg\:space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.875rem*var(--space-y-reverse))}.lg\:space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.875rem*var(--space-x-reverse));margin-left:calc(1.875rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.25rem*var(--space-y-reverse))}.lg\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.25rem*var(--space-x-reverse));margin-left:calc(-0.25rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.5rem*var(--space-y-reverse))}.lg\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.5rem*var(--space-x-reverse));margin-left:calc(-0.5rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.75rem*var(--space-y-reverse))}.lg\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.75rem*var(--space-x-reverse));margin-left:calc(-0.75rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem*var(--space-y-reverse))}.lg\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem*var(--space-x-reverse));margin-left:calc(-1rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem*var(--space-y-reverse))}.lg\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem*var(--space-x-reverse));margin-left:calc(-1.25rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem*var(--space-y-reverse))}.lg\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem*var(--space-x-reverse));margin-left:calc(-1.5rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.75rem*var(--space-y-reverse))}.lg\:-space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.75rem*var(--space-x-reverse));margin-left:calc(-1.75rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem*var(--space-y-reverse))}.lg\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem*var(--space-x-reverse));margin-left:calc(-2rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.25rem*var(--space-y-reverse))}.lg\:-space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.25rem*var(--space-x-reverse));margin-left:calc(-2.25rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem*var(--space-y-reverse))}.lg\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem*var(--space-x-reverse));margin-left:calc(-2.5rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.75rem*var(--space-y-reverse))}.lg\:-space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.75rem*var(--space-x-reverse));margin-left:calc(-2.75rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem*var(--space-y-reverse))}.lg\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem*var(--space-x-reverse));margin-left:calc(-3rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3.75rem*var(--space-y-reverse))}.lg\:-space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3.75rem*var(--space-x-reverse));margin-left:calc(-3.75rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem*var(--space-y-reverse))}.lg\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem*var(--space-x-reverse));margin-left:calc(-4rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem*var(--space-y-reverse))}.lg\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem*var(--space-x-reverse));margin-left:calc(-5rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5.5rem*var(--space-y-reverse))}.lg\:-space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5.5rem*var(--space-x-reverse));margin-left:calc(-5.5rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem*var(--space-y-reverse))}.lg\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem*var(--space-x-reverse));margin-left:calc(-6rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.25rem*var(--space-y-reverse))}.lg\:-space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.25rem*var(--space-x-reverse));margin-left:calc(-6.25rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.5rem*var(--space-y-reverse))}.lg\:-space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.5rem*var(--space-x-reverse));margin-left:calc(-6.5rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem*var(--space-y-reverse))}.lg\:-space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem*var(--space-x-reverse));margin-left:calc(-8rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8.5rem*var(--space-y-reverse))}.lg\:-space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8.5rem*var(--space-x-reverse));margin-left:calc(-8.5rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-9rem*var(--space-y-reverse))}.lg\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-9rem*var(--space-x-reverse));margin-left:calc(-9rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem*var(--space-y-reverse))}.lg\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem*var(--space-x-reverse));margin-left:calc(-10rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem*var(--space-y-reverse))}.lg\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem*var(--space-x-reverse));margin-left:calc(-12rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-13rem*var(--space-y-reverse))}.lg\:-space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-13rem*var(--space-x-reverse));margin-left:calc(-13rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem*var(--space-y-reverse))}.lg\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem*var(--space-x-reverse));margin-left:calc(-14rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-15rem*var(--space-y-reverse))}.lg\:-space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-15rem*var(--space-x-reverse));margin-left:calc(-15rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem*var(--space-y-reverse))}.lg\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem*var(--space-x-reverse));margin-left:calc(-16rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-17rem*var(--space-y-reverse))}.lg\:-space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-17rem*var(--space-x-reverse));margin-left:calc(-17rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px*(1 - var(--space-y-reverse)));margin-bottom:calc(-1px*var(--space-y-reverse))}.lg\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px*var(--space-x-reverse));margin-left:calc(-1px*(1 - var(--space-x-reverse)))}.lg\:-space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.125rem*var(--space-y-reverse))}.lg\:-space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.125rem*var(--space-x-reverse));margin-left:calc(-0.125rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.375rem*var(--space-y-reverse))}.lg\:-space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.375rem*var(--space-x-reverse));margin-left:calc(-0.375rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.625rem*var(--space-y-reverse))}.lg\:-space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.625rem*var(--space-x-reverse));margin-left:calc(-0.625rem*(1 - var(--space-x-reverse)))}.lg\:-space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.875rem*var(--space-y-reverse))}.lg\:-space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.875rem*var(--space-x-reverse));margin-left:calc(-1.875rem*(1 - var(--space-x-reverse)))}.lg\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.lg\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.lg\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px*var(--divide-y-reverse))}.lg\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px*var(--divide-x-reverse));border-left-width:calc(0px*(1 - var(--divide-x-reverse)))}.lg\:divide-y-1>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.lg\:divide-x-1>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.lg\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px*var(--divide-y-reverse))}.lg\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px*var(--divide-x-reverse));border-left-width:calc(2px*(1 - var(--divide-x-reverse)))}.lg\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px*var(--divide-y-reverse))}.lg\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px*var(--divide-x-reverse));border-left-width:calc(4px*(1 - var(--divide-x-reverse)))}.lg\:divide-y-5>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(5px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(5px*var(--divide-y-reverse))}.lg\:divide-x-5>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(5px*var(--divide-x-reverse));border-left-width:calc(5px*(1 - var(--divide-x-reverse)))}.lg\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px*var(--divide-y-reverse))}.lg\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px*var(--divide-x-reverse));border-left-width:calc(8px*(1 - var(--divide-x-reverse)))}.lg\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.lg\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.lg\:divide-y-DEFAULT>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.lg\:divide-x-DEFAULT>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.lg\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.lg\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.lg\:divide-transparent>:not(template)~:not(template){border-color:transparent}.lg\:divide-current>:not(template)~:not(template){border-color:currentColor}.lg\:divide-black>:not(template)~:not(template){border-color:#000}.lg\:divide-white>:not(template)~:not(template){border-color:#fff}.lg\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.lg\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.lg\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.lg\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.lg\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.lg\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.lg\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.lg\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.lg\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.lg\:divide-gray-DEFAULT>:not(template)~:not(template),.lg\:divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.lg\:divide-red>:not(template)~:not(template){border-color:#d64343}.lg\:divide-orange>:not(template)~:not(template){border-color:#eb6437}.lg\:divide-yellow>:not(template)~:not(template){border-color:#f8da30}.lg\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.lg\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.lg\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.lg\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.lg\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.lg\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.lg\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.lg\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.lg\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.lg\:divide-green-DEFAULT>:not(template)~:not(template),.lg\:divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.lg\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.lg\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.lg\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.lg\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.lg\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.lg\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.lg\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.lg\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.lg\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.lg\:divide-teal-DEFAULT>:not(template)~:not(template),.lg\:divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.lg\:divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.lg\:divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.lg\:divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.lg\:divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.lg\:divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.lg\:divide-blue-500>:not(template)~:not(template){border-color:#058aff}.lg\:divide-blue-600>:not(template)~:not(template){border-color:#0075db}.lg\:divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.lg\:divide-blue-800>:not(template)~:not(template){border-color:#00498a}.lg\:divide-blue-900>:not(template)~:not(template){border-color:#003461}.lg\:divide-blue-DEFAULT>:not(template)~:not(template),.lg\:divide-blue>:not(template)~:not(template){border-color:#0075db}.lg\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.lg\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.lg\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.lg\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.lg\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.lg\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.lg\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.lg\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.lg\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.lg\:divide-indigo-DEFAULT>:not(template)~:not(template),.lg\:divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.lg\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.lg\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.lg\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.lg\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.lg\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.lg\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.lg\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.lg\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.lg\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.lg\:divide-purple-DEFAULT>:not(template)~:not(template),.lg\:divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.lg\:divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.lg\:divide-inherit>:not(template)~:not(template){border-color:inherit}.lg\:divide-amber>:not(template)~:not(template){border-color:#d78737}.lg\:divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.lg\:divide-ardoise>:not(template)~:not(template){border-color:#596a82}.lg\:divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.lg\:divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.lg\:divide-lightBlue-active>:not(template)~:not(template),.lg\:divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.lg\:divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.lg\:divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.lg\:divide-gold>:not(template)~:not(template){border-color:#bd9e56}.lg\:divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.lg\:divide-grenadine>:not(template)~:not(template){border-color:#c35078}.lg\:divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.lg\:divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.lg\:divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.lg\:divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.lg\:divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.lg\:divide-mahogany>:not(template)~:not(template){border-color:#57142e}.lg\:divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.lg\:divide-ocher>:not(template)~:not(template){border-color:#c29614}.lg\:divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.lg\:divide-pine>:not(template)~:not(template){border-color:#144d52}.lg\:divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.lg\:divide-platinum-active>:not(template)~:not(template),.lg\:divide-platinum>:not(template)~:not(template){border-color:#000}.lg\:divide-prune>:not(template)~:not(template){border-color:#661456}.lg\:divide-prune-active>:not(template)~:not(template){border-color:#72085d}.lg\:divide-sand>:not(template)~:not(template){border-color:#d7be88}.lg\:divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.lg\:divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.lg\:divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.lg\:divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.lg\:divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.lg\:divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.lg\:divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.lg\:divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.lg\:divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.lg\:divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.lg\:divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.lg\:divide-waterGreen>:not(template)~:not(template){border-color:#007571}.lg\:divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.lg\:divide-deepRed>:not(template)~:not(template){border-color:#c32222}.lg\:divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.lg\:divide-emerald>:not(template)~:not(template){border-color:#14a33a}.lg\:divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.lg\:divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.lg\:divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.lg\:divide-red-active>:not(template)~:not(template){border-color:#e13737}.lg\:divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.lg\:divide-white-button-active>:not(template)~:not(template),.lg\:divide-white-button>:not(template)~:not(template){border-color:#fff}.lg\:divide-code>:not(template)~:not(template){border-color:#3f3d57}.lg\:divide-code-active>:not(template)~:not(template){border-color:#37354b}.lg\:divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.lg\:divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.lg\:divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.lg\:divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.lg\:divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.lg\:divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.lg\:divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.lg\:divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.lg\:divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.lg\:divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-transparent>:not(template)~:not(template){border-color:transparent}.group:hover .lg\:group-hover\:divide-current>:not(template)~:not(template){border-color:currentColor}.group:hover .lg\:group-hover\:divide-black>:not(template)~:not(template){border-color:#000}.group:hover .lg\:group-hover\:divide-white>:not(template)~:not(template){border-color:#fff}.group:hover .lg\:group-hover\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-DEFAULT>:not(template)~:not(template),.group:hover .lg\:group-hover\:divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-red>:not(template)~:not(template){border-color:#d64343}.group:hover .lg\:group-hover\:divide-orange>:not(template)~:not(template){border-color:#eb6437}.group:hover .lg\:group-hover\:divide-yellow>:not(template)~:not(template){border-color:#f8da30}.group:hover .lg\:group-hover\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-green-DEFAULT>:not(template)~:not(template),.group:hover .lg\:group-hover\:divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-teal-DEFAULT>:not(template)~:not(template),.group:hover .lg\:group-hover\:divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.group:hover .lg\:group-hover\:divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.group:hover .lg\:group-hover\:divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.group:hover .lg\:group-hover\:divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.group:hover .lg\:group-hover\:divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.group:hover .lg\:group-hover\:divide-blue-500>:not(template)~:not(template){border-color:#058aff}.group:hover .lg\:group-hover\:divide-blue-600>:not(template)~:not(template){border-color:#0075db}.group:hover .lg\:group-hover\:divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.group:hover .lg\:group-hover\:divide-blue-800>:not(template)~:not(template){border-color:#00498a}.group:hover .lg\:group-hover\:divide-blue-900>:not(template)~:not(template){border-color:#003461}.group:hover .lg\:group-hover\:divide-blue-DEFAULT>:not(template)~:not(template),.group:hover .lg\:group-hover\:divide-blue>:not(template)~:not(template){border-color:#0075db}.group:hover .lg\:group-hover\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-indigo-DEFAULT>:not(template)~:not(template),.group:hover .lg\:group-hover\:divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-purple-DEFAULT>:not(template)~:not(template),.group:hover .lg\:group-hover\:divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-inherit>:not(template)~:not(template){border-color:inherit}.group:hover .lg\:group-hover\:divide-amber>:not(template)~:not(template){border-color:#d78737}.group:hover .lg\:group-hover\:divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.group:hover .lg\:group-hover\:divide-ardoise>:not(template)~:not(template){border-color:#596a82}.group:hover .lg\:group-hover\:divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.group:hover .lg\:group-hover\:divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .lg\:group-hover\:divide-lightBlue-active>:not(template)~:not(template),.group:hover .lg\:group-hover\:divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.group:hover .lg\:group-hover\:divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.group:hover .lg\:group-hover\:divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.group:hover .lg\:group-hover\:divide-gold>:not(template)~:not(template){border-color:#bd9e56}.group:hover .lg\:group-hover\:divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.group:hover .lg\:group-hover\:divide-grenadine>:not(template)~:not(template){border-color:#c35078}.group:hover .lg\:group-hover\:divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.group:hover .lg\:group-hover\:divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.group:hover .lg\:group-hover\:divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.group:hover .lg\:group-hover\:divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.group:hover .lg\:group-hover\:divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.group:hover .lg\:group-hover\:divide-mahogany>:not(template)~:not(template){border-color:#57142e}.group:hover .lg\:group-hover\:divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.group:hover .lg\:group-hover\:divide-ocher>:not(template)~:not(template){border-color:#c29614}.group:hover .lg\:group-hover\:divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.group:hover .lg\:group-hover\:divide-pine>:not(template)~:not(template){border-color:#144d52}.group:hover .lg\:group-hover\:divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.group:hover .lg\:group-hover\:divide-platinum-active>:not(template)~:not(template),.group:hover .lg\:group-hover\:divide-platinum>:not(template)~:not(template){border-color:#000}.group:hover .lg\:group-hover\:divide-prune>:not(template)~:not(template){border-color:#661456}.group:hover .lg\:group-hover\:divide-prune-active>:not(template)~:not(template){border-color:#72085d}.group:hover .lg\:group-hover\:divide-sand>:not(template)~:not(template){border-color:#d7be88}.group:hover .lg\:group-hover\:divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.group:hover .lg\:group-hover\:divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.group:hover .lg\:group-hover\:divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.group:hover .lg\:group-hover\:divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.group:hover .lg\:group-hover\:divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.group:hover .lg\:group-hover\:divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.group:hover .lg\:group-hover\:divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.group:hover .lg\:group-hover\:divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.group:hover .lg\:group-hover\:divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.group:hover .lg\:group-hover\:divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.group:hover .lg\:group-hover\:divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.group:hover .lg\:group-hover\:divide-waterGreen>:not(template)~:not(template){border-color:#007571}.group:hover .lg\:group-hover\:divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.group:hover .lg\:group-hover\:divide-deepRed>:not(template)~:not(template){border-color:#c32222}.group:hover .lg\:group-hover\:divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.group:hover .lg\:group-hover\:divide-emerald>:not(template)~:not(template){border-color:#14a33a}.group:hover .lg\:group-hover\:divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.group:hover .lg\:group-hover\:divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.group:hover .lg\:group-hover\:divide-red-active>:not(template)~:not(template){border-color:#e13737}.group:hover .lg\:group-hover\:divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .lg\:group-hover\:divide-white-button-active>:not(template)~:not(template),.group:hover .lg\:group-hover\:divide-white-button>:not(template)~:not(template){border-color:#fff}.group:hover .lg\:group-hover\:divide-code>:not(template)~:not(template){border-color:#3f3d57}.group:hover .lg\:group-hover\:divide-code-active>:not(template)~:not(template){border-color:#37354b}.group:hover .lg\:group-hover\:divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.group:hover .lg\:group-hover\:divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .lg\:group-hover\:divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.group:hover .lg\:group-hover\:divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.group:hover .lg\:group-hover\:divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.lg\:divide-solid>:not(template)~:not(template){border-style:solid}.lg\:divide-dashed>:not(template)~:not(template){border-style:dashed}.lg\:divide-dotted>:not(template)~:not(template){border-style:dotted}.lg\:divide-double>:not(template)~:not(template){border-style:double}.lg\:divide-none>:not(template)~:not(template){border-style:none}.lg\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.lg\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.lg\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.lg\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.lg\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.group:hover .lg\:group-hover\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.group:hover .lg\:group-hover\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.group:hover .lg\:group-hover\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.group:hover .lg\:group-hover\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.group:hover .lg\:group-hover\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.lg\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lg\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.lg\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lg\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.lg\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lg\:bg-fixed{background-attachment:fixed}.lg\:bg-local{background-attachment:local}.lg\:bg-scroll{background-attachment:scroll}.lg\:bg-clip-border{background-clip:border-box}.lg\:bg-clip-padding{background-clip:padding-box}.lg\:bg-clip-content{background-clip:content-box}.lg\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.lg\:bg-transparent{background-color:transparent}.lg\:bg-current{background-color:currentColor}.lg\:bg-black{background-color:#000}.lg\:bg-white{background-color:#fff}.lg\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.lg\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.lg\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.lg\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.lg\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.lg\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.lg\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.lg\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.lg\:bg-gray,.lg\:bg-gray-DEFAULT{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:bg-red{background-color:#d64343}.lg\:bg-orange{background-color:#eb6437}.lg\:bg-yellow{background-color:#f8da30}.lg\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.lg\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.lg\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.lg\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.lg\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.lg\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.lg\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.lg\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.lg\:bg-green,.lg\:bg-green-DEFAULT{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.lg\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.lg\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.lg\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.lg\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.lg\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.lg\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.lg\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.lg\:bg-teal,.lg\:bg-teal-DEFAULT{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:bg-blue-50{background-color:#d1eaff}.lg\:bg-blue-100{background-color:#a8d7ff}.lg\:bg-blue-200{background-color:#80c4ff}.lg\:bg-blue-300{background-color:#57b0ff}.lg\:bg-blue-400{background-color:#2e9dff}.lg\:bg-blue-500{background-color:#058aff}.lg\:bg-blue-600{background-color:#0075db}.lg\:bg-blue-700{background-color:#005fb3}.lg\:bg-blue-800{background-color:#00498a}.lg\:bg-blue-900{background-color:#003461}.lg\:bg-blue,.lg\:bg-blue-DEFAULT{background-color:#0075db}.lg\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.lg\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.lg\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.lg\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.lg\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.lg\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.lg\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.lg\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.lg\:bg-indigo,.lg\:bg-indigo-DEFAULT{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.lg\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.lg\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.lg\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.lg\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.lg\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.lg\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.lg\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.lg\:bg-purple,.lg\:bg-purple-DEFAULT{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:bg-pink{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.lg\:bg-inherit{background-color:inherit}.lg\:bg-amber{background-color:#d78737}.lg\:bg-amber-active{background-color:#e3872b}.lg\:bg-ardoise{background-color:#596a82}.lg\:bg-ardoise-active{background-color:#476794}.lg\:bg-blue-active{background-color:#14a5c2}.lg\:bg-lightBlue,.lg\:bg-lightBlue-active{background-color:rgba(0,85,138,.1)}.lg\:bg-deepBlue{background-color:#0e346c}.lg\:bg-deepBlue-active{background-color:#0a3f8f}.lg\:bg-gold{background-color:#bd9e56}.lg\:bg-gold-active{background-color:#c9a34a}.lg\:bg-grenadine{background-color:#c35078}.lg\:bg-grenadine-active{background-color:#cf4475}.lg\:bg-kiwi{background-color:#9a9f1e}.lg\:bg-kiwi-active{background-color:#a3a815}.lg\:bg-lilas{background-color:#7ea1d3}.lg\:bg-lilas-active{background-color:#75a0db}.lg\:bg-mahogany{background-color:#57142e}.lg\:bg-mahogany-active{background-color:#610a2b}.lg\:bg-ocher{background-color:#c29614}.lg\:bg-ocher-active{background-color:#cd9c0a}.lg\:bg-pine{background-color:#144d52}.lg\:bg-pine-active{background-color:#0a555c}.lg\:bg-platinum,.lg\:bg-platinum-active{background-color:#000}.lg\:bg-prune{background-color:#661456}.lg\:bg-prune-active{background-color:#72085d}.lg\:bg-sand{background-color:#d7be88}.lg\:bg-sand-active{background-color:#dfc181}.lg\:bg-sandPearl{background-color:#f0e5d6}.lg\:bg-sandPearl-active{background-color:#f2e6d4}.lg\:bg-silver{background-color:#b1b2b4}.lg\:bg-silver-active{background-color:#a9afbc}.lg\:bg-skyBlue{background-color:#98d2d7}.lg\:bg-skyBlue-active{background-color:#91d8de}.lg\:bg-southSea{background-color:#9dc9cd}.lg\:bg-southSea-active{background-color:#95ced5}.lg\:bg-turquoise{background-color:#14a5c2}.lg\:bg-turquoise-active{background-color:#0aaccd}.lg\:bg-waterGreen{background-color:#007571}.lg\:bg-waterGreen-active{background-color:#00a8a3}.lg\:bg-deepRed{background-color:#c32222}.lg\:bg-deepRed-active{background-color:#cf1717}.lg\:bg-emerald{background-color:#14a33a}.lg\:bg-emerald-active{background-color:#0bad36}.lg\:bg-greenLight{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.lg\:bg-orange-active{background-color:#f65f2c}.lg\:bg-red-active{background-color:#e13737}.lg\:bg-white-active{background-color:#14a5c2}.lg\:bg-white-button,.lg\:bg-white-button-active{background-color:#fff}.lg\:bg-code{background-color:#3f3d57}.lg\:bg-code-active{background-color:#37354b}.lg\:bg-gray-lighter{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.lg\:bg-gray-lighter-active{background-color:#ebebeb}.lg\:bg-gray-light{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.lg\:bg-gray-medium{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.lg\:bg-gray-darker{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.lg\:bg-gray-darker-active{background-color:#14a5c2}.lg\:bg-api-default{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.lg\:bg-gray-xxl{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.lg\:bg-line-even{background-color:#f3f6f7}.lg\:hover\:bg-transparent:hover{background-color:transparent}.lg\:hover\:bg-current:hover{background-color:currentColor}.lg\:hover\:bg-black:hover{background-color:#000}.lg\:hover\:bg-white:hover{background-color:#fff}.lg\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.lg\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.lg\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.lg\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.lg\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.lg\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.lg\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.lg\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.lg\:hover\:bg-gray-DEFAULT:hover,.lg\:hover\:bg-gray:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:hover\:bg-red:hover{background-color:#d64343}.lg\:hover\:bg-orange:hover{background-color:#eb6437}.lg\:hover\:bg-yellow:hover{background-color:#f8da30}.lg\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.lg\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.lg\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.lg\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.lg\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.lg\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.lg\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.lg\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.lg\:hover\:bg-green-DEFAULT:hover,.lg\:hover\:bg-green:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.lg\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.lg\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.lg\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.lg\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.lg\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.lg\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.lg\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.lg\:hover\:bg-teal-DEFAULT:hover,.lg\:hover\:bg-teal:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:hover\:bg-blue-50:hover{background-color:#d1eaff}.lg\:hover\:bg-blue-100:hover{background-color:#a8d7ff}.lg\:hover\:bg-blue-200:hover{background-color:#80c4ff}.lg\:hover\:bg-blue-300:hover{background-color:#57b0ff}.lg\:hover\:bg-blue-400:hover{background-color:#2e9dff}.lg\:hover\:bg-blue-500:hover{background-color:#058aff}.lg\:hover\:bg-blue-600:hover{background-color:#0075db}.lg\:hover\:bg-blue-700:hover{background-color:#005fb3}.lg\:hover\:bg-blue-800:hover{background-color:#00498a}.lg\:hover\:bg-blue-900:hover{background-color:#003461}.lg\:hover\:bg-blue-DEFAULT:hover,.lg\:hover\:bg-blue:hover{background-color:#0075db}.lg\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.lg\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.lg\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.lg\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.lg\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.lg\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.lg\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.lg\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.lg\:hover\:bg-indigo-DEFAULT:hover,.lg\:hover\:bg-indigo:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.lg\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.lg\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.lg\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.lg\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.lg\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.lg\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.lg\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.lg\:hover\:bg-purple-DEFAULT:hover,.lg\:hover\:bg-purple:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:hover\:bg-pink:hover{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.lg\:hover\:bg-inherit:hover{background-color:inherit}.lg\:hover\:bg-amber:hover{background-color:#d78737}.lg\:hover\:bg-amber-active:hover{background-color:#e3872b}.lg\:hover\:bg-ardoise:hover{background-color:#596a82}.lg\:hover\:bg-ardoise-active:hover{background-color:#476794}.lg\:hover\:bg-blue-active:hover{background-color:#14a5c2}.lg\:hover\:bg-lightBlue-active:hover,.lg\:hover\:bg-lightBlue:hover{background-color:rgba(0,85,138,.1)}.lg\:hover\:bg-deepBlue:hover{background-color:#0e346c}.lg\:hover\:bg-deepBlue-active:hover{background-color:#0a3f8f}.lg\:hover\:bg-gold:hover{background-color:#bd9e56}.lg\:hover\:bg-gold-active:hover{background-color:#c9a34a}.lg\:hover\:bg-grenadine:hover{background-color:#c35078}.lg\:hover\:bg-grenadine-active:hover{background-color:#cf4475}.lg\:hover\:bg-kiwi:hover{background-color:#9a9f1e}.lg\:hover\:bg-kiwi-active:hover{background-color:#a3a815}.lg\:hover\:bg-lilas:hover{background-color:#7ea1d3}.lg\:hover\:bg-lilas-active:hover{background-color:#75a0db}.lg\:hover\:bg-mahogany:hover{background-color:#57142e}.lg\:hover\:bg-mahogany-active:hover{background-color:#610a2b}.lg\:hover\:bg-ocher:hover{background-color:#c29614}.lg\:hover\:bg-ocher-active:hover{background-color:#cd9c0a}.lg\:hover\:bg-pine:hover{background-color:#144d52}.lg\:hover\:bg-pine-active:hover{background-color:#0a555c}.lg\:hover\:bg-platinum-active:hover,.lg\:hover\:bg-platinum:hover{background-color:#000}.lg\:hover\:bg-prune:hover{background-color:#661456}.lg\:hover\:bg-prune-active:hover{background-color:#72085d}.lg\:hover\:bg-sand:hover{background-color:#d7be88}.lg\:hover\:bg-sand-active:hover{background-color:#dfc181}.lg\:hover\:bg-sandPearl:hover{background-color:#f0e5d6}.lg\:hover\:bg-sandPearl-active:hover{background-color:#f2e6d4}.lg\:hover\:bg-silver:hover{background-color:#b1b2b4}.lg\:hover\:bg-silver-active:hover{background-color:#a9afbc}.lg\:hover\:bg-skyBlue:hover{background-color:#98d2d7}.lg\:hover\:bg-skyBlue-active:hover{background-color:#91d8de}.lg\:hover\:bg-southSea:hover{background-color:#9dc9cd}.lg\:hover\:bg-southSea-active:hover{background-color:#95ced5}.lg\:hover\:bg-turquoise:hover{background-color:#14a5c2}.lg\:hover\:bg-turquoise-active:hover{background-color:#0aaccd}.lg\:hover\:bg-waterGreen:hover{background-color:#007571}.lg\:hover\:bg-waterGreen-active:hover{background-color:#00a8a3}.lg\:hover\:bg-deepRed:hover{background-color:#c32222}.lg\:hover\:bg-deepRed-active:hover{background-color:#cf1717}.lg\:hover\:bg-emerald:hover{background-color:#14a33a}.lg\:hover\:bg-emerald-active:hover{background-color:#0bad36}.lg\:hover\:bg-greenLight:hover{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.lg\:hover\:bg-orange-active:hover{background-color:#f65f2c}.lg\:hover\:bg-red-active:hover{background-color:#e13737}.lg\:hover\:bg-white-active:hover{background-color:#14a5c2}.lg\:hover\:bg-white-button-active:hover,.lg\:hover\:bg-white-button:hover{background-color:#fff}.lg\:hover\:bg-code:hover{background-color:#3f3d57}.lg\:hover\:bg-code-active:hover{background-color:#37354b}.lg\:hover\:bg-gray-lighter:hover{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.lg\:hover\:bg-gray-lighter-active:hover{background-color:#ebebeb}.lg\:hover\:bg-gray-light:hover{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.lg\:hover\:bg-gray-medium:hover{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.lg\:hover\:bg-gray-darker:hover{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.lg\:hover\:bg-gray-darker-active:hover{background-color:#14a5c2}.lg\:hover\:bg-api-default:hover{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.lg\:hover\:bg-gray-xxl:hover{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.lg\:hover\:bg-line-even:hover{background-color:#f3f6f7}.lg\:focus\:bg-transparent:focus{background-color:transparent}.lg\:focus\:bg-current:focus{background-color:currentColor}.lg\:focus\:bg-black:focus{background-color:#000}.lg\:focus\:bg-white:focus{background-color:#fff}.lg\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.lg\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.lg\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.lg\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.lg\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.lg\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.lg\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.lg\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.lg\:focus\:bg-gray-DEFAULT:focus,.lg\:focus\:bg-gray:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:focus\:bg-red:focus{background-color:#d64343}.lg\:focus\:bg-orange:focus{background-color:#eb6437}.lg\:focus\:bg-yellow:focus{background-color:#f8da30}.lg\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.lg\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.lg\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.lg\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.lg\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.lg\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.lg\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.lg\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.lg\:focus\:bg-green-DEFAULT:focus,.lg\:focus\:bg-green:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.lg\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.lg\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.lg\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.lg\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.lg\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.lg\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.lg\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.lg\:focus\:bg-teal-DEFAULT:focus,.lg\:focus\:bg-teal:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:focus\:bg-blue-50:focus{background-color:#d1eaff}.lg\:focus\:bg-blue-100:focus{background-color:#a8d7ff}.lg\:focus\:bg-blue-200:focus{background-color:#80c4ff}.lg\:focus\:bg-blue-300:focus{background-color:#57b0ff}.lg\:focus\:bg-blue-400:focus{background-color:#2e9dff}.lg\:focus\:bg-blue-500:focus{background-color:#058aff}.lg\:focus\:bg-blue-600:focus{background-color:#0075db}.lg\:focus\:bg-blue-700:focus{background-color:#005fb3}.lg\:focus\:bg-blue-800:focus{background-color:#00498a}.lg\:focus\:bg-blue-900:focus{background-color:#003461}.lg\:focus\:bg-blue-DEFAULT:focus,.lg\:focus\:bg-blue:focus{background-color:#0075db}.lg\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.lg\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.lg\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.lg\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.lg\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.lg\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.lg\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.lg\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.lg\:focus\:bg-indigo-DEFAULT:focus,.lg\:focus\:bg-indigo:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.lg\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.lg\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.lg\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.lg\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.lg\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.lg\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.lg\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.lg\:focus\:bg-purple-DEFAULT:focus,.lg\:focus\:bg-purple:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:focus\:bg-pink:focus{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.lg\:focus\:bg-inherit:focus{background-color:inherit}.lg\:focus\:bg-amber:focus{background-color:#d78737}.lg\:focus\:bg-amber-active:focus{background-color:#e3872b}.lg\:focus\:bg-ardoise:focus{background-color:#596a82}.lg\:focus\:bg-ardoise-active:focus{background-color:#476794}.lg\:focus\:bg-blue-active:focus{background-color:#14a5c2}.lg\:focus\:bg-lightBlue-active:focus,.lg\:focus\:bg-lightBlue:focus{background-color:rgba(0,85,138,.1)}.lg\:focus\:bg-deepBlue:focus{background-color:#0e346c}.lg\:focus\:bg-deepBlue-active:focus{background-color:#0a3f8f}.lg\:focus\:bg-gold:focus{background-color:#bd9e56}.lg\:focus\:bg-gold-active:focus{background-color:#c9a34a}.lg\:focus\:bg-grenadine:focus{background-color:#c35078}.lg\:focus\:bg-grenadine-active:focus{background-color:#cf4475}.lg\:focus\:bg-kiwi:focus{background-color:#9a9f1e}.lg\:focus\:bg-kiwi-active:focus{background-color:#a3a815}.lg\:focus\:bg-lilas:focus{background-color:#7ea1d3}.lg\:focus\:bg-lilas-active:focus{background-color:#75a0db}.lg\:focus\:bg-mahogany:focus{background-color:#57142e}.lg\:focus\:bg-mahogany-active:focus{background-color:#610a2b}.lg\:focus\:bg-ocher:focus{background-color:#c29614}.lg\:focus\:bg-ocher-active:focus{background-color:#cd9c0a}.lg\:focus\:bg-pine:focus{background-color:#144d52}.lg\:focus\:bg-pine-active:focus{background-color:#0a555c}.lg\:focus\:bg-platinum-active:focus,.lg\:focus\:bg-platinum:focus{background-color:#000}.lg\:focus\:bg-prune:focus{background-color:#661456}.lg\:focus\:bg-prune-active:focus{background-color:#72085d}.lg\:focus\:bg-sand:focus{background-color:#d7be88}.lg\:focus\:bg-sand-active:focus{background-color:#dfc181}.lg\:focus\:bg-sandPearl:focus{background-color:#f0e5d6}.lg\:focus\:bg-sandPearl-active:focus{background-color:#f2e6d4}.lg\:focus\:bg-silver:focus{background-color:#b1b2b4}.lg\:focus\:bg-silver-active:focus{background-color:#a9afbc}.lg\:focus\:bg-skyBlue:focus{background-color:#98d2d7}.lg\:focus\:bg-skyBlue-active:focus{background-color:#91d8de}.lg\:focus\:bg-southSea:focus{background-color:#9dc9cd}.lg\:focus\:bg-southSea-active:focus{background-color:#95ced5}.lg\:focus\:bg-turquoise:focus{background-color:#14a5c2}.lg\:focus\:bg-turquoise-active:focus{background-color:#0aaccd}.lg\:focus\:bg-waterGreen:focus{background-color:#007571}.lg\:focus\:bg-waterGreen-active:focus{background-color:#00a8a3}.lg\:focus\:bg-deepRed:focus{background-color:#c32222}.lg\:focus\:bg-deepRed-active:focus{background-color:#cf1717}.lg\:focus\:bg-emerald:focus{background-color:#14a33a}.lg\:focus\:bg-emerald-active:focus{background-color:#0bad36}.lg\:focus\:bg-greenLight:focus{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.lg\:focus\:bg-orange-active:focus{background-color:#f65f2c}.lg\:focus\:bg-red-active:focus{background-color:#e13737}.lg\:focus\:bg-white-active:focus{background-color:#14a5c2}.lg\:focus\:bg-white-button-active:focus,.lg\:focus\:bg-white-button:focus{background-color:#fff}.lg\:focus\:bg-code:focus{background-color:#3f3d57}.lg\:focus\:bg-code-active:focus{background-color:#37354b}.lg\:focus\:bg-gray-lighter:focus{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.lg\:focus\:bg-gray-lighter-active:focus{background-color:#ebebeb}.lg\:focus\:bg-gray-light:focus{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.lg\:focus\:bg-gray-medium:focus{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.lg\:focus\:bg-gray-darker:focus{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.lg\:focus\:bg-gray-darker-active:focus{background-color:#14a5c2}.lg\:focus\:bg-api-default:focus{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.lg\:focus\:bg-gray-xxl:focus{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.lg\:focus\:bg-line-even:focus{background-color:#f3f6f7}.lg\:bg-none{background-image:none}.lg\:bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))}.lg\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.lg\:bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))}.lg\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.lg\:bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))}.lg\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.lg\:bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))}.lg\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.lg\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.lg\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.lg\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.lg\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.lg\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.lg\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.lg\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.lg\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.lg\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.lg\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.lg\:from-gray,.lg\:from-gray-DEFAULT{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:from-red{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.lg\:from-orange{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.lg\:from-yellow{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.lg\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.lg\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.lg\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.lg\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.lg\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.lg\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.lg\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.lg\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.lg\:from-green,.lg\:from-green-DEFAULT{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.lg\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.lg\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.lg\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.lg\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.lg\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.lg\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.lg\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.lg\:from-teal,.lg\:from-teal-DEFAULT{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:from-blue-50{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.lg\:from-blue-100{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.lg\:from-blue-200{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.lg\:from-blue-300{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.lg\:from-blue-400{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.lg\:from-blue-500{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.lg\:from-blue-600{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:from-blue-700{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.lg\:from-blue-800{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.lg\:from-blue-900{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.lg\:from-blue,.lg\:from-blue-DEFAULT{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.lg\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.lg\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.lg\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.lg\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.lg\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.lg\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.lg\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.lg\:from-indigo,.lg\:from-indigo-DEFAULT{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.lg\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.lg\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.lg\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.lg\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.lg\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.lg\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.lg\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.lg\:from-purple,.lg\:from-purple-DEFAULT{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:from-pink{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.lg\:from-inherit{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:from-amber{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.lg\:from-amber-active{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.lg\:from-ardoise{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.lg\:from-ardoise-active{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.lg\:from-blue-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:from-lightBlue,.lg\:from-lightBlue-active{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.lg\:from-deepBlue{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.lg\:from-deepBlue-active{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.lg\:from-gold{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.lg\:from-gold-active{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.lg\:from-grenadine{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.lg\:from-grenadine-active{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.lg\:from-kiwi{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.lg\:from-kiwi-active{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.lg\:from-lilas{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.lg\:from-lilas-active{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.lg\:from-mahogany{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.lg\:from-mahogany-active{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.lg\:from-ocher{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.lg\:from-ocher-active{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.lg\:from-pine{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.lg\:from-pine-active{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.lg\:from-platinum,.lg\:from-platinum-active{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.lg\:from-prune{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.lg\:from-prune-active{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.lg\:from-sand{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.lg\:from-sand-active{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.lg\:from-sandPearl{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.lg\:from-sandPearl-active{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.lg\:from-silver{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.lg\:from-silver-active{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.lg\:from-skyBlue{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.lg\:from-skyBlue-active{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.lg\:from-southSea{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.lg\:from-southSea-active{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.lg\:from-turquoise{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:from-turquoise-active{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.lg\:from-waterGreen{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.lg\:from-waterGreen-active{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.lg\:from-deepRed{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.lg\:from-deepRed-active{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.lg\:from-emerald{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.lg\:from-emerald-active{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.lg\:from-greenLight{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.lg\:from-orange-active{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.lg\:from-red-active{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.lg\:from-white-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:from-white-button,.lg\:from-white-button-active{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:from-code{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.lg\:from-code-active{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.lg\:from-gray-lighter{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.lg\:from-gray-lighter-active{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.lg\:from-gray-light{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.lg\:from-gray-medium{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.lg\:from-gray-darker{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.lg\:from-gray-darker-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:from-api-default{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.lg\:from-gray-xxl{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.lg\:from-line-even{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.lg\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.lg\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.lg\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.lg\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.lg\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.lg\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.lg\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.lg\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.lg\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.lg\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.lg\:via-gray,.lg\:via-gray-DEFAULT{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:via-red{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.lg\:via-orange{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.lg\:via-yellow{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.lg\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.lg\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.lg\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.lg\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.lg\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.lg\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.lg\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.lg\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.lg\:via-green,.lg\:via-green-DEFAULT{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.lg\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.lg\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.lg\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.lg\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.lg\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.lg\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.lg\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.lg\:via-teal,.lg\:via-teal-DEFAULT{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:via-blue-50{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.lg\:via-blue-100{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.lg\:via-blue-200{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.lg\:via-blue-300{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.lg\:via-blue-400{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.lg\:via-blue-500{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.lg\:via-blue-600{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:via-blue-700{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.lg\:via-blue-800{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.lg\:via-blue-900{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.lg\:via-blue,.lg\:via-blue-DEFAULT{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.lg\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.lg\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.lg\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.lg\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.lg\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.lg\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.lg\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.lg\:via-indigo,.lg\:via-indigo-DEFAULT{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.lg\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.lg\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.lg\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.lg\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.lg\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.lg\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.lg\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.lg\:via-purple,.lg\:via-purple-DEFAULT{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:via-pink{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.lg\:via-inherit{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:via-amber{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.lg\:via-amber-active{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.lg\:via-ardoise{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.lg\:via-ardoise-active{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.lg\:via-blue-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:via-lightBlue,.lg\:via-lightBlue-active{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.lg\:via-deepBlue{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.lg\:via-deepBlue-active{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.lg\:via-gold{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.lg\:via-gold-active{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.lg\:via-grenadine{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.lg\:via-grenadine-active{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.lg\:via-kiwi{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.lg\:via-kiwi-active{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.lg\:via-lilas{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.lg\:via-lilas-active{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.lg\:via-mahogany{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.lg\:via-mahogany-active{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.lg\:via-ocher{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.lg\:via-ocher-active{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.lg\:via-pine{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.lg\:via-pine-active{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.lg\:via-platinum,.lg\:via-platinum-active{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.lg\:via-prune{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.lg\:via-prune-active{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.lg\:via-sand{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.lg\:via-sand-active{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.lg\:via-sandPearl{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.lg\:via-sandPearl-active{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.lg\:via-silver{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.lg\:via-silver-active{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.lg\:via-skyBlue{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.lg\:via-skyBlue-active{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.lg\:via-southSea{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.lg\:via-southSea-active{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.lg\:via-turquoise{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:via-turquoise-active{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.lg\:via-waterGreen{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.lg\:via-waterGreen-active{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.lg\:via-deepRed{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.lg\:via-deepRed-active{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.lg\:via-emerald{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.lg\:via-emerald-active{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.lg\:via-greenLight{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.lg\:via-orange-active{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.lg\:via-red-active{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.lg\:via-white-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:via-white-button,.lg\:via-white-button-active{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:via-code{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.lg\:via-code-active{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.lg\:via-gray-lighter{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.lg\:via-gray-lighter-active{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.lg\:via-gray-light{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.lg\:via-gray-medium{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.lg\:via-gray-darker{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.lg\:via-gray-darker-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:via-api-default{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.lg\:via-gray-xxl{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.lg\:via-line-even{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.lg\:to-transparent{--gradient-to-color:transparent}.lg\:to-current{--gradient-to-color:currentColor}.lg\:to-black{--gradient-to-color:#000}.lg\:to-white{--gradient-to-color:#fff}.lg\:to-gray-100{--gradient-to-color:#f7fafc}.lg\:to-gray-200{--gradient-to-color:#edf2f7}.lg\:to-gray-300{--gradient-to-color:#e2e8f0}.lg\:to-gray-400{--gradient-to-color:#cbd5e0}.lg\:to-gray-500{--gradient-to-color:#a0aec0}.lg\:to-gray-600{--gradient-to-color:#718096}.lg\:to-gray-700{--gradient-to-color:#4a5568}.lg\:to-gray-800{--gradient-to-color:#2d3748}.lg\:to-gray-900{--gradient-to-color:#1a202c}.lg\:to-gray,.lg\:to-gray-DEFAULT{--gradient-to-color:#718096}.lg\:to-red{--gradient-to-color:#d64343}.lg\:to-orange{--gradient-to-color:#eb6437}.lg\:to-yellow{--gradient-to-color:#f8da30}.lg\:to-green-100{--gradient-to-color:#f0fff4}.lg\:to-green-200{--gradient-to-color:#c6f6d5}.lg\:to-green-300{--gradient-to-color:#9ae6b4}.lg\:to-green-400{--gradient-to-color:#68d391}.lg\:to-green-500{--gradient-to-color:#48bb78}.lg\:to-green-600{--gradient-to-color:#38a169}.lg\:to-green-700{--gradient-to-color:#2f855a}.lg\:to-green-800{--gradient-to-color:#276749}.lg\:to-green-900{--gradient-to-color:#22543d}.lg\:to-green,.lg\:to-green-DEFAULT{--gradient-to-color:#38a169}.lg\:to-teal-100{--gradient-to-color:#e6fffa}.lg\:to-teal-200{--gradient-to-color:#b2f5ea}.lg\:to-teal-300{--gradient-to-color:#81e6d9}.lg\:to-teal-400{--gradient-to-color:#4fd1c5}.lg\:to-teal-500{--gradient-to-color:#38b2ac}.lg\:to-teal-600{--gradient-to-color:#319795}.lg\:to-teal-700{--gradient-to-color:#2c7a7b}.lg\:to-teal-800{--gradient-to-color:#285e61}.lg\:to-teal-900{--gradient-to-color:#234e52}.lg\:to-teal,.lg\:to-teal-DEFAULT{--gradient-to-color:#319795}.lg\:to-blue-50{--gradient-to-color:#d1eaff}.lg\:to-blue-100{--gradient-to-color:#a8d7ff}.lg\:to-blue-200{--gradient-to-color:#80c4ff}.lg\:to-blue-300{--gradient-to-color:#57b0ff}.lg\:to-blue-400{--gradient-to-color:#2e9dff}.lg\:to-blue-500{--gradient-to-color:#058aff}.lg\:to-blue-600{--gradient-to-color:#0075db}.lg\:to-blue-700{--gradient-to-color:#005fb3}.lg\:to-blue-800{--gradient-to-color:#00498a}.lg\:to-blue-900{--gradient-to-color:#003461}.lg\:to-blue,.lg\:to-blue-DEFAULT{--gradient-to-color:#0075db}.lg\:to-indigo-100{--gradient-to-color:#ebf4ff}.lg\:to-indigo-200{--gradient-to-color:#c3dafe}.lg\:to-indigo-300{--gradient-to-color:#a3bffa}.lg\:to-indigo-400{--gradient-to-color:#7f9cf5}.lg\:to-indigo-500{--gradient-to-color:#667eea}.lg\:to-indigo-600{--gradient-to-color:#5a67d8}.lg\:to-indigo-700{--gradient-to-color:#4c51bf}.lg\:to-indigo-800{--gradient-to-color:#434190}.lg\:to-indigo-900{--gradient-to-color:#3c366b}.lg\:to-indigo,.lg\:to-indigo-DEFAULT{--gradient-to-color:#5a67d8}.lg\:to-purple-100{--gradient-to-color:#faf5ff}.lg\:to-purple-200{--gradient-to-color:#e9d8fd}.lg\:to-purple-300{--gradient-to-color:#d6bcfa}.lg\:to-purple-400{--gradient-to-color:#b794f4}.lg\:to-purple-500{--gradient-to-color:#9f7aea}.lg\:to-purple-600{--gradient-to-color:#805ad5}.lg\:to-purple-700{--gradient-to-color:#6b46c1}.lg\:to-purple-800{--gradient-to-color:#553c9a}.lg\:to-purple-900{--gradient-to-color:#44337a}.lg\:to-purple,.lg\:to-purple-DEFAULT{--gradient-to-color:#805ad5}.lg\:to-pink{--gradient-to-color:#d81b60}.lg\:to-inherit{--gradient-to-color:inherit}.lg\:to-amber{--gradient-to-color:#d78737}.lg\:to-amber-active{--gradient-to-color:#e3872b}.lg\:to-ardoise{--gradient-to-color:#596a82}.lg\:to-ardoise-active{--gradient-to-color:#476794}.lg\:to-blue-active{--gradient-to-color:#14a5c2}.lg\:to-lightBlue,.lg\:to-lightBlue-active{--gradient-to-color:rgba(0,85,138,0.1)}.lg\:to-deepBlue{--gradient-to-color:#0e346c}.lg\:to-deepBlue-active{--gradient-to-color:#0a3f8f}.lg\:to-gold{--gradient-to-color:#bd9e56}.lg\:to-gold-active{--gradient-to-color:#c9a34a}.lg\:to-grenadine{--gradient-to-color:#c35078}.lg\:to-grenadine-active{--gradient-to-color:#cf4475}.lg\:to-kiwi{--gradient-to-color:#9a9f1e}.lg\:to-kiwi-active{--gradient-to-color:#a3a815}.lg\:to-lilas{--gradient-to-color:#7ea1d3}.lg\:to-lilas-active{--gradient-to-color:#75a0db}.lg\:to-mahogany{--gradient-to-color:#57142e}.lg\:to-mahogany-active{--gradient-to-color:#610a2b}.lg\:to-ocher{--gradient-to-color:#c29614}.lg\:to-ocher-active{--gradient-to-color:#cd9c0a}.lg\:to-pine{--gradient-to-color:#144d52}.lg\:to-pine-active{--gradient-to-color:#0a555c}.lg\:to-platinum,.lg\:to-platinum-active{--gradient-to-color:#000}.lg\:to-prune{--gradient-to-color:#661456}.lg\:to-prune-active{--gradient-to-color:#72085d}.lg\:to-sand{--gradient-to-color:#d7be88}.lg\:to-sand-active{--gradient-to-color:#dfc181}.lg\:to-sandPearl{--gradient-to-color:#f0e5d6}.lg\:to-sandPearl-active{--gradient-to-color:#f2e6d4}.lg\:to-silver{--gradient-to-color:#b1b2b4}.lg\:to-silver-active{--gradient-to-color:#a9afbc}.lg\:to-skyBlue{--gradient-to-color:#98d2d7}.lg\:to-skyBlue-active{--gradient-to-color:#91d8de}.lg\:to-southSea{--gradient-to-color:#9dc9cd}.lg\:to-southSea-active{--gradient-to-color:#95ced5}.lg\:to-turquoise{--gradient-to-color:#14a5c2}.lg\:to-turquoise-active{--gradient-to-color:#0aaccd}.lg\:to-waterGreen{--gradient-to-color:#007571}.lg\:to-waterGreen-active{--gradient-to-color:#00a8a3}.lg\:to-deepRed{--gradient-to-color:#c32222}.lg\:to-deepRed-active{--gradient-to-color:#cf1717}.lg\:to-emerald{--gradient-to-color:#14a33a}.lg\:to-emerald-active{--gradient-to-color:#0bad36}.lg\:to-greenLight{--gradient-to-color:#7cb342}.lg\:to-orange-active{--gradient-to-color:#f65f2c}.lg\:to-red-active{--gradient-to-color:#e13737}.lg\:to-white-active{--gradient-to-color:#14a5c2}.lg\:to-white-button,.lg\:to-white-button-active{--gradient-to-color:#fff}.lg\:to-code{--gradient-to-color:#3f3d57}.lg\:to-code-active{--gradient-to-color:#37354b}.lg\:to-gray-lighter{--gradient-to-color:#f7f7f7}.lg\:to-gray-lighter-active{--gradient-to-color:#ebebeb}.lg\:to-gray-light{--gradient-to-color:#d4d1d1}.lg\:to-gray-medium{--gradient-to-color:#a8a0a0}.lg\:to-gray-darker{--gradient-to-color:#504747}.lg\:to-gray-darker-active{--gradient-to-color:#14a5c2}.lg\:to-api-default{--gradient-to-color:#507192}.lg\:to-gray-xxl{--gradient-to-color:#2c3e50}.lg\:to-line-even{--gradient-to-color:#f3f6f7}.lg\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.lg\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.lg\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.lg\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.lg\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.lg\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.lg\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.lg\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.lg\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.lg\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.lg\:hover\:from-gray-DEFAULT:hover,.lg\:hover\:from-gray:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:hover\:from-red:hover{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.lg\:hover\:from-orange:hover{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.lg\:hover\:from-yellow:hover{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.lg\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.lg\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.lg\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.lg\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.lg\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.lg\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.lg\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.lg\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.lg\:hover\:from-green-DEFAULT:hover,.lg\:hover\:from-green:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.lg\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.lg\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.lg\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.lg\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.lg\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.lg\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.lg\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.lg\:hover\:from-teal-DEFAULT:hover,.lg\:hover\:from-teal:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:hover\:from-blue-50:hover{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.lg\:hover\:from-blue-100:hover{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.lg\:hover\:from-blue-200:hover{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.lg\:hover\:from-blue-300:hover{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.lg\:hover\:from-blue-400:hover{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.lg\:hover\:from-blue-500:hover{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.lg\:hover\:from-blue-600:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:hover\:from-blue-700:hover{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.lg\:hover\:from-blue-800:hover{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.lg\:hover\:from-blue-900:hover{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.lg\:hover\:from-blue-DEFAULT:hover,.lg\:hover\:from-blue:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.lg\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.lg\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.lg\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.lg\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.lg\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.lg\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.lg\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.lg\:hover\:from-indigo-DEFAULT:hover,.lg\:hover\:from-indigo:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.lg\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.lg\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.lg\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.lg\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.lg\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.lg\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.lg\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.lg\:hover\:from-purple-DEFAULT:hover,.lg\:hover\:from-purple:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:hover\:from-pink:hover{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.lg\:hover\:from-inherit:hover{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:hover\:from-amber:hover{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.lg\:hover\:from-amber-active:hover{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.lg\:hover\:from-ardoise:hover{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.lg\:hover\:from-ardoise-active:hover{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.lg\:hover\:from-blue-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:hover\:from-lightBlue-active:hover,.lg\:hover\:from-lightBlue:hover{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.lg\:hover\:from-deepBlue:hover{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.lg\:hover\:from-deepBlue-active:hover{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.lg\:hover\:from-gold:hover{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.lg\:hover\:from-gold-active:hover{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.lg\:hover\:from-grenadine:hover{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.lg\:hover\:from-grenadine-active:hover{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.lg\:hover\:from-kiwi:hover{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.lg\:hover\:from-kiwi-active:hover{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.lg\:hover\:from-lilas:hover{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.lg\:hover\:from-lilas-active:hover{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.lg\:hover\:from-mahogany:hover{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.lg\:hover\:from-mahogany-active:hover{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.lg\:hover\:from-ocher:hover{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.lg\:hover\:from-ocher-active:hover{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.lg\:hover\:from-pine:hover{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.lg\:hover\:from-pine-active:hover{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.lg\:hover\:from-platinum-active:hover,.lg\:hover\:from-platinum:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.lg\:hover\:from-prune:hover{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.lg\:hover\:from-prune-active:hover{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.lg\:hover\:from-sand:hover{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.lg\:hover\:from-sand-active:hover{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.lg\:hover\:from-sandPearl:hover{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.lg\:hover\:from-sandPearl-active:hover{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.lg\:hover\:from-silver:hover{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.lg\:hover\:from-silver-active:hover{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.lg\:hover\:from-skyBlue:hover{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.lg\:hover\:from-skyBlue-active:hover{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.lg\:hover\:from-southSea:hover{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.lg\:hover\:from-southSea-active:hover{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.lg\:hover\:from-turquoise:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:hover\:from-turquoise-active:hover{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.lg\:hover\:from-waterGreen:hover{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.lg\:hover\:from-waterGreen-active:hover{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.lg\:hover\:from-deepRed:hover{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.lg\:hover\:from-deepRed-active:hover{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.lg\:hover\:from-emerald:hover{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.lg\:hover\:from-emerald-active:hover{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.lg\:hover\:from-greenLight:hover{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.lg\:hover\:from-orange-active:hover{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.lg\:hover\:from-red-active:hover{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.lg\:hover\:from-white-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:hover\:from-white-button-active:hover,.lg\:hover\:from-white-button:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:hover\:from-code:hover{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.lg\:hover\:from-code-active:hover{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.lg\:hover\:from-gray-lighter:hover{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.lg\:hover\:from-gray-lighter-active:hover{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.lg\:hover\:from-gray-light:hover{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.lg\:hover\:from-gray-medium:hover{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.lg\:hover\:from-gray-darker:hover{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.lg\:hover\:from-gray-darker-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:hover\:from-api-default:hover{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.lg\:hover\:from-gray-xxl:hover{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.lg\:hover\:from-line-even:hover{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.lg\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.lg\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.lg\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.lg\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.lg\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.lg\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.lg\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.lg\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.lg\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.lg\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.lg\:hover\:via-gray-DEFAULT:hover,.lg\:hover\:via-gray:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:hover\:via-red:hover{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.lg\:hover\:via-orange:hover{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.lg\:hover\:via-yellow:hover{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.lg\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.lg\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.lg\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.lg\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.lg\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.lg\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.lg\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.lg\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.lg\:hover\:via-green-DEFAULT:hover,.lg\:hover\:via-green:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.lg\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.lg\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.lg\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.lg\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.lg\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.lg\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.lg\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.lg\:hover\:via-teal-DEFAULT:hover,.lg\:hover\:via-teal:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:hover\:via-blue-50:hover{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.lg\:hover\:via-blue-100:hover{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.lg\:hover\:via-blue-200:hover{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.lg\:hover\:via-blue-300:hover{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.lg\:hover\:via-blue-400:hover{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.lg\:hover\:via-blue-500:hover{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.lg\:hover\:via-blue-600:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:hover\:via-blue-700:hover{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.lg\:hover\:via-blue-800:hover{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.lg\:hover\:via-blue-900:hover{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.lg\:hover\:via-blue-DEFAULT:hover,.lg\:hover\:via-blue:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.lg\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.lg\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.lg\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.lg\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.lg\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.lg\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.lg\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.lg\:hover\:via-indigo-DEFAULT:hover,.lg\:hover\:via-indigo:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.lg\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.lg\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.lg\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.lg\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.lg\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.lg\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.lg\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.lg\:hover\:via-purple-DEFAULT:hover,.lg\:hover\:via-purple:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:hover\:via-pink:hover{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.lg\:hover\:via-inherit:hover{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:hover\:via-amber:hover{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.lg\:hover\:via-amber-active:hover{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.lg\:hover\:via-ardoise:hover{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.lg\:hover\:via-ardoise-active:hover{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.lg\:hover\:via-blue-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:hover\:via-lightBlue-active:hover,.lg\:hover\:via-lightBlue:hover{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.lg\:hover\:via-deepBlue:hover{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.lg\:hover\:via-deepBlue-active:hover{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.lg\:hover\:via-gold:hover{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.lg\:hover\:via-gold-active:hover{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.lg\:hover\:via-grenadine:hover{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.lg\:hover\:via-grenadine-active:hover{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.lg\:hover\:via-kiwi:hover{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.lg\:hover\:via-kiwi-active:hover{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.lg\:hover\:via-lilas:hover{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.lg\:hover\:via-lilas-active:hover{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.lg\:hover\:via-mahogany:hover{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.lg\:hover\:via-mahogany-active:hover{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.lg\:hover\:via-ocher:hover{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.lg\:hover\:via-ocher-active:hover{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.lg\:hover\:via-pine:hover{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.lg\:hover\:via-pine-active:hover{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.lg\:hover\:via-platinum-active:hover,.lg\:hover\:via-platinum:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.lg\:hover\:via-prune:hover{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.lg\:hover\:via-prune-active:hover{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.lg\:hover\:via-sand:hover{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.lg\:hover\:via-sand-active:hover{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.lg\:hover\:via-sandPearl:hover{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.lg\:hover\:via-sandPearl-active:hover{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.lg\:hover\:via-silver:hover{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.lg\:hover\:via-silver-active:hover{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.lg\:hover\:via-skyBlue:hover{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.lg\:hover\:via-skyBlue-active:hover{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.lg\:hover\:via-southSea:hover{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.lg\:hover\:via-southSea-active:hover{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.lg\:hover\:via-turquoise:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:hover\:via-turquoise-active:hover{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.lg\:hover\:via-waterGreen:hover{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.lg\:hover\:via-waterGreen-active:hover{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.lg\:hover\:via-deepRed:hover{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.lg\:hover\:via-deepRed-active:hover{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.lg\:hover\:via-emerald:hover{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.lg\:hover\:via-emerald-active:hover{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.lg\:hover\:via-greenLight:hover{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.lg\:hover\:via-orange-active:hover{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.lg\:hover\:via-red-active:hover{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.lg\:hover\:via-white-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:hover\:via-white-button-active:hover,.lg\:hover\:via-white-button:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:hover\:via-code:hover{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.lg\:hover\:via-code-active:hover{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.lg\:hover\:via-gray-lighter:hover{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.lg\:hover\:via-gray-lighter-active:hover{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.lg\:hover\:via-gray-light:hover{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.lg\:hover\:via-gray-medium:hover{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.lg\:hover\:via-gray-darker:hover{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.lg\:hover\:via-gray-darker-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:hover\:via-api-default:hover{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.lg\:hover\:via-gray-xxl:hover{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.lg\:hover\:via-line-even:hover{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.lg\:hover\:to-transparent:hover{--gradient-to-color:transparent}.lg\:hover\:to-current:hover{--gradient-to-color:currentColor}.lg\:hover\:to-black:hover{--gradient-to-color:#000}.lg\:hover\:to-white:hover{--gradient-to-color:#fff}.lg\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.lg\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.lg\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.lg\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.lg\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.lg\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.lg\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.lg\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.lg\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.lg\:hover\:to-gray-DEFAULT:hover,.lg\:hover\:to-gray:hover{--gradient-to-color:#718096}.lg\:hover\:to-red:hover{--gradient-to-color:#d64343}.lg\:hover\:to-orange:hover{--gradient-to-color:#eb6437}.lg\:hover\:to-yellow:hover{--gradient-to-color:#f8da30}.lg\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.lg\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.lg\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.lg\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.lg\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.lg\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.lg\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.lg\:hover\:to-green-800:hover{--gradient-to-color:#276749}.lg\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.lg\:hover\:to-green-DEFAULT:hover,.lg\:hover\:to-green:hover{--gradient-to-color:#38a169}.lg\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.lg\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.lg\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.lg\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.lg\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.lg\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.lg\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.lg\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.lg\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.lg\:hover\:to-teal-DEFAULT:hover,.lg\:hover\:to-teal:hover{--gradient-to-color:#319795}.lg\:hover\:to-blue-50:hover{--gradient-to-color:#d1eaff}.lg\:hover\:to-blue-100:hover{--gradient-to-color:#a8d7ff}.lg\:hover\:to-blue-200:hover{--gradient-to-color:#80c4ff}.lg\:hover\:to-blue-300:hover{--gradient-to-color:#57b0ff}.lg\:hover\:to-blue-400:hover{--gradient-to-color:#2e9dff}.lg\:hover\:to-blue-500:hover{--gradient-to-color:#058aff}.lg\:hover\:to-blue-600:hover{--gradient-to-color:#0075db}.lg\:hover\:to-blue-700:hover{--gradient-to-color:#005fb3}.lg\:hover\:to-blue-800:hover{--gradient-to-color:#00498a}.lg\:hover\:to-blue-900:hover{--gradient-to-color:#003461}.lg\:hover\:to-blue-DEFAULT:hover,.lg\:hover\:to-blue:hover{--gradient-to-color:#0075db}.lg\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.lg\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.lg\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.lg\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.lg\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.lg\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.lg\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.lg\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.lg\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.lg\:hover\:to-indigo-DEFAULT:hover,.lg\:hover\:to-indigo:hover{--gradient-to-color:#5a67d8}.lg\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.lg\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.lg\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.lg\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.lg\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.lg\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.lg\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.lg\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.lg\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.lg\:hover\:to-purple-DEFAULT:hover,.lg\:hover\:to-purple:hover{--gradient-to-color:#805ad5}.lg\:hover\:to-pink:hover{--gradient-to-color:#d81b60}.lg\:hover\:to-inherit:hover{--gradient-to-color:inherit}.lg\:hover\:to-amber:hover{--gradient-to-color:#d78737}.lg\:hover\:to-amber-active:hover{--gradient-to-color:#e3872b}.lg\:hover\:to-ardoise:hover{--gradient-to-color:#596a82}.lg\:hover\:to-ardoise-active:hover{--gradient-to-color:#476794}.lg\:hover\:to-blue-active:hover{--gradient-to-color:#14a5c2}.lg\:hover\:to-lightBlue-active:hover,.lg\:hover\:to-lightBlue:hover{--gradient-to-color:rgba(0,85,138,0.1)}.lg\:hover\:to-deepBlue:hover{--gradient-to-color:#0e346c}.lg\:hover\:to-deepBlue-active:hover{--gradient-to-color:#0a3f8f}.lg\:hover\:to-gold:hover{--gradient-to-color:#bd9e56}.lg\:hover\:to-gold-active:hover{--gradient-to-color:#c9a34a}.lg\:hover\:to-grenadine:hover{--gradient-to-color:#c35078}.lg\:hover\:to-grenadine-active:hover{--gradient-to-color:#cf4475}.lg\:hover\:to-kiwi:hover{--gradient-to-color:#9a9f1e}.lg\:hover\:to-kiwi-active:hover{--gradient-to-color:#a3a815}.lg\:hover\:to-lilas:hover{--gradient-to-color:#7ea1d3}.lg\:hover\:to-lilas-active:hover{--gradient-to-color:#75a0db}.lg\:hover\:to-mahogany:hover{--gradient-to-color:#57142e}.lg\:hover\:to-mahogany-active:hover{--gradient-to-color:#610a2b}.lg\:hover\:to-ocher:hover{--gradient-to-color:#c29614}.lg\:hover\:to-ocher-active:hover{--gradient-to-color:#cd9c0a}.lg\:hover\:to-pine:hover{--gradient-to-color:#144d52}.lg\:hover\:to-pine-active:hover{--gradient-to-color:#0a555c}.lg\:hover\:to-platinum-active:hover,.lg\:hover\:to-platinum:hover{--gradient-to-color:#000}.lg\:hover\:to-prune:hover{--gradient-to-color:#661456}.lg\:hover\:to-prune-active:hover{--gradient-to-color:#72085d}.lg\:hover\:to-sand:hover{--gradient-to-color:#d7be88}.lg\:hover\:to-sand-active:hover{--gradient-to-color:#dfc181}.lg\:hover\:to-sandPearl:hover{--gradient-to-color:#f0e5d6}.lg\:hover\:to-sandPearl-active:hover{--gradient-to-color:#f2e6d4}.lg\:hover\:to-silver:hover{--gradient-to-color:#b1b2b4}.lg\:hover\:to-silver-active:hover{--gradient-to-color:#a9afbc}.lg\:hover\:to-skyBlue:hover{--gradient-to-color:#98d2d7}.lg\:hover\:to-skyBlue-active:hover{--gradient-to-color:#91d8de}.lg\:hover\:to-southSea:hover{--gradient-to-color:#9dc9cd}.lg\:hover\:to-southSea-active:hover{--gradient-to-color:#95ced5}.lg\:hover\:to-turquoise:hover{--gradient-to-color:#14a5c2}.lg\:hover\:to-turquoise-active:hover{--gradient-to-color:#0aaccd}.lg\:hover\:to-waterGreen:hover{--gradient-to-color:#007571}.lg\:hover\:to-waterGreen-active:hover{--gradient-to-color:#00a8a3}.lg\:hover\:to-deepRed:hover{--gradient-to-color:#c32222}.lg\:hover\:to-deepRed-active:hover{--gradient-to-color:#cf1717}.lg\:hover\:to-emerald:hover{--gradient-to-color:#14a33a}.lg\:hover\:to-emerald-active:hover{--gradient-to-color:#0bad36}.lg\:hover\:to-greenLight:hover{--gradient-to-color:#7cb342}.lg\:hover\:to-orange-active:hover{--gradient-to-color:#f65f2c}.lg\:hover\:to-red-active:hover{--gradient-to-color:#e13737}.lg\:hover\:to-white-active:hover{--gradient-to-color:#14a5c2}.lg\:hover\:to-white-button-active:hover,.lg\:hover\:to-white-button:hover{--gradient-to-color:#fff}.lg\:hover\:to-code:hover{--gradient-to-color:#3f3d57}.lg\:hover\:to-code-active:hover{--gradient-to-color:#37354b}.lg\:hover\:to-gray-lighter:hover{--gradient-to-color:#f7f7f7}.lg\:hover\:to-gray-lighter-active:hover{--gradient-to-color:#ebebeb}.lg\:hover\:to-gray-light:hover{--gradient-to-color:#d4d1d1}.lg\:hover\:to-gray-medium:hover{--gradient-to-color:#a8a0a0}.lg\:hover\:to-gray-darker:hover{--gradient-to-color:#504747}.lg\:hover\:to-gray-darker-active:hover{--gradient-to-color:#14a5c2}.lg\:hover\:to-api-default:hover{--gradient-to-color:#507192}.lg\:hover\:to-gray-xxl:hover{--gradient-to-color:#2c3e50}.lg\:hover\:to-line-even:hover{--gradient-to-color:#f3f6f7}.lg\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.lg\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.lg\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.lg\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.lg\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.lg\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.lg\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.lg\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.lg\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.lg\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.lg\:focus\:from-gray-DEFAULT:focus,.lg\:focus\:from-gray:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:focus\:from-red:focus{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.lg\:focus\:from-orange:focus{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.lg\:focus\:from-yellow:focus{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.lg\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.lg\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.lg\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.lg\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.lg\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.lg\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.lg\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.lg\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.lg\:focus\:from-green-DEFAULT:focus,.lg\:focus\:from-green:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.lg\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.lg\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.lg\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.lg\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.lg\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.lg\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.lg\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.lg\:focus\:from-teal-DEFAULT:focus,.lg\:focus\:from-teal:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:focus\:from-blue-50:focus{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.lg\:focus\:from-blue-100:focus{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.lg\:focus\:from-blue-200:focus{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.lg\:focus\:from-blue-300:focus{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.lg\:focus\:from-blue-400:focus{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.lg\:focus\:from-blue-500:focus{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.lg\:focus\:from-blue-600:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:focus\:from-blue-700:focus{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.lg\:focus\:from-blue-800:focus{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.lg\:focus\:from-blue-900:focus{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.lg\:focus\:from-blue-DEFAULT:focus,.lg\:focus\:from-blue:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.lg\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.lg\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.lg\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.lg\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.lg\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.lg\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.lg\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.lg\:focus\:from-indigo-DEFAULT:focus,.lg\:focus\:from-indigo:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.lg\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.lg\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.lg\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.lg\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.lg\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.lg\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.lg\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.lg\:focus\:from-purple-DEFAULT:focus,.lg\:focus\:from-purple:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:focus\:from-pink:focus{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.lg\:focus\:from-inherit:focus{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:focus\:from-amber:focus{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.lg\:focus\:from-amber-active:focus{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.lg\:focus\:from-ardoise:focus{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.lg\:focus\:from-ardoise-active:focus{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.lg\:focus\:from-blue-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:focus\:from-lightBlue-active:focus,.lg\:focus\:from-lightBlue:focus{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.lg\:focus\:from-deepBlue:focus{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.lg\:focus\:from-deepBlue-active:focus{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.lg\:focus\:from-gold:focus{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.lg\:focus\:from-gold-active:focus{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.lg\:focus\:from-grenadine:focus{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.lg\:focus\:from-grenadine-active:focus{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.lg\:focus\:from-kiwi:focus{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.lg\:focus\:from-kiwi-active:focus{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.lg\:focus\:from-lilas:focus{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.lg\:focus\:from-lilas-active:focus{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.lg\:focus\:from-mahogany:focus{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.lg\:focus\:from-mahogany-active:focus{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.lg\:focus\:from-ocher:focus{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.lg\:focus\:from-ocher-active:focus{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.lg\:focus\:from-pine:focus{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.lg\:focus\:from-pine-active:focus{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.lg\:focus\:from-platinum-active:focus,.lg\:focus\:from-platinum:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.lg\:focus\:from-prune:focus{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.lg\:focus\:from-prune-active:focus{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.lg\:focus\:from-sand:focus{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.lg\:focus\:from-sand-active:focus{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.lg\:focus\:from-sandPearl:focus{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.lg\:focus\:from-sandPearl-active:focus{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.lg\:focus\:from-silver:focus{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.lg\:focus\:from-silver-active:focus{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.lg\:focus\:from-skyBlue:focus{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.lg\:focus\:from-skyBlue-active:focus{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.lg\:focus\:from-southSea:focus{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.lg\:focus\:from-southSea-active:focus{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.lg\:focus\:from-turquoise:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:focus\:from-turquoise-active:focus{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.lg\:focus\:from-waterGreen:focus{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.lg\:focus\:from-waterGreen-active:focus{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.lg\:focus\:from-deepRed:focus{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.lg\:focus\:from-deepRed-active:focus{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.lg\:focus\:from-emerald:focus{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.lg\:focus\:from-emerald-active:focus{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.lg\:focus\:from-greenLight:focus{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.lg\:focus\:from-orange-active:focus{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.lg\:focus\:from-red-active:focus{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.lg\:focus\:from-white-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:focus\:from-white-button-active:focus,.lg\:focus\:from-white-button:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:focus\:from-code:focus{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.lg\:focus\:from-code-active:focus{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.lg\:focus\:from-gray-lighter:focus{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.lg\:focus\:from-gray-lighter-active:focus{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.lg\:focus\:from-gray-light:focus{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.lg\:focus\:from-gray-medium:focus{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.lg\:focus\:from-gray-darker:focus{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.lg\:focus\:from-gray-darker-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:focus\:from-api-default:focus{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.lg\:focus\:from-gray-xxl:focus{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.lg\:focus\:from-line-even:focus{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.lg\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.lg\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.lg\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.lg\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.lg\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.lg\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.lg\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.lg\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.lg\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.lg\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.lg\:focus\:via-gray-DEFAULT:focus,.lg\:focus\:via-gray:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.lg\:focus\:via-red:focus{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.lg\:focus\:via-orange:focus{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.lg\:focus\:via-yellow:focus{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.lg\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.lg\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.lg\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.lg\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.lg\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.lg\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.lg\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.lg\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.lg\:focus\:via-green-DEFAULT:focus,.lg\:focus\:via-green:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.lg\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.lg\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.lg\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.lg\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.lg\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.lg\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.lg\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.lg\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.lg\:focus\:via-teal-DEFAULT:focus,.lg\:focus\:via-teal:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.lg\:focus\:via-blue-50:focus{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.lg\:focus\:via-blue-100:focus{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.lg\:focus\:via-blue-200:focus{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.lg\:focus\:via-blue-300:focus{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.lg\:focus\:via-blue-400:focus{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.lg\:focus\:via-blue-500:focus{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.lg\:focus\:via-blue-600:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:focus\:via-blue-700:focus{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.lg\:focus\:via-blue-800:focus{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.lg\:focus\:via-blue-900:focus{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.lg\:focus\:via-blue-DEFAULT:focus,.lg\:focus\:via-blue:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.lg\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.lg\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.lg\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.lg\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.lg\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.lg\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.lg\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.lg\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.lg\:focus\:via-indigo-DEFAULT:focus,.lg\:focus\:via-indigo:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.lg\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.lg\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.lg\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.lg\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.lg\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.lg\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.lg\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.lg\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.lg\:focus\:via-purple-DEFAULT:focus,.lg\:focus\:via-purple:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.lg\:focus\:via-pink:focus{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.lg\:focus\:via-inherit:focus{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:focus\:via-amber:focus{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.lg\:focus\:via-amber-active:focus{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.lg\:focus\:via-ardoise:focus{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.lg\:focus\:via-ardoise-active:focus{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.lg\:focus\:via-blue-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:focus\:via-lightBlue-active:focus,.lg\:focus\:via-lightBlue:focus{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.lg\:focus\:via-deepBlue:focus{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.lg\:focus\:via-deepBlue-active:focus{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.lg\:focus\:via-gold:focus{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.lg\:focus\:via-gold-active:focus{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.lg\:focus\:via-grenadine:focus{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.lg\:focus\:via-grenadine-active:focus{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.lg\:focus\:via-kiwi:focus{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.lg\:focus\:via-kiwi-active:focus{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.lg\:focus\:via-lilas:focus{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.lg\:focus\:via-lilas-active:focus{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.lg\:focus\:via-mahogany:focus{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.lg\:focus\:via-mahogany-active:focus{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.lg\:focus\:via-ocher:focus{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.lg\:focus\:via-ocher-active:focus{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.lg\:focus\:via-pine:focus{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.lg\:focus\:via-pine-active:focus{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.lg\:focus\:via-platinum-active:focus,.lg\:focus\:via-platinum:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.lg\:focus\:via-prune:focus{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.lg\:focus\:via-prune-active:focus{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.lg\:focus\:via-sand:focus{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.lg\:focus\:via-sand-active:focus{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.lg\:focus\:via-sandPearl:focus{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.lg\:focus\:via-sandPearl-active:focus{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.lg\:focus\:via-silver:focus{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.lg\:focus\:via-silver-active:focus{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.lg\:focus\:via-skyBlue:focus{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.lg\:focus\:via-skyBlue-active:focus{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.lg\:focus\:via-southSea:focus{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.lg\:focus\:via-southSea-active:focus{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.lg\:focus\:via-turquoise:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:focus\:via-turquoise-active:focus{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.lg\:focus\:via-waterGreen:focus{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.lg\:focus\:via-waterGreen-active:focus{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.lg\:focus\:via-deepRed:focus{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.lg\:focus\:via-deepRed-active:focus{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.lg\:focus\:via-emerald:focus{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.lg\:focus\:via-emerald-active:focus{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.lg\:focus\:via-greenLight:focus{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.lg\:focus\:via-orange-active:focus{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.lg\:focus\:via-red-active:focus{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.lg\:focus\:via-white-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:focus\:via-white-button-active:focus,.lg\:focus\:via-white-button:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.lg\:focus\:via-code:focus{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.lg\:focus\:via-code-active:focus{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.lg\:focus\:via-gray-lighter:focus{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.lg\:focus\:via-gray-lighter-active:focus{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.lg\:focus\:via-gray-light:focus{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.lg\:focus\:via-gray-medium:focus{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.lg\:focus\:via-gray-darker:focus{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.lg\:focus\:via-gray-darker-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.lg\:focus\:via-api-default:focus{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.lg\:focus\:via-gray-xxl:focus{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.lg\:focus\:via-line-even:focus{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.lg\:focus\:to-transparent:focus{--gradient-to-color:transparent}.lg\:focus\:to-current:focus{--gradient-to-color:currentColor}.lg\:focus\:to-black:focus{--gradient-to-color:#000}.lg\:focus\:to-white:focus{--gradient-to-color:#fff}.lg\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.lg\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.lg\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.lg\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.lg\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.lg\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.lg\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.lg\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.lg\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.lg\:focus\:to-gray-DEFAULT:focus,.lg\:focus\:to-gray:focus{--gradient-to-color:#718096}.lg\:focus\:to-red:focus{--gradient-to-color:#d64343}.lg\:focus\:to-orange:focus{--gradient-to-color:#eb6437}.lg\:focus\:to-yellow:focus{--gradient-to-color:#f8da30}.lg\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.lg\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.lg\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.lg\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.lg\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.lg\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.lg\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.lg\:focus\:to-green-800:focus{--gradient-to-color:#276749}.lg\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.lg\:focus\:to-green-DEFAULT:focus,.lg\:focus\:to-green:focus{--gradient-to-color:#38a169}.lg\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.lg\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.lg\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.lg\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.lg\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.lg\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.lg\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.lg\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.lg\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.lg\:focus\:to-teal-DEFAULT:focus,.lg\:focus\:to-teal:focus{--gradient-to-color:#319795}.lg\:focus\:to-blue-50:focus{--gradient-to-color:#d1eaff}.lg\:focus\:to-blue-100:focus{--gradient-to-color:#a8d7ff}.lg\:focus\:to-blue-200:focus{--gradient-to-color:#80c4ff}.lg\:focus\:to-blue-300:focus{--gradient-to-color:#57b0ff}.lg\:focus\:to-blue-400:focus{--gradient-to-color:#2e9dff}.lg\:focus\:to-blue-500:focus{--gradient-to-color:#058aff}.lg\:focus\:to-blue-600:focus{--gradient-to-color:#0075db}.lg\:focus\:to-blue-700:focus{--gradient-to-color:#005fb3}.lg\:focus\:to-blue-800:focus{--gradient-to-color:#00498a}.lg\:focus\:to-blue-900:focus{--gradient-to-color:#003461}.lg\:focus\:to-blue-DEFAULT:focus,.lg\:focus\:to-blue:focus{--gradient-to-color:#0075db}.lg\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.lg\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.lg\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.lg\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.lg\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.lg\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.lg\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.lg\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.lg\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.lg\:focus\:to-indigo-DEFAULT:focus,.lg\:focus\:to-indigo:focus{--gradient-to-color:#5a67d8}.lg\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.lg\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.lg\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.lg\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.lg\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.lg\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.lg\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.lg\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.lg\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.lg\:focus\:to-purple-DEFAULT:focus,.lg\:focus\:to-purple:focus{--gradient-to-color:#805ad5}.lg\:focus\:to-pink:focus{--gradient-to-color:#d81b60}.lg\:focus\:to-inherit:focus{--gradient-to-color:inherit}.lg\:focus\:to-amber:focus{--gradient-to-color:#d78737}.lg\:focus\:to-amber-active:focus{--gradient-to-color:#e3872b}.lg\:focus\:to-ardoise:focus{--gradient-to-color:#596a82}.lg\:focus\:to-ardoise-active:focus{--gradient-to-color:#476794}.lg\:focus\:to-blue-active:focus{--gradient-to-color:#14a5c2}.lg\:focus\:to-lightBlue-active:focus,.lg\:focus\:to-lightBlue:focus{--gradient-to-color:rgba(0,85,138,0.1)}.lg\:focus\:to-deepBlue:focus{--gradient-to-color:#0e346c}.lg\:focus\:to-deepBlue-active:focus{--gradient-to-color:#0a3f8f}.lg\:focus\:to-gold:focus{--gradient-to-color:#bd9e56}.lg\:focus\:to-gold-active:focus{--gradient-to-color:#c9a34a}.lg\:focus\:to-grenadine:focus{--gradient-to-color:#c35078}.lg\:focus\:to-grenadine-active:focus{--gradient-to-color:#cf4475}.lg\:focus\:to-kiwi:focus{--gradient-to-color:#9a9f1e}.lg\:focus\:to-kiwi-active:focus{--gradient-to-color:#a3a815}.lg\:focus\:to-lilas:focus{--gradient-to-color:#7ea1d3}.lg\:focus\:to-lilas-active:focus{--gradient-to-color:#75a0db}.lg\:focus\:to-mahogany:focus{--gradient-to-color:#57142e}.lg\:focus\:to-mahogany-active:focus{--gradient-to-color:#610a2b}.lg\:focus\:to-ocher:focus{--gradient-to-color:#c29614}.lg\:focus\:to-ocher-active:focus{--gradient-to-color:#cd9c0a}.lg\:focus\:to-pine:focus{--gradient-to-color:#144d52}.lg\:focus\:to-pine-active:focus{--gradient-to-color:#0a555c}.lg\:focus\:to-platinum-active:focus,.lg\:focus\:to-platinum:focus{--gradient-to-color:#000}.lg\:focus\:to-prune:focus{--gradient-to-color:#661456}.lg\:focus\:to-prune-active:focus{--gradient-to-color:#72085d}.lg\:focus\:to-sand:focus{--gradient-to-color:#d7be88}.lg\:focus\:to-sand-active:focus{--gradient-to-color:#dfc181}.lg\:focus\:to-sandPearl:focus{--gradient-to-color:#f0e5d6}.lg\:focus\:to-sandPearl-active:focus{--gradient-to-color:#f2e6d4}.lg\:focus\:to-silver:focus{--gradient-to-color:#b1b2b4}.lg\:focus\:to-silver-active:focus{--gradient-to-color:#a9afbc}.lg\:focus\:to-skyBlue:focus{--gradient-to-color:#98d2d7}.lg\:focus\:to-skyBlue-active:focus{--gradient-to-color:#91d8de}.lg\:focus\:to-southSea:focus{--gradient-to-color:#9dc9cd}.lg\:focus\:to-southSea-active:focus{--gradient-to-color:#95ced5}.lg\:focus\:to-turquoise:focus{--gradient-to-color:#14a5c2}.lg\:focus\:to-turquoise-active:focus{--gradient-to-color:#0aaccd}.lg\:focus\:to-waterGreen:focus{--gradient-to-color:#007571}.lg\:focus\:to-waterGreen-active:focus{--gradient-to-color:#00a8a3}.lg\:focus\:to-deepRed:focus{--gradient-to-color:#c32222}.lg\:focus\:to-deepRed-active:focus{--gradient-to-color:#cf1717}.lg\:focus\:to-emerald:focus{--gradient-to-color:#14a33a}.lg\:focus\:to-emerald-active:focus{--gradient-to-color:#0bad36}.lg\:focus\:to-greenLight:focus{--gradient-to-color:#7cb342}.lg\:focus\:to-orange-active:focus{--gradient-to-color:#f65f2c}.lg\:focus\:to-red-active:focus{--gradient-to-color:#e13737}.lg\:focus\:to-white-active:focus{--gradient-to-color:#14a5c2}.lg\:focus\:to-white-button-active:focus,.lg\:focus\:to-white-button:focus{--gradient-to-color:#fff}.lg\:focus\:to-code:focus{--gradient-to-color:#3f3d57}.lg\:focus\:to-code-active:focus{--gradient-to-color:#37354b}.lg\:focus\:to-gray-lighter:focus{--gradient-to-color:#f7f7f7}.lg\:focus\:to-gray-lighter-active:focus{--gradient-to-color:#ebebeb}.lg\:focus\:to-gray-light:focus{--gradient-to-color:#d4d1d1}.lg\:focus\:to-gray-medium:focus{--gradient-to-color:#a8a0a0}.lg\:focus\:to-gray-darker:focus{--gradient-to-color:#504747}.lg\:focus\:to-gray-darker-active:focus{--gradient-to-color:#14a5c2}.lg\:focus\:to-api-default:focus{--gradient-to-color:#507192}.lg\:focus\:to-gray-xxl:focus{--gradient-to-color:#2c3e50}.lg\:focus\:to-line-even:focus{--gradient-to-color:#f3f6f7}.lg\:bg-opacity-0{--bg-opacity:0}.lg\:bg-opacity-25{--bg-opacity:0.25}.lg\:bg-opacity-50{--bg-opacity:0.5}.lg\:bg-opacity-75{--bg-opacity:0.75}.lg\:bg-opacity-100{--bg-opacity:1}.lg\:hover\:bg-opacity-0:hover{--bg-opacity:0}.lg\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.lg\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.lg\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.lg\:hover\:bg-opacity-100:hover{--bg-opacity:1}.lg\:focus\:bg-opacity-0:focus{--bg-opacity:0}.lg\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.lg\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.lg\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.lg\:focus\:bg-opacity-100:focus{--bg-opacity:1}.lg\:bg-bottom{background-position:bottom}.lg\:bg-center{background-position:50%}.lg\:bg-left{background-position:0}.lg\:bg-left-bottom{background-position:0 100%}.lg\:bg-left-top{background-position:0 0}.lg\:bg-right{background-position:100%}.lg\:bg-right-bottom{background-position:100% 100%}.lg\:bg-right-top{background-position:100% 0}.lg\:bg-top{background-position:top}.lg\:bg-repeat{background-repeat:repeat}.lg\:bg-no-repeat{background-repeat:no-repeat}.lg\:bg-repeat-x{background-repeat:repeat-x}.lg\:bg-repeat-y{background-repeat:repeat-y}.lg\:bg-repeat-round{background-repeat:round}.lg\:bg-repeat-space{background-repeat:space}.lg\:bg-auto{background-size:auto}.lg\:bg-cover{background-size:cover}.lg\:bg-contain{background-size:contain}.lg\:border-collapse{border-collapse:collapse}.lg\:border-separate{border-collapse:separate}.lg\:border-transparent{border-color:transparent}.lg\:border-current{border-color:currentColor}.lg\:border-black{border-color:#000}.lg\:border-white{border-color:#fff}.lg\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.lg\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.lg\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.lg\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.lg\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.lg\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.lg\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.lg\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.lg\:border-gray,.lg\:border-gray-DEFAULT{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:border-red{border-color:#d64343}.lg\:border-orange{border-color:#eb6437}.lg\:border-yellow{border-color:#f8da30}.lg\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.lg\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.lg\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.lg\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.lg\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.lg\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.lg\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.lg\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.lg\:border-green,.lg\:border-green-DEFAULT{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.lg\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.lg\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.lg\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.lg\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.lg\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.lg\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.lg\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.lg\:border-teal,.lg\:border-teal-DEFAULT{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:border-blue-50{border-color:#d1eaff}.lg\:border-blue-100{border-color:#a8d7ff}.lg\:border-blue-200{border-color:#80c4ff}.lg\:border-blue-300{border-color:#57b0ff}.lg\:border-blue-400{border-color:#2e9dff}.lg\:border-blue-500{border-color:#058aff}.lg\:border-blue-600{border-color:#0075db}.lg\:border-blue-700{border-color:#005fb3}.lg\:border-blue-800{border-color:#00498a}.lg\:border-blue-900{border-color:#003461}.lg\:border-blue,.lg\:border-blue-DEFAULT{border-color:#0075db}.lg\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.lg\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.lg\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.lg\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.lg\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.lg\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.lg\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.lg\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.lg\:border-indigo,.lg\:border-indigo-DEFAULT{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.lg\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.lg\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.lg\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.lg\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.lg\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.lg\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.lg\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.lg\:border-purple,.lg\:border-purple-DEFAULT{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:border-pink{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.lg\:border-inherit{border-color:inherit}.lg\:border-amber{border-color:#d78737}.lg\:border-amber-active{border-color:#e3872b}.lg\:border-ardoise{border-color:#596a82}.lg\:border-ardoise-active{border-color:#476794}.lg\:border-blue-active{border-color:#14a5c2}.lg\:border-lightBlue,.lg\:border-lightBlue-active{border-color:rgba(0,85,138,.1)}.lg\:border-deepBlue{border-color:#0e346c}.lg\:border-deepBlue-active{border-color:#0a3f8f}.lg\:border-gold{border-color:#bd9e56}.lg\:border-gold-active{border-color:#c9a34a}.lg\:border-grenadine{border-color:#c35078}.lg\:border-grenadine-active{border-color:#cf4475}.lg\:border-kiwi{border-color:#9a9f1e}.lg\:border-kiwi-active{border-color:#a3a815}.lg\:border-lilas{border-color:#7ea1d3}.lg\:border-lilas-active{border-color:#75a0db}.lg\:border-mahogany{border-color:#57142e}.lg\:border-mahogany-active{border-color:#610a2b}.lg\:border-ocher{border-color:#c29614}.lg\:border-ocher-active{border-color:#cd9c0a}.lg\:border-pine{border-color:#144d52}.lg\:border-pine-active{border-color:#0a555c}.lg\:border-platinum,.lg\:border-platinum-active{border-color:#000}.lg\:border-prune{border-color:#661456}.lg\:border-prune-active{border-color:#72085d}.lg\:border-sand{border-color:#d7be88}.lg\:border-sand-active{border-color:#dfc181}.lg\:border-sandPearl{border-color:#f0e5d6}.lg\:border-sandPearl-active{border-color:#f2e6d4}.lg\:border-silver{border-color:#b1b2b4}.lg\:border-silver-active{border-color:#a9afbc}.lg\:border-skyBlue{border-color:#98d2d7}.lg\:border-skyBlue-active{border-color:#91d8de}.lg\:border-southSea{border-color:#9dc9cd}.lg\:border-southSea-active{border-color:#95ced5}.lg\:border-turquoise{border-color:#14a5c2}.lg\:border-turquoise-active{border-color:#0aaccd}.lg\:border-waterGreen{border-color:#007571}.lg\:border-waterGreen-active{border-color:#00a8a3}.lg\:border-deepRed{border-color:#c32222}.lg\:border-deepRed-active{border-color:#cf1717}.lg\:border-emerald{border-color:#14a33a}.lg\:border-emerald-active{border-color:#0bad36}.lg\:border-greenLight{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.lg\:border-orange-active{border-color:#f65f2c}.lg\:border-red-active{border-color:#e13737}.lg\:border-white-active{border-color:#14a5c2}.lg\:border-white-button,.lg\:border-white-button-active{border-color:#fff}.lg\:border-code{border-color:#3f3d57}.lg\:border-code-active{border-color:#37354b}.lg\:border-gray-lighter{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.lg\:border-gray-lighter-active{border-color:#ebebeb}.lg\:border-gray-light{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.lg\:border-gray-medium{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.lg\:border-gray-darker{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.lg\:border-gray-darker-active{border-color:#14a5c2}.lg\:border-api-default{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.lg\:border-gray-xxl{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.lg\:border-line-even{border-color:#f3f6f7}.lg\:border-DEFAULT{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.lg\:hover\:border-transparent:hover{border-color:transparent}.lg\:hover\:border-current:hover{border-color:currentColor}.lg\:hover\:border-black:hover{border-color:#000}.lg\:hover\:border-white:hover{border-color:#fff}.lg\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.lg\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.lg\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.lg\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.lg\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.lg\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.lg\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.lg\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.lg\:hover\:border-gray-DEFAULT:hover,.lg\:hover\:border-gray:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:hover\:border-red:hover{border-color:#d64343}.lg\:hover\:border-orange:hover{border-color:#eb6437}.lg\:hover\:border-yellow:hover{border-color:#f8da30}.lg\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.lg\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.lg\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.lg\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.lg\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.lg\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.lg\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.lg\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.lg\:hover\:border-green-DEFAULT:hover,.lg\:hover\:border-green:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.lg\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.lg\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.lg\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.lg\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.lg\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.lg\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.lg\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.lg\:hover\:border-teal-DEFAULT:hover,.lg\:hover\:border-teal:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:hover\:border-blue-50:hover{border-color:#d1eaff}.lg\:hover\:border-blue-100:hover{border-color:#a8d7ff}.lg\:hover\:border-blue-200:hover{border-color:#80c4ff}.lg\:hover\:border-blue-300:hover{border-color:#57b0ff}.lg\:hover\:border-blue-400:hover{border-color:#2e9dff}.lg\:hover\:border-blue-500:hover{border-color:#058aff}.lg\:hover\:border-blue-600:hover{border-color:#0075db}.lg\:hover\:border-blue-700:hover{border-color:#005fb3}.lg\:hover\:border-blue-800:hover{border-color:#00498a}.lg\:hover\:border-blue-900:hover{border-color:#003461}.lg\:hover\:border-blue-DEFAULT:hover,.lg\:hover\:border-blue:hover{border-color:#0075db}.lg\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.lg\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.lg\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.lg\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.lg\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.lg\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.lg\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.lg\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.lg\:hover\:border-indigo-DEFAULT:hover,.lg\:hover\:border-indigo:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.lg\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.lg\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.lg\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.lg\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.lg\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.lg\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.lg\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.lg\:hover\:border-purple-DEFAULT:hover,.lg\:hover\:border-purple:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:hover\:border-pink:hover{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.lg\:hover\:border-inherit:hover{border-color:inherit}.lg\:hover\:border-amber:hover{border-color:#d78737}.lg\:hover\:border-amber-active:hover{border-color:#e3872b}.lg\:hover\:border-ardoise:hover{border-color:#596a82}.lg\:hover\:border-ardoise-active:hover{border-color:#476794}.lg\:hover\:border-blue-active:hover{border-color:#14a5c2}.lg\:hover\:border-lightBlue-active:hover,.lg\:hover\:border-lightBlue:hover{border-color:rgba(0,85,138,.1)}.lg\:hover\:border-deepBlue:hover{border-color:#0e346c}.lg\:hover\:border-deepBlue-active:hover{border-color:#0a3f8f}.lg\:hover\:border-gold:hover{border-color:#bd9e56}.lg\:hover\:border-gold-active:hover{border-color:#c9a34a}.lg\:hover\:border-grenadine:hover{border-color:#c35078}.lg\:hover\:border-grenadine-active:hover{border-color:#cf4475}.lg\:hover\:border-kiwi:hover{border-color:#9a9f1e}.lg\:hover\:border-kiwi-active:hover{border-color:#a3a815}.lg\:hover\:border-lilas:hover{border-color:#7ea1d3}.lg\:hover\:border-lilas-active:hover{border-color:#75a0db}.lg\:hover\:border-mahogany:hover{border-color:#57142e}.lg\:hover\:border-mahogany-active:hover{border-color:#610a2b}.lg\:hover\:border-ocher:hover{border-color:#c29614}.lg\:hover\:border-ocher-active:hover{border-color:#cd9c0a}.lg\:hover\:border-pine:hover{border-color:#144d52}.lg\:hover\:border-pine-active:hover{border-color:#0a555c}.lg\:hover\:border-platinum-active:hover,.lg\:hover\:border-platinum:hover{border-color:#000}.lg\:hover\:border-prune:hover{border-color:#661456}.lg\:hover\:border-prune-active:hover{border-color:#72085d}.lg\:hover\:border-sand:hover{border-color:#d7be88}.lg\:hover\:border-sand-active:hover{border-color:#dfc181}.lg\:hover\:border-sandPearl:hover{border-color:#f0e5d6}.lg\:hover\:border-sandPearl-active:hover{border-color:#f2e6d4}.lg\:hover\:border-silver:hover{border-color:#b1b2b4}.lg\:hover\:border-silver-active:hover{border-color:#a9afbc}.lg\:hover\:border-skyBlue:hover{border-color:#98d2d7}.lg\:hover\:border-skyBlue-active:hover{border-color:#91d8de}.lg\:hover\:border-southSea:hover{border-color:#9dc9cd}.lg\:hover\:border-southSea-active:hover{border-color:#95ced5}.lg\:hover\:border-turquoise:hover{border-color:#14a5c2}.lg\:hover\:border-turquoise-active:hover{border-color:#0aaccd}.lg\:hover\:border-waterGreen:hover{border-color:#007571}.lg\:hover\:border-waterGreen-active:hover{border-color:#00a8a3}.lg\:hover\:border-deepRed:hover{border-color:#c32222}.lg\:hover\:border-deepRed-active:hover{border-color:#cf1717}.lg\:hover\:border-emerald:hover{border-color:#14a33a}.lg\:hover\:border-emerald-active:hover{border-color:#0bad36}.lg\:hover\:border-greenLight:hover{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.lg\:hover\:border-orange-active:hover{border-color:#f65f2c}.lg\:hover\:border-red-active:hover{border-color:#e13737}.lg\:hover\:border-white-active:hover{border-color:#14a5c2}.lg\:hover\:border-white-button-active:hover,.lg\:hover\:border-white-button:hover{border-color:#fff}.lg\:hover\:border-code:hover{border-color:#3f3d57}.lg\:hover\:border-code-active:hover{border-color:#37354b}.lg\:hover\:border-gray-lighter:hover{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.lg\:hover\:border-gray-lighter-active:hover{border-color:#ebebeb}.lg\:hover\:border-gray-light:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.lg\:hover\:border-gray-medium:hover{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.lg\:hover\:border-gray-darker:hover{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.lg\:hover\:border-gray-darker-active:hover{border-color:#14a5c2}.lg\:hover\:border-api-default:hover{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.lg\:hover\:border-gray-xxl:hover{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.lg\:hover\:border-line-even:hover{border-color:#f3f6f7}.lg\:hover\:border-DEFAULT:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.lg\:focus\:border-transparent:focus{border-color:transparent}.lg\:focus\:border-current:focus{border-color:currentColor}.lg\:focus\:border-black:focus{border-color:#000}.lg\:focus\:border-white:focus{border-color:#fff}.lg\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.lg\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.lg\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.lg\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.lg\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.lg\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.lg\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.lg\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.lg\:focus\:border-gray-DEFAULT:focus,.lg\:focus\:border-gray:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:focus\:border-red:focus{border-color:#d64343}.lg\:focus\:border-orange:focus{border-color:#eb6437}.lg\:focus\:border-yellow:focus{border-color:#f8da30}.lg\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.lg\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.lg\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.lg\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.lg\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.lg\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.lg\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.lg\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.lg\:focus\:border-green-DEFAULT:focus,.lg\:focus\:border-green:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.lg\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.lg\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.lg\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.lg\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.lg\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.lg\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.lg\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.lg\:focus\:border-teal-DEFAULT:focus,.lg\:focus\:border-teal:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:focus\:border-blue-50:focus{border-color:#d1eaff}.lg\:focus\:border-blue-100:focus{border-color:#a8d7ff}.lg\:focus\:border-blue-200:focus{border-color:#80c4ff}.lg\:focus\:border-blue-300:focus{border-color:#57b0ff}.lg\:focus\:border-blue-400:focus{border-color:#2e9dff}.lg\:focus\:border-blue-500:focus{border-color:#058aff}.lg\:focus\:border-blue-600:focus{border-color:#0075db}.lg\:focus\:border-blue-700:focus{border-color:#005fb3}.lg\:focus\:border-blue-800:focus{border-color:#00498a}.lg\:focus\:border-blue-900:focus{border-color:#003461}.lg\:focus\:border-blue-DEFAULT:focus,.lg\:focus\:border-blue:focus{border-color:#0075db}.lg\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.lg\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.lg\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.lg\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.lg\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.lg\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.lg\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.lg\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.lg\:focus\:border-indigo-DEFAULT:focus,.lg\:focus\:border-indigo:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.lg\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.lg\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.lg\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.lg\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.lg\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.lg\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.lg\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.lg\:focus\:border-purple-DEFAULT:focus,.lg\:focus\:border-purple:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:focus\:border-pink:focus{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.lg\:focus\:border-inherit:focus{border-color:inherit}.lg\:focus\:border-amber:focus{border-color:#d78737}.lg\:focus\:border-amber-active:focus{border-color:#e3872b}.lg\:focus\:border-ardoise:focus{border-color:#596a82}.lg\:focus\:border-ardoise-active:focus{border-color:#476794}.lg\:focus\:border-blue-active:focus{border-color:#14a5c2}.lg\:focus\:border-lightBlue-active:focus,.lg\:focus\:border-lightBlue:focus{border-color:rgba(0,85,138,.1)}.lg\:focus\:border-deepBlue:focus{border-color:#0e346c}.lg\:focus\:border-deepBlue-active:focus{border-color:#0a3f8f}.lg\:focus\:border-gold:focus{border-color:#bd9e56}.lg\:focus\:border-gold-active:focus{border-color:#c9a34a}.lg\:focus\:border-grenadine:focus{border-color:#c35078}.lg\:focus\:border-grenadine-active:focus{border-color:#cf4475}.lg\:focus\:border-kiwi:focus{border-color:#9a9f1e}.lg\:focus\:border-kiwi-active:focus{border-color:#a3a815}.lg\:focus\:border-lilas:focus{border-color:#7ea1d3}.lg\:focus\:border-lilas-active:focus{border-color:#75a0db}.lg\:focus\:border-mahogany:focus{border-color:#57142e}.lg\:focus\:border-mahogany-active:focus{border-color:#610a2b}.lg\:focus\:border-ocher:focus{border-color:#c29614}.lg\:focus\:border-ocher-active:focus{border-color:#cd9c0a}.lg\:focus\:border-pine:focus{border-color:#144d52}.lg\:focus\:border-pine-active:focus{border-color:#0a555c}.lg\:focus\:border-platinum-active:focus,.lg\:focus\:border-platinum:focus{border-color:#000}.lg\:focus\:border-prune:focus{border-color:#661456}.lg\:focus\:border-prune-active:focus{border-color:#72085d}.lg\:focus\:border-sand:focus{border-color:#d7be88}.lg\:focus\:border-sand-active:focus{border-color:#dfc181}.lg\:focus\:border-sandPearl:focus{border-color:#f0e5d6}.lg\:focus\:border-sandPearl-active:focus{border-color:#f2e6d4}.lg\:focus\:border-silver:focus{border-color:#b1b2b4}.lg\:focus\:border-silver-active:focus{border-color:#a9afbc}.lg\:focus\:border-skyBlue:focus{border-color:#98d2d7}.lg\:focus\:border-skyBlue-active:focus{border-color:#91d8de}.lg\:focus\:border-southSea:focus{border-color:#9dc9cd}.lg\:focus\:border-southSea-active:focus{border-color:#95ced5}.lg\:focus\:border-turquoise:focus{border-color:#14a5c2}.lg\:focus\:border-turquoise-active:focus{border-color:#0aaccd}.lg\:focus\:border-waterGreen:focus{border-color:#007571}.lg\:focus\:border-waterGreen-active:focus{border-color:#00a8a3}.lg\:focus\:border-deepRed:focus{border-color:#c32222}.lg\:focus\:border-deepRed-active:focus{border-color:#cf1717}.lg\:focus\:border-emerald:focus{border-color:#14a33a}.lg\:focus\:border-emerald-active:focus{border-color:#0bad36}.lg\:focus\:border-greenLight:focus{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.lg\:focus\:border-orange-active:focus{border-color:#f65f2c}.lg\:focus\:border-red-active:focus{border-color:#e13737}.lg\:focus\:border-white-active:focus{border-color:#14a5c2}.lg\:focus\:border-white-button-active:focus,.lg\:focus\:border-white-button:focus{border-color:#fff}.lg\:focus\:border-code:focus{border-color:#3f3d57}.lg\:focus\:border-code-active:focus{border-color:#37354b}.lg\:focus\:border-gray-lighter:focus{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.lg\:focus\:border-gray-lighter-active:focus{border-color:#ebebeb}.lg\:focus\:border-gray-light:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.lg\:focus\:border-gray-medium:focus{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.lg\:focus\:border-gray-darker:focus{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.lg\:focus\:border-gray-darker-active:focus{border-color:#14a5c2}.lg\:focus\:border-api-default:focus{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.lg\:focus\:border-gray-xxl:focus{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.lg\:focus\:border-line-even:focus{border-color:#f3f6f7}.lg\:focus\:border-DEFAULT:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.lg\:border-opacity-0{--border-opacity:0}.lg\:border-opacity-25{--border-opacity:0.25}.lg\:border-opacity-50{--border-opacity:0.5}.lg\:border-opacity-75{--border-opacity:0.75}.lg\:border-opacity-100{--border-opacity:1}.lg\:hover\:border-opacity-0:hover{--border-opacity:0}.lg\:hover\:border-opacity-25:hover{--border-opacity:0.25}.lg\:hover\:border-opacity-50:hover{--border-opacity:0.5}.lg\:hover\:border-opacity-75:hover{--border-opacity:0.75}.lg\:hover\:border-opacity-100:hover{--border-opacity:1}.lg\:focus\:border-opacity-0:focus{--border-opacity:0}.lg\:focus\:border-opacity-25:focus{--border-opacity:0.25}.lg\:focus\:border-opacity-50:focus{--border-opacity:0.5}.lg\:focus\:border-opacity-75:focus{--border-opacity:0.75}.lg\:focus\:border-opacity-100:focus{--border-opacity:1}.lg\:rounded-none{border-radius:0}.lg\:rounded-sm{border-radius:.125rem}.lg\:rounded{border-radius:.25rem}.lg\:rounded-md{border-radius:.375rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:rounded-xl{border-radius:.75rem}.lg\:rounded-2xl{border-radius:1rem}.lg\:rounded-3xl{border-radius:1.5rem}.lg\:rounded-full{border-radius:100%}.lg\:rounded-xs{border-radius:.15rem}.lg\:rounded-small{border-radius:.3125rem}.lg\:rounded-DEFAULT{border-radius:.5rem}.lg\:rounded-medium{border-radius:1rem}.lg\:rounded-large{border-radius:2rem}.lg\:rounded-half{border-radius:50%}.lg\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.lg\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.lg\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.lg\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.lg\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.lg\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.lg\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.lg\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.lg\:rounded-t{border-top-left-radius:.25rem}.lg\:rounded-r,.lg\:rounded-t{border-top-right-radius:.25rem}.lg\:rounded-b,.lg\:rounded-r{border-bottom-right-radius:.25rem}.lg\:rounded-b,.lg\:rounded-l{border-bottom-left-radius:.25rem}.lg\:rounded-l{border-top-left-radius:.25rem}.lg\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.lg\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.lg\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.lg\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.lg\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.lg\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.lg\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.lg\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.lg\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.lg\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.lg\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.lg\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.lg\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.lg\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.lg\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.lg\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.lg\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.lg\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.lg\:rounded-t-full{border-top-left-radius:100%;border-top-right-radius:100%}.lg\:rounded-r-full{border-top-right-radius:100%;border-bottom-right-radius:100%}.lg\:rounded-b-full{border-bottom-right-radius:100%;border-bottom-left-radius:100%}.lg\:rounded-l-full{border-top-left-radius:100%;border-bottom-left-radius:100%}.lg\:rounded-t-xs{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.lg\:rounded-r-xs{border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.lg\:rounded-b-xs{border-bottom-right-radius:.15rem;border-bottom-left-radius:.15rem}.lg\:rounded-l-xs{border-top-left-radius:.15rem;border-bottom-left-radius:.15rem}.lg\:rounded-t-small{border-top-left-radius:.3125rem;border-top-right-radius:.3125rem}.lg\:rounded-r-small{border-top-right-radius:.3125rem;border-bottom-right-radius:.3125rem}.lg\:rounded-b-small{border-bottom-right-radius:.3125rem;border-bottom-left-radius:.3125rem}.lg\:rounded-l-small{border-top-left-radius:.3125rem;border-bottom-left-radius:.3125rem}.lg\:rounded-t-DEFAULT{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.lg\:rounded-r-DEFAULT{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.lg\:rounded-b-DEFAULT{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-l-DEFAULT{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-t-medium{border-top-left-radius:1rem;border-top-right-radius:1rem}.lg\:rounded-r-medium{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.lg\:rounded-b-medium{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.lg\:rounded-l-medium{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.lg\:rounded-t-large{border-top-left-radius:2rem;border-top-right-radius:2rem}.lg\:rounded-r-large{border-top-right-radius:2rem;border-bottom-right-radius:2rem}.lg\:rounded-b-large{border-bottom-right-radius:2rem;border-bottom-left-radius:2rem}.lg\:rounded-l-large{border-top-left-radius:2rem;border-bottom-left-radius:2rem}.lg\:rounded-t-half{border-top-left-radius:50%;border-top-right-radius:50%}.lg\:rounded-r-half{border-top-right-radius:50%;border-bottom-right-radius:50%}.lg\:rounded-b-half{border-bottom-right-radius:50%;border-bottom-left-radius:50%}.lg\:rounded-l-half{border-top-left-radius:50%;border-bottom-left-radius:50%}.lg\:rounded-tl-none{border-top-left-radius:0}.lg\:rounded-tr-none{border-top-right-radius:0}.lg\:rounded-br-none{border-bottom-right-radius:0}.lg\:rounded-bl-none{border-bottom-left-radius:0}.lg\:rounded-tl-sm{border-top-left-radius:.125rem}.lg\:rounded-tr-sm{border-top-right-radius:.125rem}.lg\:rounded-br-sm{border-bottom-right-radius:.125rem}.lg\:rounded-bl-sm{border-bottom-left-radius:.125rem}.lg\:rounded-tl{border-top-left-radius:.25rem}.lg\:rounded-tr{border-top-right-radius:.25rem}.lg\:rounded-br{border-bottom-right-radius:.25rem}.lg\:rounded-bl{border-bottom-left-radius:.25rem}.lg\:rounded-tl-md{border-top-left-radius:.375rem}.lg\:rounded-tr-md{border-top-right-radius:.375rem}.lg\:rounded-br-md{border-bottom-right-radius:.375rem}.lg\:rounded-bl-md{border-bottom-left-radius:.375rem}.lg\:rounded-tl-lg{border-top-left-radius:.5rem}.lg\:rounded-tr-lg{border-top-right-radius:.5rem}.lg\:rounded-br-lg{border-bottom-right-radius:.5rem}.lg\:rounded-bl-lg{border-bottom-left-radius:.5rem}.lg\:rounded-tl-xl{border-top-left-radius:.75rem}.lg\:rounded-tr-xl{border-top-right-radius:.75rem}.lg\:rounded-br-xl{border-bottom-right-radius:.75rem}.lg\:rounded-bl-xl{border-bottom-left-radius:.75rem}.lg\:rounded-tl-2xl{border-top-left-radius:1rem}.lg\:rounded-tr-2xl{border-top-right-radius:1rem}.lg\:rounded-br-2xl{border-bottom-right-radius:1rem}.lg\:rounded-bl-2xl{border-bottom-left-radius:1rem}.lg\:rounded-tl-3xl{border-top-left-radius:1.5rem}.lg\:rounded-tr-3xl{border-top-right-radius:1.5rem}.lg\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.lg\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.lg\:rounded-tl-full{border-top-left-radius:100%}.lg\:rounded-tr-full{border-top-right-radius:100%}.lg\:rounded-br-full{border-bottom-right-radius:100%}.lg\:rounded-bl-full{border-bottom-left-radius:100%}.lg\:rounded-tl-xs{border-top-left-radius:.15rem}.lg\:rounded-tr-xs{border-top-right-radius:.15rem}.lg\:rounded-br-xs{border-bottom-right-radius:.15rem}.lg\:rounded-bl-xs{border-bottom-left-radius:.15rem}.lg\:rounded-tl-small{border-top-left-radius:.3125rem}.lg\:rounded-tr-small{border-top-right-radius:.3125rem}.lg\:rounded-br-small{border-bottom-right-radius:.3125rem}.lg\:rounded-bl-small{border-bottom-left-radius:.3125rem}.lg\:rounded-tl-DEFAULT{border-top-left-radius:.5rem}.lg\:rounded-tr-DEFAULT{border-top-right-radius:.5rem}.lg\:rounded-br-DEFAULT{border-bottom-right-radius:.5rem}.lg\:rounded-bl-DEFAULT{border-bottom-left-radius:.5rem}.lg\:rounded-tl-medium{border-top-left-radius:1rem}.lg\:rounded-tr-medium{border-top-right-radius:1rem}.lg\:rounded-br-medium{border-bottom-right-radius:1rem}.lg\:rounded-bl-medium{border-bottom-left-radius:1rem}.lg\:rounded-tl-large{border-top-left-radius:2rem}.lg\:rounded-tr-large{border-top-right-radius:2rem}.lg\:rounded-br-large{border-bottom-right-radius:2rem}.lg\:rounded-bl-large{border-bottom-left-radius:2rem}.lg\:rounded-tl-half{border-top-left-radius:50%}.lg\:rounded-tr-half{border-top-right-radius:50%}.lg\:rounded-br-half{border-bottom-right-radius:50%}.lg\:rounded-bl-half{border-bottom-left-radius:50%}.lg\:border-solid{border-style:solid}.lg\:border-dashed{border-style:dashed}.lg\:border-dotted{border-style:dotted}.lg\:border-double{border-style:double}.lg\:border-none{border-style:none}.lg\:border-0{border-width:0}.lg\:border-1{border-width:1px}.lg\:border-2{border-width:2px}.lg\:border-4{border-width:4px}.lg\:border-5{border-width:5px}.lg\:border-8{border-width:8px}.lg\:border,.lg\:border-DEFAULT{border-width:1px}.lg\:border-t-0{border-top-width:0}.lg\:border-r-0{border-right-width:0}.lg\:border-b-0{border-bottom-width:0}.lg\:border-l-0{border-left-width:0}.lg\:border-t-1{border-top-width:1px}.lg\:border-r-1{border-right-width:1px}.lg\:border-b-1{border-bottom-width:1px}.lg\:border-l-1{border-left-width:1px}.lg\:border-t-2{border-top-width:2px}.lg\:border-r-2{border-right-width:2px}.lg\:border-b-2{border-bottom-width:2px}.lg\:border-l-2{border-left-width:2px}.lg\:border-t-4{border-top-width:4px}.lg\:border-r-4{border-right-width:4px}.lg\:border-b-4{border-bottom-width:4px}.lg\:border-l-4{border-left-width:4px}.lg\:border-t-5{border-top-width:5px}.lg\:border-r-5{border-right-width:5px}.lg\:border-b-5{border-bottom-width:5px}.lg\:border-l-5{border-left-width:5px}.lg\:border-t-8{border-top-width:8px}.lg\:border-r-8{border-right-width:8px}.lg\:border-b-8{border-bottom-width:8px}.lg\:border-l-8{border-left-width:8px}.lg\:border-t{border-top-width:1px}.lg\:border-r{border-right-width:1px}.lg\:border-b{border-bottom-width:1px}.lg\:border-l{border-left-width:1px}.lg\:border-t-DEFAULT{border-top-width:1px}.lg\:border-r-DEFAULT{border-right-width:1px}.lg\:border-b-DEFAULT{border-bottom-width:1px}.lg\:border-l-DEFAULT{border-left-width:1px}.lg\:box-border{box-sizing:border-box}.lg\:box-content{box-sizing:content-box}.lg\:cursor-auto{cursor:auto}.lg\:cursor-default{cursor:default}.lg\:cursor-pointer{cursor:pointer}.lg\:cursor-wait{cursor:wait}.lg\:cursor-text{cursor:text}.lg\:cursor-move{cursor:move}.lg\:cursor-not-allowed{cursor:not-allowed}.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:inline{display:inline}.lg\:flex{display:flex}.lg\:inline-flex{display:inline-flex}.lg\:table{display:table}.lg\:table-caption{display:table-caption}.lg\:table-cell{display:table-cell}.lg\:table-column{display:table-column}.lg\:table-column-group{display:table-column-group}.lg\:table-footer-group{display:table-footer-group}.lg\:table-header-group{display:table-header-group}.lg\:table-row-group{display:table-row-group}.lg\:table-row{display:table-row}.lg\:flow-root{display:flow-root}.lg\:grid{display:grid}.lg\:inline-grid{display:inline-grid}.lg\:contents{display:contents}.lg\:hidden{display:none}.lg\:flex-row{flex-direction:row}.lg\:flex-row-reverse{flex-direction:row-reverse}.lg\:flex-col{flex-direction:column}.lg\:flex-col-reverse{flex-direction:column-reverse}.lg\:flex-wrap{flex-wrap:wrap}.lg\:flex-wrap-reverse{flex-wrap:wrap-reverse}.lg\:flex-no-wrap{flex-wrap:nowrap}.lg\:place-items-auto{place-items:auto}.lg\:place-items-start{place-items:start}.lg\:place-items-end{place-items:end}.lg\:place-items-center{place-items:center}.lg\:place-items-stretch{place-items:stretch}.lg\:place-content-center{place-content:center}.lg\:place-content-start{place-content:start}.lg\:place-content-end{place-content:end}.lg\:place-content-between{place-content:space-between}.lg\:place-content-around{place-content:space-around}.lg\:place-content-evenly{place-content:space-evenly}.lg\:place-content-stretch{place-content:stretch}.lg\:place-self-auto{place-self:auto}.lg\:place-self-start{place-self:start}.lg\:place-self-end{place-self:end}.lg\:place-self-center{place-self:center}.lg\:place-self-stretch{place-self:stretch}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:items-baseline{align-items:baseline}.lg\:items-stretch{align-items:stretch}.lg\:content-center{align-content:center}.lg\:content-start{align-content:flex-start}.lg\:content-end{align-content:flex-end}.lg\:content-between{align-content:space-between}.lg\:content-around{align-content:space-around}.lg\:content-evenly{align-content:space-evenly}.lg\:self-auto{align-self:auto}.lg\:self-start{align-self:flex-start}.lg\:self-end{align-self:flex-end}.lg\:self-center{align-self:center}.lg\:self-stretch{align-self:stretch}.lg\:justify-items-auto{justify-items:auto}.lg\:justify-items-start{justify-items:start}.lg\:justify-items-end{justify-items:end}.lg\:justify-items-center{justify-items:center}.lg\:justify-items-stretch{justify-items:stretch}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-center{justify-content:center}.lg\:justify-between{justify-content:space-between}.lg\:justify-around{justify-content:space-around}.lg\:justify-evenly{justify-content:space-evenly}.lg\:justify-self-auto{justify-self:auto}.lg\:justify-self-start{justify-self:start}.lg\:justify-self-end{justify-self:end}.lg\:justify-self-center{justify-self:center}.lg\:justify-self-stretch{justify-self:stretch}.lg\:flex-1{flex:1 1 0%}.lg\:flex-2{flex:2 2 0%}.lg\:flex-3{flex:3 3 0%}.lg\:flex-auto{flex:1 1 auto}.lg\:flex-initial{flex:0 1 auto}.lg\:flex-none{flex:none}.lg\:flex-grow-0{flex-grow:0}.lg\:flex-grow{flex-grow:1}.lg\:flex-shrink-0{flex-shrink:0}.lg\:flex-shrink{flex-shrink:1}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-3{order:3}.lg\:order-4{order:4}.lg\:order-5{order:5}.lg\:order-6{order:6}.lg\:order-7{order:7}.lg\:order-8{order:8}.lg\:order-9{order:9}.lg\:order-10{order:10}.lg\:order-11{order:11}.lg\:order-12{order:12}.lg\:order-first{order:-9999}.lg\:order-last{order:9999}.lg\:order-none{order:0}.lg\:float-right{float:right}.lg\:float-left{float:left}.lg\:float-none{float:none}.lg\:clearfix:after{content:"";display:table;clear:both}.lg\:clear-left{clear:left}.lg\:clear-right{clear:right}.lg\:clear-both{clear:both}.lg\:clear-none{clear:none}.lg\:font-brand,.lg\:font-sans,.lg\:font-serif{font-family:Source Sans Pro,sans-serif}.lg\:font-inconsolata{font-family:Inconsolata}.lg\:font-source{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.lg\:font-hairline{font-weight:100}.lg\:font-thin{font-weight:200}.lg\:font-light{font-weight:300}.lg\:font-normal{font-weight:400}.lg\:font-medium{font-weight:500}.lg\:font-semibold{font-weight:600}.lg\:font-bold{font-weight:700}.lg\:font-extrabold{font-weight:800}.lg\:font-black{font-weight:900}.lg\:hover\:font-hairline:hover{font-weight:100}.lg\:hover\:font-thin:hover{font-weight:200}.lg\:hover\:font-light:hover{font-weight:300}.lg\:hover\:font-normal:hover{font-weight:400}.lg\:hover\:font-medium:hover{font-weight:500}.lg\:hover\:font-semibold:hover{font-weight:600}.lg\:hover\:font-bold:hover{font-weight:700}.lg\:hover\:font-extrabold:hover{font-weight:800}.lg\:hover\:font-black:hover{font-weight:900}.lg\:focus\:font-hairline:focus{font-weight:100}.lg\:focus\:font-thin:focus{font-weight:200}.lg\:focus\:font-light:focus{font-weight:300}.lg\:focus\:font-normal:focus{font-weight:400}.lg\:focus\:font-medium:focus{font-weight:500}.lg\:focus\:font-semibold:focus{font-weight:600}.lg\:focus\:font-bold:focus{font-weight:700}.lg\:focus\:font-extrabold:focus{font-weight:800}.lg\:focus\:font-black:focus{font-weight:900}.lg\:h-0{height:0}.lg\:h-1{height:.25rem}.lg\:h-2{height:.5rem}.lg\:h-3{height:.75rem}.lg\:h-4{height:1rem}.lg\:h-5{height:1.25rem}.lg\:h-6{height:1.5rem}.lg\:h-7{height:1.75rem}.lg\:h-8{height:2rem}.lg\:h-9{height:2.25rem}.lg\:h-10{height:2.5rem}.lg\:h-11{height:2.75rem}.lg\:h-12{height:3rem}.lg\:h-15{height:3.75rem}.lg\:h-16{height:4rem}.lg\:h-20{height:5rem}.lg\:h-22{height:5.5rem}.lg\:h-24{height:6rem}.lg\:h-25{height:6.25rem}.lg\:h-26{height:6.5rem}.lg\:h-28{height:8rem}.lg\:h-30{height:8.5rem}.lg\:h-32{height:9rem}.lg\:h-40{height:10rem}.lg\:h-48{height:12rem}.lg\:h-52{height:13rem}.lg\:h-56{height:14rem}.lg\:h-60{height:15rem}.lg\:h-64{height:16rem}.lg\:h-68{height:17rem}.lg\:h-auto{height:auto}.lg\:h-px{height:1px}.lg\:h-0\.5{height:.125rem}.lg\:h-1\.5{height:.375rem}.lg\:h-2\.5{height:.625rem}.lg\:h-7\.5{height:1.875rem}.lg\:h-full{height:100%}.lg\:h-screen{height:100vh}.lg\:text-micro{font-size:.5rem}.lg\:text-xxs{font-size:.625rem}.lg\:text-xs{font-size:.75rem}.lg\:text-sm{font-size:.875rem}.lg\:text-base{font-size:1rem}.lg\:text-md{font-size:1.125rem}.lg\:text-lg{font-size:1.25rem}.lg\:text-xl{font-size:1.5rem}.lg\:text-2xl{font-size:1.75rem}.lg\:text-3xl{font-size:2rem}.lg\:text-4xl{font-size:2.25rem}.lg\:text-5xl{font-size:2.75rem}.lg\:text-7xl{font-size:3.75rem}.lg\:text-11xl{font-size:4.75rem}.lg\:leading-3{line-height:.75rem}.lg\:leading-4{line-height:1rem}.lg\:leading-5{line-height:1.25rem}.lg\:leading-6{line-height:1.5rem}.lg\:leading-7{line-height:1.75rem}.lg\:leading-8{line-height:2rem}.lg\:leading-9{line-height:2.25rem}.lg\:leading-10{line-height:2.5rem}.lg\:leading-none{line-height:1}.lg\:leading-tight{line-height:1.25}.lg\:leading-snug{line-height:1.375}.lg\:leading-normal{line-height:1.5}.lg\:leading-relaxed{line-height:1.625}.lg\:leading-loose{line-height:2}.lg\:list-inside{list-style-position:inside}.lg\:list-outside{list-style-position:outside}.lg\:list-none{list-style-type:none}.lg\:list-disc{list-style-type:disc}.lg\:list-decimal{list-style-type:decimal}.lg\:m-0{margin:0}.lg\:m-1{margin:.25rem}.lg\:m-2{margin:.5rem}.lg\:m-3{margin:.75rem}.lg\:m-4{margin:1rem}.lg\:m-5{margin:1.25rem}.lg\:m-6{margin:1.5rem}.lg\:m-7{margin:1.75rem}.lg\:m-8{margin:2rem}.lg\:m-9{margin:2.25rem}.lg\:m-10{margin:2.5rem}.lg\:m-11{margin:2.75rem}.lg\:m-12{margin:3rem}.lg\:m-15{margin:3.75rem}.lg\:m-16{margin:4rem}.lg\:m-20{margin:5rem}.lg\:m-22{margin:5.5rem}.lg\:m-24{margin:6rem}.lg\:m-25{margin:6.25rem}.lg\:m-26{margin:6.5rem}.lg\:m-28{margin:8rem}.lg\:m-30{margin:8.5rem}.lg\:m-32{margin:9rem}.lg\:m-40{margin:10rem}.lg\:m-48{margin:12rem}.lg\:m-52{margin:13rem}.lg\:m-56{margin:14rem}.lg\:m-60{margin:15rem}.lg\:m-64{margin:16rem}.lg\:m-68{margin:17rem}.lg\:m-px{margin:1px}.lg\:-m-px{margin:-1px}.lg\:-m-2px{margin:-2px}.lg\:m-auto{margin:auto}.lg\:m-0\.5{margin:.125rem}.lg\:m-1\.5{margin:.375rem}.lg\:m-2\.5{margin:.625rem}.lg\:m-7\.5{margin:1.875rem}.lg\:-m-1{margin:-.25rem}.lg\:-m-2{margin:-.5rem}.lg\:-m-3{margin:-.75rem}.lg\:-m-4{margin:-1rem}.lg\:-m-5{margin:-1.25rem}.lg\:-m-6{margin:-1.5rem}.lg\:-m-7{margin:-1.75rem}.lg\:-m-8{margin:-2rem}.lg\:-m-9{margin:-2.25rem}.lg\:-m-10{margin:-2.5rem}.lg\:-m-11{margin:-2.75rem}.lg\:-m-12{margin:-3rem}.lg\:-m-15{margin:-3.75rem}.lg\:-m-16{margin:-4rem}.lg\:-m-20{margin:-5rem}.lg\:-m-22{margin:-5.5rem}.lg\:-m-24{margin:-6rem}.lg\:-m-25{margin:-6.25rem}.lg\:-m-26{margin:-6.5rem}.lg\:-m-28{margin:-8rem}.lg\:-m-30{margin:-8.5rem}.lg\:-m-32{margin:-9rem}.lg\:-m-40{margin:-10rem}.lg\:-m-48{margin:-12rem}.lg\:-m-52{margin:-13rem}.lg\:-m-56{margin:-14rem}.lg\:-m-60{margin:-15rem}.lg\:-m-64{margin:-16rem}.lg\:-m-68{margin:-17rem}.lg\:-m-0\.5{margin:-.125rem}.lg\:-m-1\.5{margin:-.375rem}.lg\:-m-2\.5{margin:-.625rem}.lg\:-m-7\.5{margin:-1.875rem}.lg\:my-0{margin-top:0;margin-bottom:0}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:my-1{margin-top:.25rem;margin-bottom:.25rem}.lg\:mx-1{margin-left:.25rem;margin-right:.25rem}.lg\:my-2{margin-top:.5rem;margin-bottom:.5rem}.lg\:mx-2{margin-left:.5rem;margin-right:.5rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mx-3{margin-left:.75rem;margin-right:.75rem}.lg\:my-4{margin-top:1rem;margin-bottom:1rem}.lg\:mx-4{margin-left:1rem;margin-right:1rem}.lg\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lg\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.lg\:my-7{margin-top:1.75rem;margin-bottom:1.75rem}.lg\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.lg\:my-8{margin-top:2rem;margin-bottom:2rem}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-9{margin-top:2.25rem;margin-bottom:2.25rem}.lg\:mx-9{margin-left:2.25rem;margin-right:2.25rem}.lg\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.lg\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.lg\:my-11{margin-top:2.75rem;margin-bottom:2.75rem}.lg\:mx-11{margin-left:2.75rem;margin-right:2.75rem}.lg\:my-12{margin-top:3rem;margin-bottom:3rem}.lg\:mx-12{margin-left:3rem;margin-right:3rem}.lg\:my-15{margin-top:3.75rem;margin-bottom:3.75rem}.lg\:mx-15{margin-left:3.75rem;margin-right:3.75rem}.lg\:my-16{margin-top:4rem;margin-bottom:4rem}.lg\:mx-16{margin-left:4rem;margin-right:4rem}.lg\:my-20{margin-top:5rem;margin-bottom:5rem}.lg\:mx-20{margin-left:5rem;margin-right:5rem}.lg\:my-22{margin-top:5.5rem;margin-bottom:5.5rem}.lg\:mx-22{margin-left:5.5rem;margin-right:5.5rem}.lg\:my-24{margin-top:6rem;margin-bottom:6rem}.lg\:mx-24{margin-left:6rem;margin-right:6rem}.lg\:my-25{margin-top:6.25rem;margin-bottom:6.25rem}.lg\:mx-25{margin-left:6.25rem;margin-right:6.25rem}.lg\:my-26{margin-top:6.5rem;margin-bottom:6.5rem}.lg\:mx-26{margin-left:6.5rem;margin-right:6.5rem}.lg\:my-28{margin-top:8rem;margin-bottom:8rem}.lg\:mx-28{margin-left:8rem;margin-right:8rem}.lg\:my-30{margin-top:8.5rem;margin-bottom:8.5rem}.lg\:mx-30{margin-left:8.5rem;margin-right:8.5rem}.lg\:my-32{margin-top:9rem;margin-bottom:9rem}.lg\:mx-32{margin-left:9rem;margin-right:9rem}.lg\:my-40{margin-top:10rem;margin-bottom:10rem}.lg\:mx-40{margin-left:10rem;margin-right:10rem}.lg\:my-48{margin-top:12rem;margin-bottom:12rem}.lg\:mx-48{margin-left:12rem;margin-right:12rem}.lg\:my-52{margin-top:13rem;margin-bottom:13rem}.lg\:mx-52{margin-left:13rem;margin-right:13rem}.lg\:my-56{margin-top:14rem;margin-bottom:14rem}.lg\:mx-56{margin-left:14rem;margin-right:14rem}.lg\:my-60{margin-top:15rem;margin-bottom:15rem}.lg\:mx-60{margin-left:15rem;margin-right:15rem}.lg\:my-64{margin-top:16rem;margin-bottom:16rem}.lg\:mx-64{margin-left:16rem;margin-right:16rem}.lg\:my-68{margin-top:17rem;margin-bottom:17rem}.lg\:mx-68{margin-left:17rem;margin-right:17rem}.lg\:my-px{margin-top:1px;margin-bottom:1px}.lg\:mx-px{margin-left:1px;margin-right:1px}.lg\:-my-px{margin-top:-1px;margin-bottom:-1px}.lg\:-mx-px{margin-left:-1px;margin-right:-1px}.lg\:-my-2px{margin-top:-2px;margin-bottom:-2px}.lg\:-mx-2px{margin-left:-2px;margin-right:-2px}.lg\:my-auto{margin-top:auto;margin-bottom:auto}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.lg\:mx-0\.5{margin-left:.125rem;margin-right:.125rem}.lg\:my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.lg\:mx-1\.5{margin-left:.375rem;margin-right:.375rem}.lg\:my-2\.5{margin-top:.625rem;margin-bottom:.625rem}.lg\:mx-2\.5{margin-left:.625rem;margin-right:.625rem}.lg\:my-7\.5{margin-top:1.875rem;margin-bottom:1.875rem}.lg\:mx-7\.5{margin-left:1.875rem;margin-right:1.875rem}.lg\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.lg\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lg\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.lg\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.lg\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.lg\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.lg\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.lg\:-mx-4{margin-left:-1rem;margin-right:-1rem}.lg\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.lg\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lg\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.lg\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.lg\:-my-7{margin-top:-1.75rem;margin-bottom:-1.75rem}.lg\:-mx-7{margin-left:-1.75rem;margin-right:-1.75rem}.lg\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:-my-9{margin-top:-2.25rem;margin-bottom:-2.25rem}.lg\:-mx-9{margin-left:-2.25rem;margin-right:-2.25rem}.lg\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.lg\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.lg\:-my-11{margin-top:-2.75rem;margin-bottom:-2.75rem}.lg\:-mx-11{margin-left:-2.75rem;margin-right:-2.75rem}.lg\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.lg\:-mx-12{margin-left:-3rem;margin-right:-3rem}.lg\:-my-15{margin-top:-3.75rem;margin-bottom:-3.75rem}.lg\:-mx-15{margin-left:-3.75rem;margin-right:-3.75rem}.lg\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.lg\:-mx-16{margin-left:-4rem;margin-right:-4rem}.lg\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.lg\:-mx-20{margin-left:-5rem;margin-right:-5rem}.lg\:-my-22{margin-top:-5.5rem;margin-bottom:-5.5rem}.lg\:-mx-22{margin-left:-5.5rem;margin-right:-5.5rem}.lg\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.lg\:-mx-24{margin-left:-6rem;margin-right:-6rem}.lg\:-my-25{margin-top:-6.25rem;margin-bottom:-6.25rem}.lg\:-mx-25{margin-left:-6.25rem;margin-right:-6.25rem}.lg\:-my-26{margin-top:-6.5rem;margin-bottom:-6.5rem}.lg\:-mx-26{margin-left:-6.5rem;margin-right:-6.5rem}.lg\:-my-28{margin-top:-8rem;margin-bottom:-8rem}.lg\:-mx-28{margin-left:-8rem;margin-right:-8rem}.lg\:-my-30{margin-top:-8.5rem;margin-bottom:-8.5rem}.lg\:-mx-30{margin-left:-8.5rem;margin-right:-8.5rem}.lg\:-my-32{margin-top:-9rem;margin-bottom:-9rem}.lg\:-mx-32{margin-left:-9rem;margin-right:-9rem}.lg\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.lg\:-mx-40{margin-left:-10rem;margin-right:-10rem}.lg\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.lg\:-mx-48{margin-left:-12rem;margin-right:-12rem}.lg\:-my-52{margin-top:-13rem;margin-bottom:-13rem}.lg\:-mx-52{margin-left:-13rem;margin-right:-13rem}.lg\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.lg\:-mx-56{margin-left:-14rem;margin-right:-14rem}.lg\:-my-60{margin-top:-15rem;margin-bottom:-15rem}.lg\:-mx-60{margin-left:-15rem;margin-right:-15rem}.lg\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.lg\:-mx-64{margin-left:-16rem;margin-right:-16rem}.lg\:-my-68{margin-top:-17rem;margin-bottom:-17rem}.lg\:-mx-68{margin-left:-17rem;margin-right:-17rem}.lg\:-my-0\.5{margin-top:-.125rem;margin-bottom:-.125rem}.lg\:-mx-0\.5{margin-left:-.125rem;margin-right:-.125rem}.lg\:-my-1\.5{margin-top:-.375rem;margin-bottom:-.375rem}.lg\:-mx-1\.5{margin-left:-.375rem;margin-right:-.375rem}.lg\:-my-2\.5{margin-top:-.625rem;margin-bottom:-.625rem}.lg\:-mx-2\.5{margin-left:-.625rem;margin-right:-.625rem}.lg\:-my-7\.5{margin-top:-1.875rem;margin-bottom:-1.875rem}.lg\:-mx-7\.5{margin-left:-1.875rem;margin-right:-1.875rem}.lg\:mt-0{margin-top:0}.lg\:mr-0{margin-right:0}.lg\:mb-0{margin-bottom:0}.lg\:ml-0{margin-left:0}.lg\:mt-1{margin-top:.25rem}.lg\:mr-1{margin-right:.25rem}.lg\:mb-1{margin-bottom:.25rem}.lg\:ml-1{margin-left:.25rem}.lg\:mt-2{margin-top:.5rem}.lg\:mr-2{margin-right:.5rem}.lg\:mb-2{margin-bottom:.5rem}.lg\:ml-2{margin-left:.5rem}.lg\:mt-3{margin-top:.75rem}.lg\:mr-3{margin-right:.75rem}.lg\:mb-3{margin-bottom:.75rem}.lg\:ml-3{margin-left:.75rem}.lg\:mt-4{margin-top:1rem}.lg\:mr-4{margin-right:1rem}.lg\:mb-4{margin-bottom:1rem}.lg\:ml-4{margin-left:1rem}.lg\:mt-5{margin-top:1.25rem}.lg\:mr-5{margin-right:1.25rem}.lg\:mb-5{margin-bottom:1.25rem}.lg\:ml-5{margin-left:1.25rem}.lg\:mt-6{margin-top:1.5rem}.lg\:mr-6{margin-right:1.5rem}.lg\:mb-6{margin-bottom:1.5rem}.lg\:ml-6{margin-left:1.5rem}.lg\:mt-7{margin-top:1.75rem}.lg\:mr-7{margin-right:1.75rem}.lg\:mb-7{margin-bottom:1.75rem}.lg\:ml-7{margin-left:1.75rem}.lg\:mt-8{margin-top:2rem}.lg\:mr-8{margin-right:2rem}.lg\:mb-8{margin-bottom:2rem}.lg\:ml-8{margin-left:2rem}.lg\:mt-9{margin-top:2.25rem}.lg\:mr-9{margin-right:2.25rem}.lg\:mb-9{margin-bottom:2.25rem}.lg\:ml-9{margin-left:2.25rem}.lg\:mt-10{margin-top:2.5rem}.lg\:mr-10{margin-right:2.5rem}.lg\:mb-10{margin-bottom:2.5rem}.lg\:ml-10{margin-left:2.5rem}.lg\:mt-11{margin-top:2.75rem}.lg\:mr-11{margin-right:2.75rem}.lg\:mb-11{margin-bottom:2.75rem}.lg\:ml-11{margin-left:2.75rem}.lg\:mt-12{margin-top:3rem}.lg\:mr-12{margin-right:3rem}.lg\:mb-12{margin-bottom:3rem}.lg\:ml-12{margin-left:3rem}.lg\:mt-15{margin-top:3.75rem}.lg\:mr-15{margin-right:3.75rem}.lg\:mb-15{margin-bottom:3.75rem}.lg\:ml-15{margin-left:3.75rem}.lg\:mt-16{margin-top:4rem}.lg\:mr-16{margin-right:4rem}.lg\:mb-16{margin-bottom:4rem}.lg\:ml-16{margin-left:4rem}.lg\:mt-20{margin-top:5rem}.lg\:mr-20{margin-right:5rem}.lg\:mb-20{margin-bottom:5rem}.lg\:ml-20{margin-left:5rem}.lg\:mt-22{margin-top:5.5rem}.lg\:mr-22{margin-right:5.5rem}.lg\:mb-22{margin-bottom:5.5rem}.lg\:ml-22{margin-left:5.5rem}.lg\:mt-24{margin-top:6rem}.lg\:mr-24{margin-right:6rem}.lg\:mb-24{margin-bottom:6rem}.lg\:ml-24{margin-left:6rem}.lg\:mt-25{margin-top:6.25rem}.lg\:mr-25{margin-right:6.25rem}.lg\:mb-25{margin-bottom:6.25rem}.lg\:ml-25{margin-left:6.25rem}.lg\:mt-26{margin-top:6.5rem}.lg\:mr-26{margin-right:6.5rem}.lg\:mb-26{margin-bottom:6.5rem}.lg\:ml-26{margin-left:6.5rem}.lg\:mt-28{margin-top:8rem}.lg\:mr-28{margin-right:8rem}.lg\:mb-28{margin-bottom:8rem}.lg\:ml-28{margin-left:8rem}.lg\:mt-30{margin-top:8.5rem}.lg\:mr-30{margin-right:8.5rem}.lg\:mb-30{margin-bottom:8.5rem}.lg\:ml-30{margin-left:8.5rem}.lg\:mt-32{margin-top:9rem}.lg\:mr-32{margin-right:9rem}.lg\:mb-32{margin-bottom:9rem}.lg\:ml-32{margin-left:9rem}.lg\:mt-40{margin-top:10rem}.lg\:mr-40{margin-right:10rem}.lg\:mb-40{margin-bottom:10rem}.lg\:ml-40{margin-left:10rem}.lg\:mt-48{margin-top:12rem}.lg\:mr-48{margin-right:12rem}.lg\:mb-48{margin-bottom:12rem}.lg\:ml-48{margin-left:12rem}.lg\:mt-52{margin-top:13rem}.lg\:mr-52{margin-right:13rem}.lg\:mb-52{margin-bottom:13rem}.lg\:ml-52{margin-left:13rem}.lg\:mt-56{margin-top:14rem}.lg\:mr-56{margin-right:14rem}.lg\:mb-56{margin-bottom:14rem}.lg\:ml-56{margin-left:14rem}.lg\:mt-60{margin-top:15rem}.lg\:mr-60{margin-right:15rem}.lg\:mb-60{margin-bottom:15rem}.lg\:ml-60{margin-left:15rem}.lg\:mt-64{margin-top:16rem}.lg\:mr-64{margin-right:16rem}.lg\:mb-64{margin-bottom:16rem}.lg\:ml-64{margin-left:16rem}.lg\:mt-68{margin-top:17rem}.lg\:mr-68{margin-right:17rem}.lg\:mb-68{margin-bottom:17rem}.lg\:ml-68{margin-left:17rem}.lg\:mt-px{margin-top:1px}.lg\:mr-px{margin-right:1px}.lg\:mb-px{margin-bottom:1px}.lg\:ml-px{margin-left:1px}.lg\:-mt-px{margin-top:-1px}.lg\:-mr-px{margin-right:-1px}.lg\:-mb-px{margin-bottom:-1px}.lg\:-ml-px{margin-left:-1px}.lg\:-mt-2px{margin-top:-2px}.lg\:-mr-2px{margin-right:-2px}.lg\:-mb-2px{margin-bottom:-2px}.lg\:-ml-2px{margin-left:-2px}.lg\:mt-auto{margin-top:auto}.lg\:mr-auto{margin-right:auto}.lg\:mb-auto{margin-bottom:auto}.lg\:ml-auto{margin-left:auto}.lg\:mt-0\.5{margin-top:.125rem}.lg\:mr-0\.5{margin-right:.125rem}.lg\:mb-0\.5{margin-bottom:.125rem}.lg\:ml-0\.5{margin-left:.125rem}.lg\:mt-1\.5{margin-top:.375rem}.lg\:mr-1\.5{margin-right:.375rem}.lg\:mb-1\.5{margin-bottom:.375rem}.lg\:ml-1\.5{margin-left:.375rem}.lg\:mt-2\.5{margin-top:.625rem}.lg\:mr-2\.5{margin-right:.625rem}.lg\:mb-2\.5{margin-bottom:.625rem}.lg\:ml-2\.5{margin-left:.625rem}.lg\:mt-7\.5{margin-top:1.875rem}.lg\:mr-7\.5{margin-right:1.875rem}.lg\:mb-7\.5{margin-bottom:1.875rem}.lg\:ml-7\.5{margin-left:1.875rem}.lg\:-mt-1{margin-top:-.25rem}.lg\:-mr-1{margin-right:-.25rem}.lg\:-mb-1{margin-bottom:-.25rem}.lg\:-ml-1{margin-left:-.25rem}.lg\:-mt-2{margin-top:-.5rem}.lg\:-mr-2{margin-right:-.5rem}.lg\:-mb-2{margin-bottom:-.5rem}.lg\:-ml-2{margin-left:-.5rem}.lg\:-mt-3{margin-top:-.75rem}.lg\:-mr-3{margin-right:-.75rem}.lg\:-mb-3{margin-bottom:-.75rem}.lg\:-ml-3{margin-left:-.75rem}.lg\:-mt-4{margin-top:-1rem}.lg\:-mr-4{margin-right:-1rem}.lg\:-mb-4{margin-bottom:-1rem}.lg\:-ml-4{margin-left:-1rem}.lg\:-mt-5{margin-top:-1.25rem}.lg\:-mr-5{margin-right:-1.25rem}.lg\:-mb-5{margin-bottom:-1.25rem}.lg\:-ml-5{margin-left:-1.25rem}.lg\:-mt-6{margin-top:-1.5rem}.lg\:-mr-6{margin-right:-1.5rem}.lg\:-mb-6{margin-bottom:-1.5rem}.lg\:-ml-6{margin-left:-1.5rem}.lg\:-mt-7{margin-top:-1.75rem}.lg\:-mr-7{margin-right:-1.75rem}.lg\:-mb-7{margin-bottom:-1.75rem}.lg\:-ml-7{margin-left:-1.75rem}.lg\:-mt-8{margin-top:-2rem}.lg\:-mr-8{margin-right:-2rem}.lg\:-mb-8{margin-bottom:-2rem}.lg\:-ml-8{margin-left:-2rem}.lg\:-mt-9{margin-top:-2.25rem}.lg\:-mr-9{margin-right:-2.25rem}.lg\:-mb-9{margin-bottom:-2.25rem}.lg\:-ml-9{margin-left:-2.25rem}.lg\:-mt-10{margin-top:-2.5rem}.lg\:-mr-10{margin-right:-2.5rem}.lg\:-mb-10{margin-bottom:-2.5rem}.lg\:-ml-10{margin-left:-2.5rem}.lg\:-mt-11{margin-top:-2.75rem}.lg\:-mr-11{margin-right:-2.75rem}.lg\:-mb-11{margin-bottom:-2.75rem}.lg\:-ml-11{margin-left:-2.75rem}.lg\:-mt-12{margin-top:-3rem}.lg\:-mr-12{margin-right:-3rem}.lg\:-mb-12{margin-bottom:-3rem}.lg\:-ml-12{margin-left:-3rem}.lg\:-mt-15{margin-top:-3.75rem}.lg\:-mr-15{margin-right:-3.75rem}.lg\:-mb-15{margin-bottom:-3.75rem}.lg\:-ml-15{margin-left:-3.75rem}.lg\:-mt-16{margin-top:-4rem}.lg\:-mr-16{margin-right:-4rem}.lg\:-mb-16{margin-bottom:-4rem}.lg\:-ml-16{margin-left:-4rem}.lg\:-mt-20{margin-top:-5rem}.lg\:-mr-20{margin-right:-5rem}.lg\:-mb-20{margin-bottom:-5rem}.lg\:-ml-20{margin-left:-5rem}.lg\:-mt-22{margin-top:-5.5rem}.lg\:-mr-22{margin-right:-5.5rem}.lg\:-mb-22{margin-bottom:-5.5rem}.lg\:-ml-22{margin-left:-5.5rem}.lg\:-mt-24{margin-top:-6rem}.lg\:-mr-24{margin-right:-6rem}.lg\:-mb-24{margin-bottom:-6rem}.lg\:-ml-24{margin-left:-6rem}.lg\:-mt-25{margin-top:-6.25rem}.lg\:-mr-25{margin-right:-6.25rem}.lg\:-mb-25{margin-bottom:-6.25rem}.lg\:-ml-25{margin-left:-6.25rem}.lg\:-mt-26{margin-top:-6.5rem}.lg\:-mr-26{margin-right:-6.5rem}.lg\:-mb-26{margin-bottom:-6.5rem}.lg\:-ml-26{margin-left:-6.5rem}.lg\:-mt-28{margin-top:-8rem}.lg\:-mr-28{margin-right:-8rem}.lg\:-mb-28{margin-bottom:-8rem}.lg\:-ml-28{margin-left:-8rem}.lg\:-mt-30{margin-top:-8.5rem}.lg\:-mr-30{margin-right:-8.5rem}.lg\:-mb-30{margin-bottom:-8.5rem}.lg\:-ml-30{margin-left:-8.5rem}.lg\:-mt-32{margin-top:-9rem}.lg\:-mr-32{margin-right:-9rem}.lg\:-mb-32{margin-bottom:-9rem}.lg\:-ml-32{margin-left:-9rem}.lg\:-mt-40{margin-top:-10rem}.lg\:-mr-40{margin-right:-10rem}.lg\:-mb-40{margin-bottom:-10rem}.lg\:-ml-40{margin-left:-10rem}.lg\:-mt-48{margin-top:-12rem}.lg\:-mr-48{margin-right:-12rem}.lg\:-mb-48{margin-bottom:-12rem}.lg\:-ml-48{margin-left:-12rem}.lg\:-mt-52{margin-top:-13rem}.lg\:-mr-52{margin-right:-13rem}.lg\:-mb-52{margin-bottom:-13rem}.lg\:-ml-52{margin-left:-13rem}.lg\:-mt-56{margin-top:-14rem}.lg\:-mr-56{margin-right:-14rem}.lg\:-mb-56{margin-bottom:-14rem}.lg\:-ml-56{margin-left:-14rem}.lg\:-mt-60{margin-top:-15rem}.lg\:-mr-60{margin-right:-15rem}.lg\:-mb-60{margin-bottom:-15rem}.lg\:-ml-60{margin-left:-15rem}.lg\:-mt-64{margin-top:-16rem}.lg\:-mr-64{margin-right:-16rem}.lg\:-mb-64{margin-bottom:-16rem}.lg\:-ml-64{margin-left:-16rem}.lg\:-mt-68{margin-top:-17rem}.lg\:-mr-68{margin-right:-17rem}.lg\:-mb-68{margin-bottom:-17rem}.lg\:-ml-68{margin-left:-17rem}.lg\:-mt-0\.5{margin-top:-.125rem}.lg\:-mr-0\.5{margin-right:-.125rem}.lg\:-mb-0\.5{margin-bottom:-.125rem}.lg\:-ml-0\.5{margin-left:-.125rem}.lg\:-mt-1\.5{margin-top:-.375rem}.lg\:-mr-1\.5{margin-right:-.375rem}.lg\:-mb-1\.5{margin-bottom:-.375rem}.lg\:-ml-1\.5{margin-left:-.375rem}.lg\:-mt-2\.5{margin-top:-.625rem}.lg\:-mr-2\.5{margin-right:-.625rem}.lg\:-mb-2\.5{margin-bottom:-.625rem}.lg\:-ml-2\.5{margin-left:-.625rem}.lg\:-mt-7\.5{margin-top:-1.875rem}.lg\:-mr-7\.5{margin-right:-1.875rem}.lg\:-mb-7\.5{margin-bottom:-1.875rem}.lg\:-ml-7\.5{margin-left:-1.875rem}.lg\:max-h-0{max-height:0}.lg\:max-h-1{max-height:.25rem}.lg\:max-h-2{max-height:.5rem}.lg\:max-h-3{max-height:.75rem}.lg\:max-h-4{max-height:1rem}.lg\:max-h-5{max-height:1.25rem}.lg\:max-h-6{max-height:1.5rem}.lg\:max-h-7{max-height:1.75rem}.lg\:max-h-8{max-height:2rem}.lg\:max-h-9{max-height:2.25rem}.lg\:max-h-10{max-height:2.5rem}.lg\:max-h-11{max-height:2.75rem}.lg\:max-h-12{max-height:3rem}.lg\:max-h-15{max-height:3.75rem}.lg\:max-h-16{max-height:4rem}.lg\:max-h-20{max-height:5rem}.lg\:max-h-22{max-height:5.5rem}.lg\:max-h-24{max-height:6rem}.lg\:max-h-25{max-height:6.25rem}.lg\:max-h-26{max-height:6.5rem}.lg\:max-h-28{max-height:8rem}.lg\:max-h-30{max-height:8.5rem}.lg\:max-h-32{max-height:9rem}.lg\:max-h-40{max-height:10rem}.lg\:max-h-48{max-height:12rem}.lg\:max-h-52{max-height:13rem}.lg\:max-h-56{max-height:14rem}.lg\:max-h-60{max-height:15rem}.lg\:max-h-64{max-height:16rem}.lg\:max-h-68{max-height:17rem}.lg\:max-h-px{max-height:1px}.lg\:max-h-0\.5{max-height:.125rem}.lg\:max-h-1\.5{max-height:.375rem}.lg\:max-h-2\.5{max-height:.625rem}.lg\:max-h-7\.5{max-height:1.875rem}.lg\:max-h-full{max-height:100%}.lg\:max-h-screen{max-height:100vh}.lg\:max-w-none{max-width:none}.lg\:max-w-xs{max-width:20rem}.lg\:max-w-sm{max-width:30rem}.lg\:max-w-md{max-width:40rem}.lg\:max-w-lg{max-width:50rem}.lg\:max-w-xl{max-width:60rem}.lg\:max-w-2xl{max-width:70rem}.lg\:max-w-3xl{max-width:80rem}.lg\:max-w-4xl{max-width:90rem}.lg\:max-w-5xl{max-width:100rem}.lg\:max-w-6xl{max-width:72rem}.lg\:max-w-full{max-width:100%}.lg\:max-w-screen-sm{max-width:40.01em}.lg\:max-w-screen-md{max-width:50.01em}.lg\:max-w-screen-lg{max-width:64.01em}.lg\:max-w-screen-xl{max-width:76.26em}.lg\:max-w-1\/4{max-width:25%}.lg\:max-w-1\/2{max-width:50%}.lg\:max-w-3\/5{max-width:60%}.lg\:max-w-4\/5{max-width:80%}.lg\:max-w-9\/10{max-width:90%}.lg\:max-w-site-mini{max-width:17.5rem}.lg\:max-w-site-small{max-width:31.25rem}.lg\:max-w-site-medium{max-width:43.75rem}.lg\:max-w-site-large{max-width:56.25rem}.lg\:max-w-site-xxl{max-width:90rem}.lg\:max-w-site{max-width:73.75rem}.lg\:max-w-screen{max-width:100vw}.lg\:min-h-0{min-height:0}.lg\:min-h-full{min-height:100%}.lg\:min-h-screen{min-height:100vh}.lg\:min-w-0{min-width:0}.lg\:min-w-full{min-width:100%}.lg\:min-w-min{min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content}.lg\:min-w-max{min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content}.lg\:min-w-site{min-width:18.75rem}.lg\:min-w-input-mini{min-width:17.5rem}.lg\:min-w-input-small{min-width:31.25rem}.lg\:min-w-input-medium{min-width:36.3125rem}.lg\:min-w-input-large{min-width:61.45rem}.lg\:min-w-button-mini{min-width:5.5rem}.lg\:min-w-button-small{min-width:7rem}.lg\:min-w-button-medium{min-width:9.875rem}.lg\:min-w-button-large{min-width:10rem}.lg\:object-contain{-o-object-fit:contain;object-fit:contain}.lg\:object-cover{-o-object-fit:cover;object-fit:cover}.lg\:object-fill{-o-object-fit:fill;object-fit:fill}.lg\:object-none{-o-object-fit:none;object-fit:none}.lg\:object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.lg\:object-bottom{-o-object-position:bottom;object-position:bottom}.lg\:object-center{-o-object-position:center;object-position:center}.lg\:object-left{-o-object-position:left;object-position:left}.lg\:object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.lg\:object-left-top{-o-object-position:left top;object-position:left top}.lg\:object-right{-o-object-position:right;object-position:right}.lg\:object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.lg\:object-right-top{-o-object-position:right top;object-position:right top}.lg\:object-top{-o-object-position:top;object-position:top}.lg\:opacity-0{opacity:0}.lg\:opacity-25{opacity:.25}.lg\:opacity-50{opacity:.5}.lg\:opacity-75{opacity:.75}.lg\:opacity-100{opacity:1}.lg\:hover\:opacity-0:hover{opacity:0}.lg\:hover\:opacity-25:hover{opacity:.25}.lg\:hover\:opacity-50:hover{opacity:.5}.lg\:hover\:opacity-75:hover{opacity:.75}.lg\:hover\:opacity-100:hover{opacity:1}.lg\:focus\:opacity-0:focus{opacity:0}.lg\:focus\:opacity-25:focus{opacity:.25}.lg\:focus\:opacity-50:focus{opacity:.5}.lg\:focus\:opacity-75:focus{opacity:.75}.lg\:focus\:opacity-100:focus{opacity:1}.group:hover .lg\:group-hover\:opacity-0{opacity:0}.group:hover .lg\:group-hover\:opacity-25{opacity:.25}.group:hover .lg\:group-hover\:opacity-50{opacity:.5}.group:hover .lg\:group-hover\:opacity-75{opacity:.75}.group:hover .lg\:group-hover\:opacity-100{opacity:1}.lg\:outline-none{outline:2px solid transparent;outline-offset:2px}.lg\:outline-white{outline:2px dotted #fff;outline-offset:2px}.lg\:outline-black{outline:2px dotted #000;outline-offset:2px}.lg\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lg\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.lg\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.lg\:overflow-auto{overflow:auto}.lg\:overflow-hidden{overflow:hidden}.lg\:overflow-visible{overflow:visible}.lg\:overflow-scroll{overflow:scroll}.lg\:overflow-x-auto{overflow-x:auto}.lg\:overflow-y-auto{overflow-y:auto}.lg\:overflow-x-hidden{overflow-x:hidden}.lg\:overflow-y-hidden{overflow-y:hidden}.lg\:overflow-x-visible{overflow-x:visible}.lg\:overflow-y-visible{overflow-y:visible}.lg\:overflow-x-scroll{overflow-x:scroll}.lg\:overflow-y-scroll{overflow-y:scroll}.lg\:scrolling-touch{-webkit-overflow-scrolling:touch}.lg\:scrolling-auto{-webkit-overflow-scrolling:auto}.lg\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.lg\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.lg\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.lg\:overscroll-y-auto{overscroll-behavior-y:auto}.lg\:overscroll-y-contain{overscroll-behavior-y:contain}.lg\:overscroll-y-none{overscroll-behavior-y:none}.lg\:overscroll-x-auto{overscroll-behavior-x:auto}.lg\:overscroll-x-contain{overscroll-behavior-x:contain}.lg\:overscroll-x-none{overscroll-behavior-x:none}.lg\:p-0{padding:0}.lg\:p-1{padding:.25rem}.lg\:p-2{padding:.5rem}.lg\:p-3{padding:.75rem}.lg\:p-4{padding:1rem}.lg\:p-5{padding:1.25rem}.lg\:p-6{padding:1.5rem}.lg\:p-7{padding:1.75rem}.lg\:p-8{padding:2rem}.lg\:p-9{padding:2.25rem}.lg\:p-10{padding:2.5rem}.lg\:p-11{padding:2.75rem}.lg\:p-12{padding:3rem}.lg\:p-15{padding:3.75rem}.lg\:p-16{padding:4rem}.lg\:p-20{padding:5rem}.lg\:p-22{padding:5.5rem}.lg\:p-24{padding:6rem}.lg\:p-25{padding:6.25rem}.lg\:p-26{padding:6.5rem}.lg\:p-28{padding:8rem}.lg\:p-30{padding:8.5rem}.lg\:p-32{padding:9rem}.lg\:p-40{padding:10rem}.lg\:p-48{padding:12rem}.lg\:p-52{padding:13rem}.lg\:p-56{padding:14rem}.lg\:p-60{padding:15rem}.lg\:p-64{padding:16rem}.lg\:p-68{padding:17rem}.lg\:p-px{padding:1px}.lg\:p-0\.5{padding:.125rem}.lg\:p-1\.5{padding:.375rem}.lg\:p-2\.5{padding:.625rem}.lg\:p-7\.5{padding:1.875rem}.lg\:py-0{padding-top:0;padding-bottom:0}.lg\:px-0{padding-left:0;padding-right:0}.lg\:py-1{padding-top:.25rem;padding-bottom:.25rem}.lg\:px-1{padding-left:.25rem;padding-right:.25rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}.lg\:px-2{padding-left:.5rem;padding-right:.5rem}.lg\:py-3{padding-top:.75rem;padding-bottom:.75rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:py-4{padding-top:1rem;padding-bottom:1rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}.lg\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:py-7{padding-top:1.75rem;padding-bottom:1.75rem}.lg\:px-7{padding-left:1.75rem;padding-right:1.75rem}.lg\:py-8{padding-top:2rem;padding-bottom:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-9{padding-top:2.25rem;padding-bottom:2.25rem}.lg\:px-9{padding-left:2.25rem;padding-right:2.25rem}.lg\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.lg\:px-10{padding-left:2.5rem;padding-right:2.5rem}.lg\:py-11{padding-top:2.75rem;padding-bottom:2.75rem}.lg\:px-11{padding-left:2.75rem;padding-right:2.75rem}.lg\:py-12{padding-top:3rem;padding-bottom:3rem}.lg\:px-12{padding-left:3rem;padding-right:3rem}.lg\:py-15{padding-top:3.75rem;padding-bottom:3.75rem}.lg\:px-15{padding-left:3.75rem;padding-right:3.75rem}.lg\:py-16{padding-top:4rem;padding-bottom:4rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:py-20{padding-top:5rem;padding-bottom:5rem}.lg\:px-20{padding-left:5rem;padding-right:5rem}.lg\:py-22{padding-top:5.5rem;padding-bottom:5.5rem}.lg\:px-22{padding-left:5.5rem;padding-right:5.5rem}.lg\:py-24{padding-top:6rem;padding-bottom:6rem}.lg\:px-24{padding-left:6rem;padding-right:6rem}.lg\:py-25{padding-top:6.25rem;padding-bottom:6.25rem}.lg\:px-25{padding-left:6.25rem;padding-right:6.25rem}.lg\:py-26{padding-top:6.5rem;padding-bottom:6.5rem}.lg\:px-26{padding-left:6.5rem;padding-right:6.5rem}.lg\:py-28{padding-top:8rem;padding-bottom:8rem}.lg\:px-28{padding-left:8rem;padding-right:8rem}.lg\:py-30{padding-top:8.5rem;padding-bottom:8.5rem}.lg\:px-30{padding-left:8.5rem;padding-right:8.5rem}.lg\:py-32{padding-top:9rem;padding-bottom:9rem}.lg\:px-32{padding-left:9rem;padding-right:9rem}.lg\:py-40{padding-top:10rem;padding-bottom:10rem}.lg\:px-40{padding-left:10rem;padding-right:10rem}.lg\:py-48{padding-top:12rem;padding-bottom:12rem}.lg\:px-48{padding-left:12rem;padding-right:12rem}.lg\:py-52{padding-top:13rem;padding-bottom:13rem}.lg\:px-52{padding-left:13rem;padding-right:13rem}.lg\:py-56{padding-top:14rem;padding-bottom:14rem}.lg\:px-56{padding-left:14rem;padding-right:14rem}.lg\:py-60{padding-top:15rem;padding-bottom:15rem}.lg\:px-60{padding-left:15rem;padding-right:15rem}.lg\:py-64{padding-top:16rem;padding-bottom:16rem}.lg\:px-64{padding-left:16rem;padding-right:16rem}.lg\:py-68{padding-top:17rem;padding-bottom:17rem}.lg\:px-68{padding-left:17rem;padding-right:17rem}.lg\:py-px{padding-top:1px;padding-bottom:1px}.lg\:px-px{padding-left:1px;padding-right:1px}.lg\:py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.lg\:px-0\.5{padding-left:.125rem;padding-right:.125rem}.lg\:py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.lg\:px-1\.5{padding-left:.375rem;padding-right:.375rem}.lg\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.lg\:px-2\.5{padding-left:.625rem;padding-right:.625rem}.lg\:py-7\.5{padding-top:1.875rem;padding-bottom:1.875rem}.lg\:px-7\.5{padding-left:1.875rem;padding-right:1.875rem}.lg\:pt-0{padding-top:0}.lg\:pr-0{padding-right:0}.lg\:pb-0{padding-bottom:0}.lg\:pl-0{padding-left:0}.lg\:pt-1{padding-top:.25rem}.lg\:pr-1{padding-right:.25rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:pl-1{padding-left:.25rem}.lg\:pt-2{padding-top:.5rem}.lg\:pr-2{padding-right:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:pl-2{padding-left:.5rem}.lg\:pt-3{padding-top:.75rem}.lg\:pr-3{padding-right:.75rem}.lg\:pb-3{padding-bottom:.75rem}.lg\:pl-3{padding-left:.75rem}.lg\:pt-4{padding-top:1rem}.lg\:pr-4{padding-right:1rem}.lg\:pb-4{padding-bottom:1rem}.lg\:pl-4{padding-left:1rem}.lg\:pt-5{padding-top:1.25rem}.lg\:pr-5{padding-right:1.25rem}.lg\:pb-5{padding-bottom:1.25rem}.lg\:pl-5{padding-left:1.25rem}.lg\:pt-6{padding-top:1.5rem}.lg\:pr-6{padding-right:1.5rem}.lg\:pb-6{padding-bottom:1.5rem}.lg\:pl-6{padding-left:1.5rem}.lg\:pt-7{padding-top:1.75rem}.lg\:pr-7{padding-right:1.75rem}.lg\:pb-7{padding-bottom:1.75rem}.lg\:pl-7{padding-left:1.75rem}.lg\:pt-8{padding-top:2rem}.lg\:pr-8{padding-right:2rem}.lg\:pb-8{padding-bottom:2rem}.lg\:pl-8{padding-left:2rem}.lg\:pt-9{padding-top:2.25rem}.lg\:pr-9{padding-right:2.25rem}.lg\:pb-9{padding-bottom:2.25rem}.lg\:pl-9{padding-left:2.25rem}.lg\:pt-10{padding-top:2.5rem}.lg\:pr-10{padding-right:2.5rem}.lg\:pb-10{padding-bottom:2.5rem}.lg\:pl-10{padding-left:2.5rem}.lg\:pt-11{padding-top:2.75rem}.lg\:pr-11{padding-right:2.75rem}.lg\:pb-11{padding-bottom:2.75rem}.lg\:pl-11{padding-left:2.75rem}.lg\:pt-12{padding-top:3rem}.lg\:pr-12{padding-right:3rem}.lg\:pb-12{padding-bottom:3rem}.lg\:pl-12{padding-left:3rem}.lg\:pt-15{padding-top:3.75rem}.lg\:pr-15{padding-right:3.75rem}.lg\:pb-15{padding-bottom:3.75rem}.lg\:pl-15{padding-left:3.75rem}.lg\:pt-16{padding-top:4rem}.lg\:pr-16{padding-right:4rem}.lg\:pb-16{padding-bottom:4rem}.lg\:pl-16{padding-left:4rem}.lg\:pt-20{padding-top:5rem}.lg\:pr-20{padding-right:5rem}.lg\:pb-20{padding-bottom:5rem}.lg\:pl-20{padding-left:5rem}.lg\:pt-22{padding-top:5.5rem}.lg\:pr-22{padding-right:5.5rem}.lg\:pb-22{padding-bottom:5.5rem}.lg\:pl-22{padding-left:5.5rem}.lg\:pt-24{padding-top:6rem}.lg\:pr-24{padding-right:6rem}.lg\:pb-24{padding-bottom:6rem}.lg\:pl-24{padding-left:6rem}.lg\:pt-25{padding-top:6.25rem}.lg\:pr-25{padding-right:6.25rem}.lg\:pb-25{padding-bottom:6.25rem}.lg\:pl-25{padding-left:6.25rem}.lg\:pt-26{padding-top:6.5rem}.lg\:pr-26{padding-right:6.5rem}.lg\:pb-26{padding-bottom:6.5rem}.lg\:pl-26{padding-left:6.5rem}.lg\:pt-28{padding-top:8rem}.lg\:pr-28{padding-right:8rem}.lg\:pb-28{padding-bottom:8rem}.lg\:pl-28{padding-left:8rem}.lg\:pt-30{padding-top:8.5rem}.lg\:pr-30{padding-right:8.5rem}.lg\:pb-30{padding-bottom:8.5rem}.lg\:pl-30{padding-left:8.5rem}.lg\:pt-32{padding-top:9rem}.lg\:pr-32{padding-right:9rem}.lg\:pb-32{padding-bottom:9rem}.lg\:pl-32{padding-left:9rem}.lg\:pt-40{padding-top:10rem}.lg\:pr-40{padding-right:10rem}.lg\:pb-40{padding-bottom:10rem}.lg\:pl-40{padding-left:10rem}.lg\:pt-48{padding-top:12rem}.lg\:pr-48{padding-right:12rem}.lg\:pb-48{padding-bottom:12rem}.lg\:pl-48{padding-left:12rem}.lg\:pt-52{padding-top:13rem}.lg\:pr-52{padding-right:13rem}.lg\:pb-52{padding-bottom:13rem}.lg\:pl-52{padding-left:13rem}.lg\:pt-56{padding-top:14rem}.lg\:pr-56{padding-right:14rem}.lg\:pb-56{padding-bottom:14rem}.lg\:pl-56{padding-left:14rem}.lg\:pt-60{padding-top:15rem}.lg\:pr-60{padding-right:15rem}.lg\:pb-60{padding-bottom:15rem}.lg\:pl-60{padding-left:15rem}.lg\:pt-64{padding-top:16rem}.lg\:pr-64{padding-right:16rem}.lg\:pb-64{padding-bottom:16rem}.lg\:pl-64{padding-left:16rem}.lg\:pt-68{padding-top:17rem}.lg\:pr-68{padding-right:17rem}.lg\:pb-68{padding-bottom:17rem}.lg\:pl-68{padding-left:17rem}.lg\:pt-px{padding-top:1px}.lg\:pr-px{padding-right:1px}.lg\:pb-px{padding-bottom:1px}.lg\:pl-px{padding-left:1px}.lg\:pt-0\.5{padding-top:.125rem}.lg\:pr-0\.5{padding-right:.125rem}.lg\:pb-0\.5{padding-bottom:.125rem}.lg\:pl-0\.5{padding-left:.125rem}.lg\:pt-1\.5{padding-top:.375rem}.lg\:pr-1\.5{padding-right:.375rem}.lg\:pb-1\.5{padding-bottom:.375rem}.lg\:pl-1\.5{padding-left:.375rem}.lg\:pt-2\.5{padding-top:.625rem}.lg\:pr-2\.5{padding-right:.625rem}.lg\:pb-2\.5{padding-bottom:.625rem}.lg\:pl-2\.5{padding-left:.625rem}.lg\:pt-7\.5{padding-top:1.875rem}.lg\:pr-7\.5{padding-right:1.875rem}.lg\:pb-7\.5{padding-bottom:1.875rem}.lg\:pl-7\.5{padding-left:1.875rem}.lg\:placeholder-transparent::-moz-placeholder{color:transparent}.lg\:placeholder-transparent:-ms-input-placeholder{color:transparent}.lg\:placeholder-transparent::placeholder{color:transparent}.lg\:placeholder-current::-moz-placeholder{color:currentColor}.lg\:placeholder-current:-ms-input-placeholder{color:currentColor}.lg\:placeholder-current::placeholder{color:currentColor}.lg\:placeholder-black::-moz-placeholder{color:#000}.lg\:placeholder-black:-ms-input-placeholder{color:#000}.lg\:placeholder-black::placeholder{color:#000}.lg\:placeholder-white::-moz-placeholder{color:#fff}.lg\:placeholder-white:-ms-input-placeholder{color:#fff}.lg\:placeholder-white::placeholder{color:#fff}.lg\:placeholder-gray-100::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:placeholder-gray-200::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:placeholder-gray-300::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:placeholder-gray-400::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:placeholder-gray-500::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:placeholder-gray-600::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-700::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:placeholder-gray-800::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:placeholder-gray-900::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:placeholder-gray-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-DEFAULT::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-red::-moz-placeholder{color:#d64343}.lg\:placeholder-red:-ms-input-placeholder{color:#d64343}.lg\:placeholder-red::placeholder{color:#d64343}.lg\:placeholder-orange::-moz-placeholder{color:#eb6437}.lg\:placeholder-orange:-ms-input-placeholder{color:#eb6437}.lg\:placeholder-orange::placeholder{color:#eb6437}.lg\:placeholder-yellow::-moz-placeholder{color:#f8da30}.lg\:placeholder-yellow:-ms-input-placeholder{color:#f8da30}.lg\:placeholder-yellow::placeholder{color:#f8da30}.lg\:placeholder-green-100::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:placeholder-green-200::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:placeholder-green-300::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:placeholder-green-400::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:placeholder-green-500::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:placeholder-green-600::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-700::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:placeholder-green-800::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:placeholder-green-900::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:placeholder-green-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-DEFAULT::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-teal-100::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:placeholder-teal-200::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:placeholder-teal-300::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:placeholder-teal-400::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:placeholder-teal-500::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:placeholder-teal-600::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-700::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:placeholder-teal-800::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:placeholder-teal-900::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:placeholder-teal-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-DEFAULT::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-blue-50::-moz-placeholder{color:#d1eaff}.lg\:placeholder-blue-50:-ms-input-placeholder{color:#d1eaff}.lg\:placeholder-blue-50::placeholder{color:#d1eaff}.lg\:placeholder-blue-100::-moz-placeholder{color:#a8d7ff}.lg\:placeholder-blue-100:-ms-input-placeholder{color:#a8d7ff}.lg\:placeholder-blue-100::placeholder{color:#a8d7ff}.lg\:placeholder-blue-200::-moz-placeholder{color:#80c4ff}.lg\:placeholder-blue-200:-ms-input-placeholder{color:#80c4ff}.lg\:placeholder-blue-200::placeholder{color:#80c4ff}.lg\:placeholder-blue-300::-moz-placeholder{color:#57b0ff}.lg\:placeholder-blue-300:-ms-input-placeholder{color:#57b0ff}.lg\:placeholder-blue-300::placeholder{color:#57b0ff}.lg\:placeholder-blue-400::-moz-placeholder{color:#2e9dff}.lg\:placeholder-blue-400:-ms-input-placeholder{color:#2e9dff}.lg\:placeholder-blue-400::placeholder{color:#2e9dff}.lg\:placeholder-blue-500::-moz-placeholder{color:#058aff}.lg\:placeholder-blue-500:-ms-input-placeholder{color:#058aff}.lg\:placeholder-blue-500::placeholder{color:#058aff}.lg\:placeholder-blue-600::-moz-placeholder{color:#0075db}.lg\:placeholder-blue-600:-ms-input-placeholder{color:#0075db}.lg\:placeholder-blue-600::placeholder{color:#0075db}.lg\:placeholder-blue-700::-moz-placeholder{color:#005fb3}.lg\:placeholder-blue-700:-ms-input-placeholder{color:#005fb3}.lg\:placeholder-blue-700::placeholder{color:#005fb3}.lg\:placeholder-blue-800::-moz-placeholder{color:#00498a}.lg\:placeholder-blue-800:-ms-input-placeholder{color:#00498a}.lg\:placeholder-blue-800::placeholder{color:#00498a}.lg\:placeholder-blue-900::-moz-placeholder{color:#003461}.lg\:placeholder-blue-900:-ms-input-placeholder{color:#003461}.lg\:placeholder-blue-900::placeholder{color:#003461}.lg\:placeholder-blue-DEFAULT::-moz-placeholder{color:#0075db}.lg\:placeholder-blue-DEFAULT:-ms-input-placeholder{color:#0075db}.lg\:placeholder-blue-DEFAULT::placeholder{color:#0075db}.lg\:placeholder-blue::-moz-placeholder{color:#0075db}.lg\:placeholder-blue:-ms-input-placeholder{color:#0075db}.lg\:placeholder-blue::placeholder{color:#0075db}.lg\:placeholder-indigo-100::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:placeholder-indigo-200::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:placeholder-indigo-300::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:placeholder-indigo-400::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:placeholder-indigo-500::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:placeholder-indigo-600::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-700::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:placeholder-indigo-800::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:placeholder-indigo-900::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:placeholder-indigo-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-DEFAULT::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-purple-100::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:placeholder-purple-200::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:placeholder-purple-300::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:placeholder-purple-400::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:placeholder-purple-500::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:placeholder-purple-600::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-700::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:placeholder-purple-800::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:placeholder-purple-900::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:placeholder-purple-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-DEFAULT::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-pink::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.lg\:placeholder-pink:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.lg\:placeholder-pink::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.lg\:placeholder-inherit::-moz-placeholder{color:inherit}.lg\:placeholder-inherit:-ms-input-placeholder{color:inherit}.lg\:placeholder-inherit::placeholder{color:inherit}.lg\:placeholder-amber::-moz-placeholder{color:#d78737}.lg\:placeholder-amber:-ms-input-placeholder{color:#d78737}.lg\:placeholder-amber::placeholder{color:#d78737}.lg\:placeholder-amber-active::-moz-placeholder{color:#e3872b}.lg\:placeholder-amber-active:-ms-input-placeholder{color:#e3872b}.lg\:placeholder-amber-active::placeholder{color:#e3872b}.lg\:placeholder-ardoise::-moz-placeholder{color:#596a82}.lg\:placeholder-ardoise:-ms-input-placeholder{color:#596a82}.lg\:placeholder-ardoise::placeholder{color:#596a82}.lg\:placeholder-ardoise-active::-moz-placeholder{color:#476794}.lg\:placeholder-ardoise-active:-ms-input-placeholder{color:#476794}.lg\:placeholder-ardoise-active::placeholder{color:#476794}.lg\:placeholder-blue-active::-moz-placeholder{color:#14a5c2}.lg\:placeholder-blue-active:-ms-input-placeholder{color:#14a5c2}.lg\:placeholder-blue-active::placeholder{color:#14a5c2}.lg\:placeholder-lightBlue::-moz-placeholder{color:rgba(0,85,138,.1)}.lg\:placeholder-lightBlue:-ms-input-placeholder{color:rgba(0,85,138,.1)}.lg\:placeholder-lightBlue::placeholder{color:rgba(0,85,138,.1)}.lg\:placeholder-lightBlue-active::-moz-placeholder{color:rgba(0,85,138,.1)}.lg\:placeholder-lightBlue-active:-ms-input-placeholder{color:rgba(0,85,138,.1)}.lg\:placeholder-lightBlue-active::placeholder{color:rgba(0,85,138,.1)}.lg\:placeholder-deepBlue::-moz-placeholder{color:#0e346c}.lg\:placeholder-deepBlue:-ms-input-placeholder{color:#0e346c}.lg\:placeholder-deepBlue::placeholder{color:#0e346c}.lg\:placeholder-deepBlue-active::-moz-placeholder{color:#0a3f8f}.lg\:placeholder-deepBlue-active:-ms-input-placeholder{color:#0a3f8f}.lg\:placeholder-deepBlue-active::placeholder{color:#0a3f8f}.lg\:placeholder-gold::-moz-placeholder{color:#bd9e56}.lg\:placeholder-gold:-ms-input-placeholder{color:#bd9e56}.lg\:placeholder-gold::placeholder{color:#bd9e56}.lg\:placeholder-gold-active::-moz-placeholder{color:#c9a34a}.lg\:placeholder-gold-active:-ms-input-placeholder{color:#c9a34a}.lg\:placeholder-gold-active::placeholder{color:#c9a34a}.lg\:placeholder-grenadine::-moz-placeholder{color:#c35078}.lg\:placeholder-grenadine:-ms-input-placeholder{color:#c35078}.lg\:placeholder-grenadine::placeholder{color:#c35078}.lg\:placeholder-grenadine-active::-moz-placeholder{color:#cf4475}.lg\:placeholder-grenadine-active:-ms-input-placeholder{color:#cf4475}.lg\:placeholder-grenadine-active::placeholder{color:#cf4475}.lg\:placeholder-kiwi::-moz-placeholder{color:#9a9f1e}.lg\:placeholder-kiwi:-ms-input-placeholder{color:#9a9f1e}.lg\:placeholder-kiwi::placeholder{color:#9a9f1e}.lg\:placeholder-kiwi-active::-moz-placeholder{color:#a3a815}.lg\:placeholder-kiwi-active:-ms-input-placeholder{color:#a3a815}.lg\:placeholder-kiwi-active::placeholder{color:#a3a815}.lg\:placeholder-lilas::-moz-placeholder{color:#7ea1d3}.lg\:placeholder-lilas:-ms-input-placeholder{color:#7ea1d3}.lg\:placeholder-lilas::placeholder{color:#7ea1d3}.lg\:placeholder-lilas-active::-moz-placeholder{color:#75a0db}.lg\:placeholder-lilas-active:-ms-input-placeholder{color:#75a0db}.lg\:placeholder-lilas-active::placeholder{color:#75a0db}.lg\:placeholder-mahogany::-moz-placeholder{color:#57142e}.lg\:placeholder-mahogany:-ms-input-placeholder{color:#57142e}.lg\:placeholder-mahogany::placeholder{color:#57142e}.lg\:placeholder-mahogany-active::-moz-placeholder{color:#610a2b}.lg\:placeholder-mahogany-active:-ms-input-placeholder{color:#610a2b}.lg\:placeholder-mahogany-active::placeholder{color:#610a2b}.lg\:placeholder-ocher::-moz-placeholder{color:#c29614}.lg\:placeholder-ocher:-ms-input-placeholder{color:#c29614}.lg\:placeholder-ocher::placeholder{color:#c29614}.lg\:placeholder-ocher-active::-moz-placeholder{color:#cd9c0a}.lg\:placeholder-ocher-active:-ms-input-placeholder{color:#cd9c0a}.lg\:placeholder-ocher-active::placeholder{color:#cd9c0a}.lg\:placeholder-pine::-moz-placeholder{color:#144d52}.lg\:placeholder-pine:-ms-input-placeholder{color:#144d52}.lg\:placeholder-pine::placeholder{color:#144d52}.lg\:placeholder-pine-active::-moz-placeholder{color:#0a555c}.lg\:placeholder-pine-active:-ms-input-placeholder{color:#0a555c}.lg\:placeholder-pine-active::placeholder{color:#0a555c}.lg\:placeholder-platinum::-moz-placeholder{color:#000}.lg\:placeholder-platinum:-ms-input-placeholder{color:#000}.lg\:placeholder-platinum::placeholder{color:#000}.lg\:placeholder-platinum-active::-moz-placeholder{color:#000}.lg\:placeholder-platinum-active:-ms-input-placeholder{color:#000}.lg\:placeholder-platinum-active::placeholder{color:#000}.lg\:placeholder-prune::-moz-placeholder{color:#661456}.lg\:placeholder-prune:-ms-input-placeholder{color:#661456}.lg\:placeholder-prune::placeholder{color:#661456}.lg\:placeholder-prune-active::-moz-placeholder{color:#72085d}.lg\:placeholder-prune-active:-ms-input-placeholder{color:#72085d}.lg\:placeholder-prune-active::placeholder{color:#72085d}.lg\:placeholder-sand::-moz-placeholder{color:#d7be88}.lg\:placeholder-sand:-ms-input-placeholder{color:#d7be88}.lg\:placeholder-sand::placeholder{color:#d7be88}.lg\:placeholder-sand-active::-moz-placeholder{color:#dfc181}.lg\:placeholder-sand-active:-ms-input-placeholder{color:#dfc181}.lg\:placeholder-sand-active::placeholder{color:#dfc181}.lg\:placeholder-sandPearl::-moz-placeholder{color:#f0e5d6}.lg\:placeholder-sandPearl:-ms-input-placeholder{color:#f0e5d6}.lg\:placeholder-sandPearl::placeholder{color:#f0e5d6}.lg\:placeholder-sandPearl-active::-moz-placeholder{color:#f2e6d4}.lg\:placeholder-sandPearl-active:-ms-input-placeholder{color:#f2e6d4}.lg\:placeholder-sandPearl-active::placeholder{color:#f2e6d4}.lg\:placeholder-silver::-moz-placeholder{color:#b1b2b4}.lg\:placeholder-silver:-ms-input-placeholder{color:#b1b2b4}.lg\:placeholder-silver::placeholder{color:#b1b2b4}.lg\:placeholder-silver-active::-moz-placeholder{color:#a9afbc}.lg\:placeholder-silver-active:-ms-input-placeholder{color:#a9afbc}.lg\:placeholder-silver-active::placeholder{color:#a9afbc}.lg\:placeholder-skyBlue::-moz-placeholder{color:#98d2d7}.lg\:placeholder-skyBlue:-ms-input-placeholder{color:#98d2d7}.lg\:placeholder-skyBlue::placeholder{color:#98d2d7}.lg\:placeholder-skyBlue-active::-moz-placeholder{color:#91d8de}.lg\:placeholder-skyBlue-active:-ms-input-placeholder{color:#91d8de}.lg\:placeholder-skyBlue-active::placeholder{color:#91d8de}.lg\:placeholder-southSea::-moz-placeholder{color:#9dc9cd}.lg\:placeholder-southSea:-ms-input-placeholder{color:#9dc9cd}.lg\:placeholder-southSea::placeholder{color:#9dc9cd}.lg\:placeholder-southSea-active::-moz-placeholder{color:#95ced5}.lg\:placeholder-southSea-active:-ms-input-placeholder{color:#95ced5}.lg\:placeholder-southSea-active::placeholder{color:#95ced5}.lg\:placeholder-turquoise::-moz-placeholder{color:#14a5c2}.lg\:placeholder-turquoise:-ms-input-placeholder{color:#14a5c2}.lg\:placeholder-turquoise::placeholder{color:#14a5c2}.lg\:placeholder-turquoise-active::-moz-placeholder{color:#0aaccd}.lg\:placeholder-turquoise-active:-ms-input-placeholder{color:#0aaccd}.lg\:placeholder-turquoise-active::placeholder{color:#0aaccd}.lg\:placeholder-waterGreen::-moz-placeholder{color:#007571}.lg\:placeholder-waterGreen:-ms-input-placeholder{color:#007571}.lg\:placeholder-waterGreen::placeholder{color:#007571}.lg\:placeholder-waterGreen-active::-moz-placeholder{color:#00a8a3}.lg\:placeholder-waterGreen-active:-ms-input-placeholder{color:#00a8a3}.lg\:placeholder-waterGreen-active::placeholder{color:#00a8a3}.lg\:placeholder-deepRed::-moz-placeholder{color:#c32222}.lg\:placeholder-deepRed:-ms-input-placeholder{color:#c32222}.lg\:placeholder-deepRed::placeholder{color:#c32222}.lg\:placeholder-deepRed-active::-moz-placeholder{color:#cf1717}.lg\:placeholder-deepRed-active:-ms-input-placeholder{color:#cf1717}.lg\:placeholder-deepRed-active::placeholder{color:#cf1717}.lg\:placeholder-emerald::-moz-placeholder{color:#14a33a}.lg\:placeholder-emerald:-ms-input-placeholder{color:#14a33a}.lg\:placeholder-emerald::placeholder{color:#14a33a}.lg\:placeholder-emerald-active::-moz-placeholder{color:#0bad36}.lg\:placeholder-emerald-active:-ms-input-placeholder{color:#0bad36}.lg\:placeholder-emerald-active::placeholder{color:#0bad36}.lg\:placeholder-greenLight::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.lg\:placeholder-greenLight:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.lg\:placeholder-greenLight::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.lg\:placeholder-orange-active::-moz-placeholder{color:#f65f2c}.lg\:placeholder-orange-active:-ms-input-placeholder{color:#f65f2c}.lg\:placeholder-orange-active::placeholder{color:#f65f2c}.lg\:placeholder-red-active::-moz-placeholder{color:#e13737}.lg\:placeholder-red-active:-ms-input-placeholder{color:#e13737}.lg\:placeholder-red-active::placeholder{color:#e13737}.lg\:placeholder-white-active::-moz-placeholder{color:#14a5c2}.lg\:placeholder-white-active:-ms-input-placeholder{color:#14a5c2}.lg\:placeholder-white-active::placeholder{color:#14a5c2}.lg\:placeholder-white-button::-moz-placeholder{color:#fff}.lg\:placeholder-white-button:-ms-input-placeholder{color:#fff}.lg\:placeholder-white-button::placeholder{color:#fff}.lg\:placeholder-white-button-active::-moz-placeholder{color:#fff}.lg\:placeholder-white-button-active:-ms-input-placeholder{color:#fff}.lg\:placeholder-white-button-active::placeholder{color:#fff}.lg\:placeholder-code::-moz-placeholder{color:#3f3d57}.lg\:placeholder-code:-ms-input-placeholder{color:#3f3d57}.lg\:placeholder-code::placeholder{color:#3f3d57}.lg\:placeholder-code-active::-moz-placeholder{color:#37354b}.lg\:placeholder-code-active:-ms-input-placeholder{color:#37354b}.lg\:placeholder-code-active::placeholder{color:#37354b}.lg\:placeholder-gray-lighter::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.lg\:placeholder-gray-lighter:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.lg\:placeholder-gray-lighter::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.lg\:placeholder-gray-lighter-active::-moz-placeholder{color:#ebebeb}.lg\:placeholder-gray-lighter-active:-ms-input-placeholder{color:#ebebeb}.lg\:placeholder-gray-lighter-active::placeholder{color:#ebebeb}.lg\:placeholder-gray-light::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.lg\:placeholder-gray-light:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.lg\:placeholder-gray-light::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.lg\:placeholder-gray-medium::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.lg\:placeholder-gray-medium:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.lg\:placeholder-gray-medium::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.lg\:placeholder-gray-darker::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.lg\:placeholder-gray-darker:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.lg\:placeholder-gray-darker::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.lg\:placeholder-gray-darker-active::-moz-placeholder{color:#14a5c2}.lg\:placeholder-gray-darker-active:-ms-input-placeholder{color:#14a5c2}.lg\:placeholder-gray-darker-active::placeholder{color:#14a5c2}.lg\:placeholder-api-default::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.lg\:placeholder-api-default:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.lg\:placeholder-api-default::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.lg\:placeholder-gray-xxl::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.lg\:placeholder-gray-xxl:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.lg\:placeholder-gray-xxl::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.lg\:placeholder-line-even::-moz-placeholder{color:#f3f6f7}.lg\:placeholder-line-even:-ms-input-placeholder{color:#f3f6f7}.lg\:placeholder-line-even::placeholder{color:#f3f6f7}.lg\:focus\:placeholder-transparent:focus::-moz-placeholder{color:transparent}.lg\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.lg\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.lg\:focus\:placeholder-current:focus::-moz-placeholder{color:currentColor}.lg\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.lg\:focus\:placeholder-current:focus::placeholder{color:currentColor}.lg\:focus\:placeholder-black:focus::-moz-placeholder{color:#000}.lg\:focus\:placeholder-black:focus:-ms-input-placeholder{color:#000}.lg\:focus\:placeholder-black:focus::placeholder{color:#000}.lg\:focus\:placeholder-white:focus::-moz-placeholder{color:#fff}.lg\:focus\:placeholder-white:focus:-ms-input-placeholder{color:#fff}.lg\:focus\:placeholder-white:focus::placeholder{color:#fff}.lg\:focus\:placeholder-gray-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-red:focus::-moz-placeholder{color:#d64343}.lg\:focus\:placeholder-red:focus:-ms-input-placeholder{color:#d64343}.lg\:focus\:placeholder-red:focus::placeholder{color:#d64343}.lg\:focus\:placeholder-orange:focus::-moz-placeholder{color:#eb6437}.lg\:focus\:placeholder-orange:focus:-ms-input-placeholder{color:#eb6437}.lg\:focus\:placeholder-orange:focus::placeholder{color:#eb6437}.lg\:focus\:placeholder-yellow:focus::-moz-placeholder{color:#f8da30}.lg\:focus\:placeholder-yellow:focus:-ms-input-placeholder{color:#f8da30}.lg\:focus\:placeholder-yellow:focus::placeholder{color:#f8da30}.lg\:focus\:placeholder-green-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-50:focus::-moz-placeholder{color:#d1eaff}.lg\:focus\:placeholder-blue-50:focus:-ms-input-placeholder{color:#d1eaff}.lg\:focus\:placeholder-blue-50:focus::placeholder{color:#d1eaff}.lg\:focus\:placeholder-blue-100:focus::-moz-placeholder{color:#a8d7ff}.lg\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{color:#a8d7ff}.lg\:focus\:placeholder-blue-100:focus::placeholder{color:#a8d7ff}.lg\:focus\:placeholder-blue-200:focus::-moz-placeholder{color:#80c4ff}.lg\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{color:#80c4ff}.lg\:focus\:placeholder-blue-200:focus::placeholder{color:#80c4ff}.lg\:focus\:placeholder-blue-300:focus::-moz-placeholder{color:#57b0ff}.lg\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{color:#57b0ff}.lg\:focus\:placeholder-blue-300:focus::placeholder{color:#57b0ff}.lg\:focus\:placeholder-blue-400:focus::-moz-placeholder{color:#2e9dff}.lg\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{color:#2e9dff}.lg\:focus\:placeholder-blue-400:focus::placeholder{color:#2e9dff}.lg\:focus\:placeholder-blue-500:focus::-moz-placeholder{color:#058aff}.lg\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{color:#058aff}.lg\:focus\:placeholder-blue-500:focus::placeholder{color:#058aff}.lg\:focus\:placeholder-blue-600:focus::-moz-placeholder{color:#0075db}.lg\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{color:#0075db}.lg\:focus\:placeholder-blue-600:focus::placeholder{color:#0075db}.lg\:focus\:placeholder-blue-700:focus::-moz-placeholder{color:#005fb3}.lg\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{color:#005fb3}.lg\:focus\:placeholder-blue-700:focus::placeholder{color:#005fb3}.lg\:focus\:placeholder-blue-800:focus::-moz-placeholder{color:#00498a}.lg\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{color:#00498a}.lg\:focus\:placeholder-blue-800:focus::placeholder{color:#00498a}.lg\:focus\:placeholder-blue-900:focus::-moz-placeholder{color:#003461}.lg\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{color:#003461}.lg\:focus\:placeholder-blue-900:focus::placeholder{color:#003461}.lg\:focus\:placeholder-blue-DEFAULT:focus::-moz-placeholder{color:#0075db}.lg\:focus\:placeholder-blue-DEFAULT:focus:-ms-input-placeholder{color:#0075db}.lg\:focus\:placeholder-blue-DEFAULT:focus::placeholder{color:#0075db}.lg\:focus\:placeholder-blue:focus::-moz-placeholder{color:#0075db}.lg\:focus\:placeholder-blue:focus:-ms-input-placeholder{color:#0075db}.lg\:focus\:placeholder-blue:focus::placeholder{color:#0075db}.lg\:focus\:placeholder-indigo-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink:focus::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink:focus::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.lg\:focus\:placeholder-inherit:focus::-moz-placeholder{color:inherit}.lg\:focus\:placeholder-inherit:focus:-ms-input-placeholder{color:inherit}.lg\:focus\:placeholder-inherit:focus::placeholder{color:inherit}.lg\:focus\:placeholder-amber:focus::-moz-placeholder{color:#d78737}.lg\:focus\:placeholder-amber:focus:-ms-input-placeholder{color:#d78737}.lg\:focus\:placeholder-amber:focus::placeholder{color:#d78737}.lg\:focus\:placeholder-amber-active:focus::-moz-placeholder{color:#e3872b}.lg\:focus\:placeholder-amber-active:focus:-ms-input-placeholder{color:#e3872b}.lg\:focus\:placeholder-amber-active:focus::placeholder{color:#e3872b}.lg\:focus\:placeholder-ardoise:focus::-moz-placeholder{color:#596a82}.lg\:focus\:placeholder-ardoise:focus:-ms-input-placeholder{color:#596a82}.lg\:focus\:placeholder-ardoise:focus::placeholder{color:#596a82}.lg\:focus\:placeholder-ardoise-active:focus::-moz-placeholder{color:#476794}.lg\:focus\:placeholder-ardoise-active:focus:-ms-input-placeholder{color:#476794}.lg\:focus\:placeholder-ardoise-active:focus::placeholder{color:#476794}.lg\:focus\:placeholder-blue-active:focus::-moz-placeholder{color:#14a5c2}.lg\:focus\:placeholder-blue-active:focus:-ms-input-placeholder{color:#14a5c2}.lg\:focus\:placeholder-blue-active:focus::placeholder{color:#14a5c2}.lg\:focus\:placeholder-lightBlue:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.lg\:focus\:placeholder-lightBlue:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.lg\:focus\:placeholder-lightBlue:focus::placeholder{color:rgba(0,85,138,.1)}.lg\:focus\:placeholder-lightBlue-active:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.lg\:focus\:placeholder-lightBlue-active:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.lg\:focus\:placeholder-lightBlue-active:focus::placeholder{color:rgba(0,85,138,.1)}.lg\:focus\:placeholder-deepBlue:focus::-moz-placeholder{color:#0e346c}.lg\:focus\:placeholder-deepBlue:focus:-ms-input-placeholder{color:#0e346c}.lg\:focus\:placeholder-deepBlue:focus::placeholder{color:#0e346c}.lg\:focus\:placeholder-deepBlue-active:focus::-moz-placeholder{color:#0a3f8f}.lg\:focus\:placeholder-deepBlue-active:focus:-ms-input-placeholder{color:#0a3f8f}.lg\:focus\:placeholder-deepBlue-active:focus::placeholder{color:#0a3f8f}.lg\:focus\:placeholder-gold:focus::-moz-placeholder{color:#bd9e56}.lg\:focus\:placeholder-gold:focus:-ms-input-placeholder{color:#bd9e56}.lg\:focus\:placeholder-gold:focus::placeholder{color:#bd9e56}.lg\:focus\:placeholder-gold-active:focus::-moz-placeholder{color:#c9a34a}.lg\:focus\:placeholder-gold-active:focus:-ms-input-placeholder{color:#c9a34a}.lg\:focus\:placeholder-gold-active:focus::placeholder{color:#c9a34a}.lg\:focus\:placeholder-grenadine:focus::-moz-placeholder{color:#c35078}.lg\:focus\:placeholder-grenadine:focus:-ms-input-placeholder{color:#c35078}.lg\:focus\:placeholder-grenadine:focus::placeholder{color:#c35078}.lg\:focus\:placeholder-grenadine-active:focus::-moz-placeholder{color:#cf4475}.lg\:focus\:placeholder-grenadine-active:focus:-ms-input-placeholder{color:#cf4475}.lg\:focus\:placeholder-grenadine-active:focus::placeholder{color:#cf4475}.lg\:focus\:placeholder-kiwi:focus::-moz-placeholder{color:#9a9f1e}.lg\:focus\:placeholder-kiwi:focus:-ms-input-placeholder{color:#9a9f1e}.lg\:focus\:placeholder-kiwi:focus::placeholder{color:#9a9f1e}.lg\:focus\:placeholder-kiwi-active:focus::-moz-placeholder{color:#a3a815}.lg\:focus\:placeholder-kiwi-active:focus:-ms-input-placeholder{color:#a3a815}.lg\:focus\:placeholder-kiwi-active:focus::placeholder{color:#a3a815}.lg\:focus\:placeholder-lilas:focus::-moz-placeholder{color:#7ea1d3}.lg\:focus\:placeholder-lilas:focus:-ms-input-placeholder{color:#7ea1d3}.lg\:focus\:placeholder-lilas:focus::placeholder{color:#7ea1d3}.lg\:focus\:placeholder-lilas-active:focus::-moz-placeholder{color:#75a0db}.lg\:focus\:placeholder-lilas-active:focus:-ms-input-placeholder{color:#75a0db}.lg\:focus\:placeholder-lilas-active:focus::placeholder{color:#75a0db}.lg\:focus\:placeholder-mahogany:focus::-moz-placeholder{color:#57142e}.lg\:focus\:placeholder-mahogany:focus:-ms-input-placeholder{color:#57142e}.lg\:focus\:placeholder-mahogany:focus::placeholder{color:#57142e}.lg\:focus\:placeholder-mahogany-active:focus::-moz-placeholder{color:#610a2b}.lg\:focus\:placeholder-mahogany-active:focus:-ms-input-placeholder{color:#610a2b}.lg\:focus\:placeholder-mahogany-active:focus::placeholder{color:#610a2b}.lg\:focus\:placeholder-ocher:focus::-moz-placeholder{color:#c29614}.lg\:focus\:placeholder-ocher:focus:-ms-input-placeholder{color:#c29614}.lg\:focus\:placeholder-ocher:focus::placeholder{color:#c29614}.lg\:focus\:placeholder-ocher-active:focus::-moz-placeholder{color:#cd9c0a}.lg\:focus\:placeholder-ocher-active:focus:-ms-input-placeholder{color:#cd9c0a}.lg\:focus\:placeholder-ocher-active:focus::placeholder{color:#cd9c0a}.lg\:focus\:placeholder-pine:focus::-moz-placeholder{color:#144d52}.lg\:focus\:placeholder-pine:focus:-ms-input-placeholder{color:#144d52}.lg\:focus\:placeholder-pine:focus::placeholder{color:#144d52}.lg\:focus\:placeholder-pine-active:focus::-moz-placeholder{color:#0a555c}.lg\:focus\:placeholder-pine-active:focus:-ms-input-placeholder{color:#0a555c}.lg\:focus\:placeholder-pine-active:focus::placeholder{color:#0a555c}.lg\:focus\:placeholder-platinum:focus::-moz-placeholder{color:#000}.lg\:focus\:placeholder-platinum:focus:-ms-input-placeholder{color:#000}.lg\:focus\:placeholder-platinum:focus::placeholder{color:#000}.lg\:focus\:placeholder-platinum-active:focus::-moz-placeholder{color:#000}.lg\:focus\:placeholder-platinum-active:focus:-ms-input-placeholder{color:#000}.lg\:focus\:placeholder-platinum-active:focus::placeholder{color:#000}.lg\:focus\:placeholder-prune:focus::-moz-placeholder{color:#661456}.lg\:focus\:placeholder-prune:focus:-ms-input-placeholder{color:#661456}.lg\:focus\:placeholder-prune:focus::placeholder{color:#661456}.lg\:focus\:placeholder-prune-active:focus::-moz-placeholder{color:#72085d}.lg\:focus\:placeholder-prune-active:focus:-ms-input-placeholder{color:#72085d}.lg\:focus\:placeholder-prune-active:focus::placeholder{color:#72085d}.lg\:focus\:placeholder-sand:focus::-moz-placeholder{color:#d7be88}.lg\:focus\:placeholder-sand:focus:-ms-input-placeholder{color:#d7be88}.lg\:focus\:placeholder-sand:focus::placeholder{color:#d7be88}.lg\:focus\:placeholder-sand-active:focus::-moz-placeholder{color:#dfc181}.lg\:focus\:placeholder-sand-active:focus:-ms-input-placeholder{color:#dfc181}.lg\:focus\:placeholder-sand-active:focus::placeholder{color:#dfc181}.lg\:focus\:placeholder-sandPearl:focus::-moz-placeholder{color:#f0e5d6}.lg\:focus\:placeholder-sandPearl:focus:-ms-input-placeholder{color:#f0e5d6}.lg\:focus\:placeholder-sandPearl:focus::placeholder{color:#f0e5d6}.lg\:focus\:placeholder-sandPearl-active:focus::-moz-placeholder{color:#f2e6d4}.lg\:focus\:placeholder-sandPearl-active:focus:-ms-input-placeholder{color:#f2e6d4}.lg\:focus\:placeholder-sandPearl-active:focus::placeholder{color:#f2e6d4}.lg\:focus\:placeholder-silver:focus::-moz-placeholder{color:#b1b2b4}.lg\:focus\:placeholder-silver:focus:-ms-input-placeholder{color:#b1b2b4}.lg\:focus\:placeholder-silver:focus::placeholder{color:#b1b2b4}.lg\:focus\:placeholder-silver-active:focus::-moz-placeholder{color:#a9afbc}.lg\:focus\:placeholder-silver-active:focus:-ms-input-placeholder{color:#a9afbc}.lg\:focus\:placeholder-silver-active:focus::placeholder{color:#a9afbc}.lg\:focus\:placeholder-skyBlue:focus::-moz-placeholder{color:#98d2d7}.lg\:focus\:placeholder-skyBlue:focus:-ms-input-placeholder{color:#98d2d7}.lg\:focus\:placeholder-skyBlue:focus::placeholder{color:#98d2d7}.lg\:focus\:placeholder-skyBlue-active:focus::-moz-placeholder{color:#91d8de}.lg\:focus\:placeholder-skyBlue-active:focus:-ms-input-placeholder{color:#91d8de}.lg\:focus\:placeholder-skyBlue-active:focus::placeholder{color:#91d8de}.lg\:focus\:placeholder-southSea:focus::-moz-placeholder{color:#9dc9cd}.lg\:focus\:placeholder-southSea:focus:-ms-input-placeholder{color:#9dc9cd}.lg\:focus\:placeholder-southSea:focus::placeholder{color:#9dc9cd}.lg\:focus\:placeholder-southSea-active:focus::-moz-placeholder{color:#95ced5}.lg\:focus\:placeholder-southSea-active:focus:-ms-input-placeholder{color:#95ced5}.lg\:focus\:placeholder-southSea-active:focus::placeholder{color:#95ced5}.lg\:focus\:placeholder-turquoise:focus::-moz-placeholder{color:#14a5c2}.lg\:focus\:placeholder-turquoise:focus:-ms-input-placeholder{color:#14a5c2}.lg\:focus\:placeholder-turquoise:focus::placeholder{color:#14a5c2}.lg\:focus\:placeholder-turquoise-active:focus::-moz-placeholder{color:#0aaccd}.lg\:focus\:placeholder-turquoise-active:focus:-ms-input-placeholder{color:#0aaccd}.lg\:focus\:placeholder-turquoise-active:focus::placeholder{color:#0aaccd}.lg\:focus\:placeholder-waterGreen:focus::-moz-placeholder{color:#007571}.lg\:focus\:placeholder-waterGreen:focus:-ms-input-placeholder{color:#007571}.lg\:focus\:placeholder-waterGreen:focus::placeholder{color:#007571}.lg\:focus\:placeholder-waterGreen-active:focus::-moz-placeholder{color:#00a8a3}.lg\:focus\:placeholder-waterGreen-active:focus:-ms-input-placeholder{color:#00a8a3}.lg\:focus\:placeholder-waterGreen-active:focus::placeholder{color:#00a8a3}.lg\:focus\:placeholder-deepRed:focus::-moz-placeholder{color:#c32222}.lg\:focus\:placeholder-deepRed:focus:-ms-input-placeholder{color:#c32222}.lg\:focus\:placeholder-deepRed:focus::placeholder{color:#c32222}.lg\:focus\:placeholder-deepRed-active:focus::-moz-placeholder{color:#cf1717}.lg\:focus\:placeholder-deepRed-active:focus:-ms-input-placeholder{color:#cf1717}.lg\:focus\:placeholder-deepRed-active:focus::placeholder{color:#cf1717}.lg\:focus\:placeholder-emerald:focus::-moz-placeholder{color:#14a33a}.lg\:focus\:placeholder-emerald:focus:-ms-input-placeholder{color:#14a33a}.lg\:focus\:placeholder-emerald:focus::placeholder{color:#14a33a}.lg\:focus\:placeholder-emerald-active:focus::-moz-placeholder{color:#0bad36}.lg\:focus\:placeholder-emerald-active:focus:-ms-input-placeholder{color:#0bad36}.lg\:focus\:placeholder-emerald-active:focus::placeholder{color:#0bad36}.lg\:focus\:placeholder-greenLight:focus::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.lg\:focus\:placeholder-greenLight:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.lg\:focus\:placeholder-greenLight:focus::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-active:focus::-moz-placeholder{color:#f65f2c}.lg\:focus\:placeholder-orange-active:focus:-ms-input-placeholder{color:#f65f2c}.lg\:focus\:placeholder-orange-active:focus::placeholder{color:#f65f2c}.lg\:focus\:placeholder-red-active:focus::-moz-placeholder{color:#e13737}.lg\:focus\:placeholder-red-active:focus:-ms-input-placeholder{color:#e13737}.lg\:focus\:placeholder-red-active:focus::placeholder{color:#e13737}.lg\:focus\:placeholder-white-active:focus::-moz-placeholder{color:#14a5c2}.lg\:focus\:placeholder-white-active:focus:-ms-input-placeholder{color:#14a5c2}.lg\:focus\:placeholder-white-active:focus::placeholder{color:#14a5c2}.lg\:focus\:placeholder-white-button:focus::-moz-placeholder{color:#fff}.lg\:focus\:placeholder-white-button:focus:-ms-input-placeholder{color:#fff}.lg\:focus\:placeholder-white-button:focus::placeholder{color:#fff}.lg\:focus\:placeholder-white-button-active:focus::-moz-placeholder{color:#fff}.lg\:focus\:placeholder-white-button-active:focus:-ms-input-placeholder{color:#fff}.lg\:focus\:placeholder-white-button-active:focus::placeholder{color:#fff}.lg\:focus\:placeholder-code:focus::-moz-placeholder{color:#3f3d57}.lg\:focus\:placeholder-code:focus:-ms-input-placeholder{color:#3f3d57}.lg\:focus\:placeholder-code:focus::placeholder{color:#3f3d57}.lg\:focus\:placeholder-code-active:focus::-moz-placeholder{color:#37354b}.lg\:focus\:placeholder-code-active:focus:-ms-input-placeholder{color:#37354b}.lg\:focus\:placeholder-code-active:focus::placeholder{color:#37354b}.lg\:focus\:placeholder-gray-lighter:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-lighter:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-lighter:focus::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-lighter-active:focus::-moz-placeholder{color:#ebebeb}.lg\:focus\:placeholder-gray-lighter-active:focus:-ms-input-placeholder{color:#ebebeb}.lg\:focus\:placeholder-gray-lighter-active:focus::placeholder{color:#ebebeb}.lg\:focus\:placeholder-gray-light:focus::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-light:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-light:focus::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-medium:focus::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-medium:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-medium:focus::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-darker:focus::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-darker:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-darker:focus::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-darker-active:focus::-moz-placeholder{color:#14a5c2}.lg\:focus\:placeholder-gray-darker-active:focus:-ms-input-placeholder{color:#14a5c2}.lg\:focus\:placeholder-gray-darker-active:focus::placeholder{color:#14a5c2}.lg\:focus\:placeholder-api-default:focus::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.lg\:focus\:placeholder-api-default:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.lg\:focus\:placeholder-api-default:focus::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-xxl:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-xxl:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-xxl:focus::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.lg\:focus\:placeholder-line-even:focus::-moz-placeholder{color:#f3f6f7}.lg\:focus\:placeholder-line-even:focus:-ms-input-placeholder{color:#f3f6f7}.lg\:focus\:placeholder-line-even:focus::placeholder{color:#f3f6f7}.lg\:placeholder-opacity-0::-moz-placeholder{--placeholder-opacity:0}.lg\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.lg\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.lg\:placeholder-opacity-25::-moz-placeholder{--placeholder-opacity:0.25}.lg\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.lg\:placeholder-opacity-50::-moz-placeholder{--placeholder-opacity:0.5}.lg\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.lg\:placeholder-opacity-75::-moz-placeholder{--placeholder-opacity:0.75}.lg\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.lg\:placeholder-opacity-100::-moz-placeholder{--placeholder-opacity:1}.lg\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.lg\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.lg\:focus\:placeholder-opacity-0:focus::-moz-placeholder{--placeholder-opacity:0}.lg\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.lg\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.lg\:focus\:placeholder-opacity-25:focus::-moz-placeholder{--placeholder-opacity:0.25}.lg\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.lg\:focus\:placeholder-opacity-50:focus::-moz-placeholder{--placeholder-opacity:0.5}.lg\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.lg\:focus\:placeholder-opacity-75:focus::-moz-placeholder{--placeholder-opacity:0.75}.lg\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.lg\:focus\:placeholder-opacity-100:focus::-moz-placeholder{--placeholder-opacity:1}.lg\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.lg\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.lg\:pointer-events-none{pointer-events:none}.lg\:pointer-events-auto{pointer-events:auto}.lg\:static{position:static}.lg\:fixed{position:fixed}.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:sticky{position:-webkit-sticky;position:sticky}.lg\:inset-0{top:0;right:0;bottom:0;left:0}.lg\:inset-1{top:.25rem;right:.25rem;bottom:.25rem;left:.25rem}.lg\:inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.lg\:inset-3{top:.75rem;right:.75rem;bottom:.75rem;left:.75rem}.lg\:inset-4{top:1rem;right:1rem;bottom:1rem;left:1rem}.lg\:inset-5{top:1.25rem;right:1.25rem;bottom:1.25rem;left:1.25rem}.lg\:inset-6{top:1.5rem;right:1.5rem;bottom:1.5rem;left:1.5rem}.lg\:inset-7{top:1.75rem;right:1.75rem;bottom:1.75rem;left:1.75rem}.lg\:inset-8{top:2rem;right:2rem;bottom:2rem;left:2rem}.lg\:inset-9{top:2.25rem;right:2.25rem;bottom:2.25rem;left:2.25rem}.lg\:inset-10{top:2.5rem;right:2.5rem;bottom:2.5rem;left:2.5rem}.lg\:inset-11{top:2.75rem;right:2.75rem;bottom:2.75rem;left:2.75rem}.lg\:inset-12{top:3rem;right:3rem;bottom:3rem;left:3rem}.lg\:inset-15{top:3.75rem;right:3.75rem;bottom:3.75rem;left:3.75rem}.lg\:inset-16{top:4rem;right:4rem;bottom:4rem;left:4rem}.lg\:inset-20{top:5rem;right:5rem;bottom:5rem;left:5rem}.lg\:inset-22{top:5.5rem;right:5.5rem;bottom:5.5rem;left:5.5rem}.lg\:inset-24{top:6rem;right:6rem;bottom:6rem;left:6rem}.lg\:inset-25{top:6.25rem;right:6.25rem;bottom:6.25rem;left:6.25rem}.lg\:inset-26{top:6.5rem;right:6.5rem;bottom:6.5rem;left:6.5rem}.lg\:inset-28{top:8rem;right:8rem;bottom:8rem;left:8rem}.lg\:inset-30{top:8.5rem;right:8.5rem;bottom:8.5rem;left:8.5rem}.lg\:inset-32{top:9rem;right:9rem;bottom:9rem;left:9rem}.lg\:inset-40{top:10rem;right:10rem;bottom:10rem;left:10rem}.lg\:inset-48{top:12rem;right:12rem;bottom:12rem;left:12rem}.lg\:inset-52{top:13rem;right:13rem;bottom:13rem;left:13rem}.lg\:inset-56{top:14rem;right:14rem;bottom:14rem;left:14rem}.lg\:inset-60{top:15rem;right:15rem;bottom:15rem;left:15rem}.lg\:inset-64{top:16rem;right:16rem;bottom:16rem;left:16rem}.lg\:inset-68{top:17rem;right:17rem;bottom:17rem;left:17rem}.lg\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.lg\:inset-px{top:1px;right:1px;bottom:1px;left:1px}.lg\:inset-0\.5{top:.125rem;right:.125rem;bottom:.125rem;left:.125rem}.lg\:inset-1\.5{top:.375rem;right:.375rem;bottom:.375rem;left:.375rem}.lg\:inset-2\.5{top:.625rem;right:.625rem;bottom:.625rem;left:.625rem}.lg\:inset-7\.5{top:1.875rem;right:1.875rem;bottom:1.875rem;left:1.875rem}.lg\:inset-y-0{top:0;bottom:0}.lg\:inset-x-0{right:0;left:0}.lg\:inset-y-1{top:.25rem;bottom:.25rem}.lg\:inset-x-1{right:.25rem;left:.25rem}.lg\:inset-y-2{top:.5rem;bottom:.5rem}.lg\:inset-x-2{right:.5rem;left:.5rem}.lg\:inset-y-3{top:.75rem;bottom:.75rem}.lg\:inset-x-3{right:.75rem;left:.75rem}.lg\:inset-y-4{top:1rem;bottom:1rem}.lg\:inset-x-4{right:1rem;left:1rem}.lg\:inset-y-5{top:1.25rem;bottom:1.25rem}.lg\:inset-x-5{right:1.25rem;left:1.25rem}.lg\:inset-y-6{top:1.5rem;bottom:1.5rem}.lg\:inset-x-6{right:1.5rem;left:1.5rem}.lg\:inset-y-7{top:1.75rem;bottom:1.75rem}.lg\:inset-x-7{right:1.75rem;left:1.75rem}.lg\:inset-y-8{top:2rem;bottom:2rem}.lg\:inset-x-8{right:2rem;left:2rem}.lg\:inset-y-9{top:2.25rem;bottom:2.25rem}.lg\:inset-x-9{right:2.25rem;left:2.25rem}.lg\:inset-y-10{top:2.5rem;bottom:2.5rem}.lg\:inset-x-10{right:2.5rem;left:2.5rem}.lg\:inset-y-11{top:2.75rem;bottom:2.75rem}.lg\:inset-x-11{right:2.75rem;left:2.75rem}.lg\:inset-y-12{top:3rem;bottom:3rem}.lg\:inset-x-12{right:3rem;left:3rem}.lg\:inset-y-15{top:3.75rem;bottom:3.75rem}.lg\:inset-x-15{right:3.75rem;left:3.75rem}.lg\:inset-y-16{top:4rem;bottom:4rem}.lg\:inset-x-16{right:4rem;left:4rem}.lg\:inset-y-20{top:5rem;bottom:5rem}.lg\:inset-x-20{right:5rem;left:5rem}.lg\:inset-y-22{top:5.5rem;bottom:5.5rem}.lg\:inset-x-22{right:5.5rem;left:5.5rem}.lg\:inset-y-24{top:6rem;bottom:6rem}.lg\:inset-x-24{right:6rem;left:6rem}.lg\:inset-y-25{top:6.25rem;bottom:6.25rem}.lg\:inset-x-25{right:6.25rem;left:6.25rem}.lg\:inset-y-26{top:6.5rem;bottom:6.5rem}.lg\:inset-x-26{right:6.5rem;left:6.5rem}.lg\:inset-y-28{top:8rem;bottom:8rem}.lg\:inset-x-28{right:8rem;left:8rem}.lg\:inset-y-30{top:8.5rem;bottom:8.5rem}.lg\:inset-x-30{right:8.5rem;left:8.5rem}.lg\:inset-y-32{top:9rem;bottom:9rem}.lg\:inset-x-32{right:9rem;left:9rem}.lg\:inset-y-40{top:10rem;bottom:10rem}.lg\:inset-x-40{right:10rem;left:10rem}.lg\:inset-y-48{top:12rem;bottom:12rem}.lg\:inset-x-48{right:12rem;left:12rem}.lg\:inset-y-52{top:13rem;bottom:13rem}.lg\:inset-x-52{right:13rem;left:13rem}.lg\:inset-y-56{top:14rem;bottom:14rem}.lg\:inset-x-56{right:14rem;left:14rem}.lg\:inset-y-60{top:15rem;bottom:15rem}.lg\:inset-x-60{right:15rem;left:15rem}.lg\:inset-y-64{top:16rem;bottom:16rem}.lg\:inset-x-64{right:16rem;left:16rem}.lg\:inset-y-68{top:17rem;bottom:17rem}.lg\:inset-x-68{right:17rem;left:17rem}.lg\:inset-y-auto{top:auto;bottom:auto}.lg\:inset-x-auto{right:auto;left:auto}.lg\:inset-y-px{top:1px;bottom:1px}.lg\:inset-x-px{right:1px;left:1px}.lg\:inset-y-0\.5{top:.125rem;bottom:.125rem}.lg\:inset-x-0\.5{right:.125rem;left:.125rem}.lg\:inset-y-1\.5{top:.375rem;bottom:.375rem}.lg\:inset-x-1\.5{right:.375rem;left:.375rem}.lg\:inset-y-2\.5{top:.625rem;bottom:.625rem}.lg\:inset-x-2\.5{right:.625rem;left:.625rem}.lg\:inset-y-7\.5{top:1.875rem;bottom:1.875rem}.lg\:inset-x-7\.5{right:1.875rem;left:1.875rem}.lg\:top-0{top:0}.lg\:right-0{right:0}.lg\:bottom-0{bottom:0}.lg\:left-0{left:0}.lg\:top-1{top:.25rem}.lg\:right-1{right:.25rem}.lg\:bottom-1{bottom:.25rem}.lg\:left-1{left:.25rem}.lg\:top-2{top:.5rem}.lg\:right-2{right:.5rem}.lg\:bottom-2{bottom:.5rem}.lg\:left-2{left:.5rem}.lg\:top-3{top:.75rem}.lg\:right-3{right:.75rem}.lg\:bottom-3{bottom:.75rem}.lg\:left-3{left:.75rem}.lg\:top-4{top:1rem}.lg\:right-4{right:1rem}.lg\:bottom-4{bottom:1rem}.lg\:left-4{left:1rem}.lg\:top-5{top:1.25rem}.lg\:right-5{right:1.25rem}.lg\:bottom-5{bottom:1.25rem}.lg\:left-5{left:1.25rem}.lg\:top-6{top:1.5rem}.lg\:right-6{right:1.5rem}.lg\:bottom-6{bottom:1.5rem}.lg\:left-6{left:1.5rem}.lg\:top-7{top:1.75rem}.lg\:right-7{right:1.75rem}.lg\:bottom-7{bottom:1.75rem}.lg\:left-7{left:1.75rem}.lg\:top-8{top:2rem}.lg\:right-8{right:2rem}.lg\:bottom-8{bottom:2rem}.lg\:left-8{left:2rem}.lg\:top-9{top:2.25rem}.lg\:right-9{right:2.25rem}.lg\:bottom-9{bottom:2.25rem}.lg\:left-9{left:2.25rem}.lg\:top-10{top:2.5rem}.lg\:right-10{right:2.5rem}.lg\:bottom-10{bottom:2.5rem}.lg\:left-10{left:2.5rem}.lg\:top-11{top:2.75rem}.lg\:right-11{right:2.75rem}.lg\:bottom-11{bottom:2.75rem}.lg\:left-11{left:2.75rem}.lg\:top-12{top:3rem}.lg\:right-12{right:3rem}.lg\:bottom-12{bottom:3rem}.lg\:left-12{left:3rem}.lg\:top-15{top:3.75rem}.lg\:right-15{right:3.75rem}.lg\:bottom-15{bottom:3.75rem}.lg\:left-15{left:3.75rem}.lg\:top-16{top:4rem}.lg\:right-16{right:4rem}.lg\:bottom-16{bottom:4rem}.lg\:left-16{left:4rem}.lg\:top-20{top:5rem}.lg\:right-20{right:5rem}.lg\:bottom-20{bottom:5rem}.lg\:left-20{left:5rem}.lg\:top-22{top:5.5rem}.lg\:right-22{right:5.5rem}.lg\:bottom-22{bottom:5.5rem}.lg\:left-22{left:5.5rem}.lg\:top-24{top:6rem}.lg\:right-24{right:6rem}.lg\:bottom-24{bottom:6rem}.lg\:left-24{left:6rem}.lg\:top-25{top:6.25rem}.lg\:right-25{right:6.25rem}.lg\:bottom-25{bottom:6.25rem}.lg\:left-25{left:6.25rem}.lg\:top-26{top:6.5rem}.lg\:right-26{right:6.5rem}.lg\:bottom-26{bottom:6.5rem}.lg\:left-26{left:6.5rem}.lg\:top-28{top:8rem}.lg\:right-28{right:8rem}.lg\:bottom-28{bottom:8rem}.lg\:left-28{left:8rem}.lg\:top-30{top:8.5rem}.lg\:right-30{right:8.5rem}.lg\:bottom-30{bottom:8.5rem}.lg\:left-30{left:8.5rem}.lg\:top-32{top:9rem}.lg\:right-32{right:9rem}.lg\:bottom-32{bottom:9rem}.lg\:left-32{left:9rem}.lg\:top-40{top:10rem}.lg\:right-40{right:10rem}.lg\:bottom-40{bottom:10rem}.lg\:left-40{left:10rem}.lg\:top-48{top:12rem}.lg\:right-48{right:12rem}.lg\:bottom-48{bottom:12rem}.lg\:left-48{left:12rem}.lg\:top-52{top:13rem}.lg\:right-52{right:13rem}.lg\:bottom-52{bottom:13rem}.lg\:left-52{left:13rem}.lg\:top-56{top:14rem}.lg\:right-56{right:14rem}.lg\:bottom-56{bottom:14rem}.lg\:left-56{left:14rem}.lg\:top-60{top:15rem}.lg\:right-60{right:15rem}.lg\:bottom-60{bottom:15rem}.lg\:left-60{left:15rem}.lg\:top-64{top:16rem}.lg\:right-64{right:16rem}.lg\:bottom-64{bottom:16rem}.lg\:left-64{left:16rem}.lg\:top-68{top:17rem}.lg\:right-68{right:17rem}.lg\:bottom-68{bottom:17rem}.lg\:left-68{left:17rem}.lg\:top-auto{top:auto}.lg\:right-auto{right:auto}.lg\:bottom-auto{bottom:auto}.lg\:left-auto{left:auto}.lg\:top-px{top:1px}.lg\:right-px{right:1px}.lg\:bottom-px{bottom:1px}.lg\:left-px{left:1px}.lg\:top-0\.5{top:.125rem}.lg\:right-0\.5{right:.125rem}.lg\:bottom-0\.5{bottom:.125rem}.lg\:left-0\.5{left:.125rem}.lg\:top-1\.5{top:.375rem}.lg\:right-1\.5{right:.375rem}.lg\:bottom-1\.5{bottom:.375rem}.lg\:left-1\.5{left:.375rem}.lg\:top-2\.5{top:.625rem}.lg\:right-2\.5{right:.625rem}.lg\:bottom-2\.5{bottom:.625rem}.lg\:left-2\.5{left:.625rem}.lg\:top-7\.5{top:1.875rem}.lg\:right-7\.5{right:1.875rem}.lg\:bottom-7\.5{bottom:1.875rem}.lg\:left-7\.5{left:1.875rem}.lg\:resize-none{resize:none}.lg\:resize-y{resize:vertical}.lg\:resize-x{resize:horizontal}.lg\:resize{resize:both}.lg\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.lg\:shadow-sm{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.lg\:shadow{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.lg\:shadow-md{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.lg\:shadow-lg{box-shadow:0 0 20px rgba(0,0,0,.15)}.lg\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:shadow-inner{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.lg\:shadow-outline{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.lg\:shadow-none{box-shadow:none}.lg\:shadow-strong{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.lg\:shadow-top{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.lg\:shadow-symbol{box-shadow:0 1px 2px rgba(10,16,20,.24)}.lg\:shadow-sidebar{box-shadow:0 0 25px rgba(0,0,0,.1)}.lg\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.lg\:hover\:shadow-sm:hover{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.lg\:hover\:shadow:hover{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.lg\:hover\:shadow-md:hover{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.lg\:hover\:shadow-lg:hover{box-shadow:0 0 20px rgba(0,0,0,.15)}.lg\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:hover\:shadow-inner:hover{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.lg\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.lg\:hover\:shadow-none:hover{box-shadow:none}.lg\:hover\:shadow-strong:hover{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.lg\:hover\:shadow-top:hover{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.lg\:hover\:shadow-symbol:hover{box-shadow:0 1px 2px rgba(10,16,20,.24)}.lg\:hover\:shadow-sidebar:hover{box-shadow:0 0 25px rgba(0,0,0,.1)}.lg\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.lg\:focus\:shadow-sm:focus{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.lg\:focus\:shadow:focus{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.lg\:focus\:shadow-md:focus{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.lg\:focus\:shadow-lg:focus{box-shadow:0 0 20px rgba(0,0,0,.15)}.lg\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:focus\:shadow-inner:focus{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.lg\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.lg\:focus\:shadow-none:focus{box-shadow:none}.lg\:focus\:shadow-strong:focus{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.lg\:focus\:shadow-top:focus{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.lg\:focus\:shadow-symbol:focus{box-shadow:0 1px 2px rgba(10,16,20,.24)}.lg\:focus\:shadow-sidebar:focus{box-shadow:0 0 25px rgba(0,0,0,.1)}.lg\:fill-current{fill:currentColor}.lg\:fill-transparent{fill:transparent}.lg\:stroke-current{stroke:currentColor}.lg\:stroke-0{stroke-width:0}.lg\:stroke-1{stroke-width:1}.lg\:stroke-2{stroke-width:2}.lg\:table-auto{table-layout:auto}.lg\:table-fixed{table-layout:fixed}.lg\:text-left{text-align:left}.lg\:text-center{text-align:center}.lg\:text-right{text-align:right}.lg\:text-justify{text-align:justify}.lg\:text-transparent{color:transparent}.lg\:text-current{color:currentColor}.lg\:text-black{color:#000}.lg\:text-white{color:#fff}.lg\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.lg\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.lg\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.lg\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.lg\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.lg\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.lg\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.lg\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.lg\:text-gray,.lg\:text-gray-DEFAULT{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:text-red{color:#d64343}.lg\:text-orange{color:#eb6437}.lg\:text-yellow{color:#f8da30}.lg\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.lg\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.lg\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.lg\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.lg\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.lg\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.lg\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.lg\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.lg\:text-green,.lg\:text-green-DEFAULT{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.lg\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.lg\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.lg\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.lg\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.lg\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.lg\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.lg\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.lg\:text-teal,.lg\:text-teal-DEFAULT{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:text-blue-50{color:#d1eaff}.lg\:text-blue-100{color:#a8d7ff}.lg\:text-blue-200{color:#80c4ff}.lg\:text-blue-300{color:#57b0ff}.lg\:text-blue-400{color:#2e9dff}.lg\:text-blue-500{color:#058aff}.lg\:text-blue-600{color:#0075db}.lg\:text-blue-700{color:#005fb3}.lg\:text-blue-800{color:#00498a}.lg\:text-blue-900{color:#003461}.lg\:text-blue,.lg\:text-blue-DEFAULT{color:#0075db}.lg\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.lg\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.lg\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.lg\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.lg\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.lg\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.lg\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.lg\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.lg\:text-indigo,.lg\:text-indigo-DEFAULT{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.lg\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.lg\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.lg\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.lg\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.lg\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.lg\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.lg\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.lg\:text-purple,.lg\:text-purple-DEFAULT{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:text-pink{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.lg\:text-inherit{color:inherit}.lg\:text-amber{color:#d78737}.lg\:text-amber-active{color:#e3872b}.lg\:text-ardoise{color:#596a82}.lg\:text-ardoise-active{color:#476794}.lg\:text-blue-active{color:#14a5c2}.lg\:text-lightBlue,.lg\:text-lightBlue-active{color:rgba(0,85,138,.1)}.lg\:text-deepBlue{color:#0e346c}.lg\:text-deepBlue-active{color:#0a3f8f}.lg\:text-gold{color:#bd9e56}.lg\:text-gold-active{color:#c9a34a}.lg\:text-grenadine{color:#c35078}.lg\:text-grenadine-active{color:#cf4475}.lg\:text-kiwi{color:#9a9f1e}.lg\:text-kiwi-active{color:#a3a815}.lg\:text-lilas{color:#7ea1d3}.lg\:text-lilas-active{color:#75a0db}.lg\:text-mahogany{color:#57142e}.lg\:text-mahogany-active{color:#610a2b}.lg\:text-ocher{color:#c29614}.lg\:text-ocher-active{color:#cd9c0a}.lg\:text-pine{color:#144d52}.lg\:text-pine-active{color:#0a555c}.lg\:text-platinum,.lg\:text-platinum-active{color:#000}.lg\:text-prune{color:#661456}.lg\:text-prune-active{color:#72085d}.lg\:text-sand{color:#d7be88}.lg\:text-sand-active{color:#dfc181}.lg\:text-sandPearl{color:#f0e5d6}.lg\:text-sandPearl-active{color:#f2e6d4}.lg\:text-silver{color:#b1b2b4}.lg\:text-silver-active{color:#a9afbc}.lg\:text-skyBlue{color:#98d2d7}.lg\:text-skyBlue-active{color:#91d8de}.lg\:text-southSea{color:#9dc9cd}.lg\:text-southSea-active{color:#95ced5}.lg\:text-turquoise{color:#14a5c2}.lg\:text-turquoise-active{color:#0aaccd}.lg\:text-waterGreen{color:#007571}.lg\:text-waterGreen-active{color:#00a8a3}.lg\:text-deepRed{color:#c32222}.lg\:text-deepRed-active{color:#cf1717}.lg\:text-emerald{color:#14a33a}.lg\:text-emerald-active{color:#0bad36}.lg\:text-greenLight{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.lg\:text-orange-active{color:#f65f2c}.lg\:text-red-active{color:#e13737}.lg\:text-white-active{color:#14a5c2}.lg\:text-white-button,.lg\:text-white-button-active{color:#fff}.lg\:text-code{color:#3f3d57}.lg\:text-code-active{color:#37354b}.lg\:text-gray-lighter{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.lg\:text-gray-lighter-active{color:#ebebeb}.lg\:text-gray-light{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.lg\:text-gray-medium{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.lg\:text-gray-darker{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.lg\:text-gray-darker-active{color:#14a5c2}.lg\:text-api-default{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.lg\:text-gray-xxl{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.lg\:text-line-even{color:#f3f6f7}.lg\:hover\:text-transparent:hover{color:transparent}.lg\:hover\:text-current:hover{color:currentColor}.lg\:hover\:text-black:hover{color:#000}.lg\:hover\:text-white:hover{color:#fff}.lg\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.lg\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.lg\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.lg\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.lg\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.lg\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.lg\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.lg\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.lg\:hover\:text-gray-DEFAULT:hover,.lg\:hover\:text-gray:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:hover\:text-red:hover{color:#d64343}.lg\:hover\:text-orange:hover{color:#eb6437}.lg\:hover\:text-yellow:hover{color:#f8da30}.lg\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.lg\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.lg\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.lg\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.lg\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.lg\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.lg\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.lg\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.lg\:hover\:text-green-DEFAULT:hover,.lg\:hover\:text-green:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.lg\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.lg\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.lg\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.lg\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.lg\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.lg\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.lg\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.lg\:hover\:text-teal-DEFAULT:hover,.lg\:hover\:text-teal:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:hover\:text-blue-50:hover{color:#d1eaff}.lg\:hover\:text-blue-100:hover{color:#a8d7ff}.lg\:hover\:text-blue-200:hover{color:#80c4ff}.lg\:hover\:text-blue-300:hover{color:#57b0ff}.lg\:hover\:text-blue-400:hover{color:#2e9dff}.lg\:hover\:text-blue-500:hover{color:#058aff}.lg\:hover\:text-blue-600:hover{color:#0075db}.lg\:hover\:text-blue-700:hover{color:#005fb3}.lg\:hover\:text-blue-800:hover{color:#00498a}.lg\:hover\:text-blue-900:hover{color:#003461}.lg\:hover\:text-blue-DEFAULT:hover,.lg\:hover\:text-blue:hover{color:#0075db}.lg\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.lg\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.lg\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.lg\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.lg\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.lg\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.lg\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.lg\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.lg\:hover\:text-indigo-DEFAULT:hover,.lg\:hover\:text-indigo:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.lg\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.lg\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.lg\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.lg\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.lg\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.lg\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.lg\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.lg\:hover\:text-purple-DEFAULT:hover,.lg\:hover\:text-purple:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:hover\:text-pink:hover{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.lg\:hover\:text-inherit:hover{color:inherit}.lg\:hover\:text-amber:hover{color:#d78737}.lg\:hover\:text-amber-active:hover{color:#e3872b}.lg\:hover\:text-ardoise:hover{color:#596a82}.lg\:hover\:text-ardoise-active:hover{color:#476794}.lg\:hover\:text-blue-active:hover{color:#14a5c2}.lg\:hover\:text-lightBlue-active:hover,.lg\:hover\:text-lightBlue:hover{color:rgba(0,85,138,.1)}.lg\:hover\:text-deepBlue:hover{color:#0e346c}.lg\:hover\:text-deepBlue-active:hover{color:#0a3f8f}.lg\:hover\:text-gold:hover{color:#bd9e56}.lg\:hover\:text-gold-active:hover{color:#c9a34a}.lg\:hover\:text-grenadine:hover{color:#c35078}.lg\:hover\:text-grenadine-active:hover{color:#cf4475}.lg\:hover\:text-kiwi:hover{color:#9a9f1e}.lg\:hover\:text-kiwi-active:hover{color:#a3a815}.lg\:hover\:text-lilas:hover{color:#7ea1d3}.lg\:hover\:text-lilas-active:hover{color:#75a0db}.lg\:hover\:text-mahogany:hover{color:#57142e}.lg\:hover\:text-mahogany-active:hover{color:#610a2b}.lg\:hover\:text-ocher:hover{color:#c29614}.lg\:hover\:text-ocher-active:hover{color:#cd9c0a}.lg\:hover\:text-pine:hover{color:#144d52}.lg\:hover\:text-pine-active:hover{color:#0a555c}.lg\:hover\:text-platinum-active:hover,.lg\:hover\:text-platinum:hover{color:#000}.lg\:hover\:text-prune:hover{color:#661456}.lg\:hover\:text-prune-active:hover{color:#72085d}.lg\:hover\:text-sand:hover{color:#d7be88}.lg\:hover\:text-sand-active:hover{color:#dfc181}.lg\:hover\:text-sandPearl:hover{color:#f0e5d6}.lg\:hover\:text-sandPearl-active:hover{color:#f2e6d4}.lg\:hover\:text-silver:hover{color:#b1b2b4}.lg\:hover\:text-silver-active:hover{color:#a9afbc}.lg\:hover\:text-skyBlue:hover{color:#98d2d7}.lg\:hover\:text-skyBlue-active:hover{color:#91d8de}.lg\:hover\:text-southSea:hover{color:#9dc9cd}.lg\:hover\:text-southSea-active:hover{color:#95ced5}.lg\:hover\:text-turquoise:hover{color:#14a5c2}.lg\:hover\:text-turquoise-active:hover{color:#0aaccd}.lg\:hover\:text-waterGreen:hover{color:#007571}.lg\:hover\:text-waterGreen-active:hover{color:#00a8a3}.lg\:hover\:text-deepRed:hover{color:#c32222}.lg\:hover\:text-deepRed-active:hover{color:#cf1717}.lg\:hover\:text-emerald:hover{color:#14a33a}.lg\:hover\:text-emerald-active:hover{color:#0bad36}.lg\:hover\:text-greenLight:hover{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.lg\:hover\:text-orange-active:hover{color:#f65f2c}.lg\:hover\:text-red-active:hover{color:#e13737}.lg\:hover\:text-white-active:hover{color:#14a5c2}.lg\:hover\:text-white-button-active:hover,.lg\:hover\:text-white-button:hover{color:#fff}.lg\:hover\:text-code:hover{color:#3f3d57}.lg\:hover\:text-code-active:hover{color:#37354b}.lg\:hover\:text-gray-lighter:hover{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.lg\:hover\:text-gray-lighter-active:hover{color:#ebebeb}.lg\:hover\:text-gray-light:hover{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.lg\:hover\:text-gray-medium:hover{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.lg\:hover\:text-gray-darker:hover{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.lg\:hover\:text-gray-darker-active:hover{color:#14a5c2}.lg\:hover\:text-api-default:hover{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.lg\:hover\:text-gray-xxl:hover{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.lg\:hover\:text-line-even:hover{color:#f3f6f7}.lg\:focus\:text-transparent:focus{color:transparent}.lg\:focus\:text-current:focus{color:currentColor}.lg\:focus\:text-black:focus{color:#000}.lg\:focus\:text-white:focus{color:#fff}.lg\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.lg\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.lg\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.lg\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.lg\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.lg\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.lg\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.lg\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.lg\:focus\:text-gray-DEFAULT:focus,.lg\:focus\:text-gray:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:focus\:text-red:focus{color:#d64343}.lg\:focus\:text-orange:focus{color:#eb6437}.lg\:focus\:text-yellow:focus{color:#f8da30}.lg\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.lg\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.lg\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.lg\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.lg\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.lg\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.lg\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.lg\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.lg\:focus\:text-green-DEFAULT:focus,.lg\:focus\:text-green:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.lg\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.lg\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.lg\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.lg\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.lg\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.lg\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.lg\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.lg\:focus\:text-teal-DEFAULT:focus,.lg\:focus\:text-teal:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:focus\:text-blue-50:focus{color:#d1eaff}.lg\:focus\:text-blue-100:focus{color:#a8d7ff}.lg\:focus\:text-blue-200:focus{color:#80c4ff}.lg\:focus\:text-blue-300:focus{color:#57b0ff}.lg\:focus\:text-blue-400:focus{color:#2e9dff}.lg\:focus\:text-blue-500:focus{color:#058aff}.lg\:focus\:text-blue-600:focus{color:#0075db}.lg\:focus\:text-blue-700:focus{color:#005fb3}.lg\:focus\:text-blue-800:focus{color:#00498a}.lg\:focus\:text-blue-900:focus{color:#003461}.lg\:focus\:text-blue-DEFAULT:focus,.lg\:focus\:text-blue:focus{color:#0075db}.lg\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.lg\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.lg\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.lg\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.lg\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.lg\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.lg\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.lg\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.lg\:focus\:text-indigo-DEFAULT:focus,.lg\:focus\:text-indigo:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.lg\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.lg\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.lg\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.lg\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.lg\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.lg\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.lg\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.lg\:focus\:text-purple-DEFAULT:focus,.lg\:focus\:text-purple:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:focus\:text-pink:focus{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.lg\:focus\:text-inherit:focus{color:inherit}.lg\:focus\:text-amber:focus{color:#d78737}.lg\:focus\:text-amber-active:focus{color:#e3872b}.lg\:focus\:text-ardoise:focus{color:#596a82}.lg\:focus\:text-ardoise-active:focus{color:#476794}.lg\:focus\:text-blue-active:focus{color:#14a5c2}.lg\:focus\:text-lightBlue-active:focus,.lg\:focus\:text-lightBlue:focus{color:rgba(0,85,138,.1)}.lg\:focus\:text-deepBlue:focus{color:#0e346c}.lg\:focus\:text-deepBlue-active:focus{color:#0a3f8f}.lg\:focus\:text-gold:focus{color:#bd9e56}.lg\:focus\:text-gold-active:focus{color:#c9a34a}.lg\:focus\:text-grenadine:focus{color:#c35078}.lg\:focus\:text-grenadine-active:focus{color:#cf4475}.lg\:focus\:text-kiwi:focus{color:#9a9f1e}.lg\:focus\:text-kiwi-active:focus{color:#a3a815}.lg\:focus\:text-lilas:focus{color:#7ea1d3}.lg\:focus\:text-lilas-active:focus{color:#75a0db}.lg\:focus\:text-mahogany:focus{color:#57142e}.lg\:focus\:text-mahogany-active:focus{color:#610a2b}.lg\:focus\:text-ocher:focus{color:#c29614}.lg\:focus\:text-ocher-active:focus{color:#cd9c0a}.lg\:focus\:text-pine:focus{color:#144d52}.lg\:focus\:text-pine-active:focus{color:#0a555c}.lg\:focus\:text-platinum-active:focus,.lg\:focus\:text-platinum:focus{color:#000}.lg\:focus\:text-prune:focus{color:#661456}.lg\:focus\:text-prune-active:focus{color:#72085d}.lg\:focus\:text-sand:focus{color:#d7be88}.lg\:focus\:text-sand-active:focus{color:#dfc181}.lg\:focus\:text-sandPearl:focus{color:#f0e5d6}.lg\:focus\:text-sandPearl-active:focus{color:#f2e6d4}.lg\:focus\:text-silver:focus{color:#b1b2b4}.lg\:focus\:text-silver-active:focus{color:#a9afbc}.lg\:focus\:text-skyBlue:focus{color:#98d2d7}.lg\:focus\:text-skyBlue-active:focus{color:#91d8de}.lg\:focus\:text-southSea:focus{color:#9dc9cd}.lg\:focus\:text-southSea-active:focus{color:#95ced5}.lg\:focus\:text-turquoise:focus{color:#14a5c2}.lg\:focus\:text-turquoise-active:focus{color:#0aaccd}.lg\:focus\:text-waterGreen:focus{color:#007571}.lg\:focus\:text-waterGreen-active:focus{color:#00a8a3}.lg\:focus\:text-deepRed:focus{color:#c32222}.lg\:focus\:text-deepRed-active:focus{color:#cf1717}.lg\:focus\:text-emerald:focus{color:#14a33a}.lg\:focus\:text-emerald-active:focus{color:#0bad36}.lg\:focus\:text-greenLight:focus{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.lg\:focus\:text-orange-active:focus{color:#f65f2c}.lg\:focus\:text-red-active:focus{color:#e13737}.lg\:focus\:text-white-active:focus{color:#14a5c2}.lg\:focus\:text-white-button-active:focus,.lg\:focus\:text-white-button:focus{color:#fff}.lg\:focus\:text-code:focus{color:#3f3d57}.lg\:focus\:text-code-active:focus{color:#37354b}.lg\:focus\:text-gray-lighter:focus{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.lg\:focus\:text-gray-lighter-active:focus{color:#ebebeb}.lg\:focus\:text-gray-light:focus{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.lg\:focus\:text-gray-medium:focus{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.lg\:focus\:text-gray-darker:focus{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.lg\:focus\:text-gray-darker-active:focus{color:#14a5c2}.lg\:focus\:text-api-default:focus{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.lg\:focus\:text-gray-xxl:focus{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.lg\:focus\:text-line-even:focus{color:#f3f6f7}.lg\:text-opacity-0{--text-opacity:0}.lg\:text-opacity-25{--text-opacity:0.25}.lg\:text-opacity-50{--text-opacity:0.5}.lg\:text-opacity-75{--text-opacity:0.75}.lg\:text-opacity-100{--text-opacity:1}.lg\:hover\:text-opacity-0:hover{--text-opacity:0}.lg\:hover\:text-opacity-25:hover{--text-opacity:0.25}.lg\:hover\:text-opacity-50:hover{--text-opacity:0.5}.lg\:hover\:text-opacity-75:hover{--text-opacity:0.75}.lg\:hover\:text-opacity-100:hover{--text-opacity:1}.lg\:focus\:text-opacity-0:focus{--text-opacity:0}.lg\:focus\:text-opacity-25:focus{--text-opacity:0.25}.lg\:focus\:text-opacity-50:focus{--text-opacity:0.5}.lg\:focus\:text-opacity-75:focus{--text-opacity:0.75}.lg\:focus\:text-opacity-100:focus{--text-opacity:1}.lg\:italic{font-style:italic}.lg\:not-italic{font-style:normal}.lg\:uppercase{text-transform:uppercase}.lg\:lowercase{text-transform:lowercase}.lg\:capitalize{text-transform:capitalize}.lg\:normal-case{text-transform:none}.lg\:underline{text-decoration:underline}.lg\:line-through{text-decoration:line-through}.lg\:no-underline{text-decoration:none}.lg\:hover\:underline:hover{text-decoration:underline}.lg\:hover\:line-through:hover{text-decoration:line-through}.lg\:hover\:no-underline:hover{text-decoration:none}.lg\:focus\:underline:focus{text-decoration:underline}.lg\:focus\:line-through:focus{text-decoration:line-through}.lg\:focus\:no-underline:focus{text-decoration:none}.lg\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.lg\:diagonal-fractions,.lg\:lining-nums,.lg\:oldstyle-nums,.lg\:ordinal,.lg\:proportional-nums,.lg\:slashed-zero,.lg\:stacked-fractions,.lg\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/);font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.lg\:normal-nums{font-variant-numeric:normal}.lg\:ordinal{--font-variant-numeric-ordinal:ordinal}.lg\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.lg\:lining-nums{--font-variant-numeric-figure:lining-nums}.lg\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.lg\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.lg\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.lg\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.lg\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.lg\:tracking-tighter{letter-spacing:-.05em}.lg\:tracking-tight{letter-spacing:-.025em}.lg\:tracking-normal{letter-spacing:0}.lg\:tracking-wide{letter-spacing:.025em}.lg\:tracking-wider{letter-spacing:.05em}.lg\:tracking-widest{letter-spacing:.1em}.lg\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lg\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.lg\:select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.lg\:select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.lg\:align-baseline{vertical-align:baseline}.lg\:align-top{vertical-align:top}.lg\:align-middle{vertical-align:middle}.lg\:align-bottom{vertical-align:bottom}.lg\:align-text-top{vertical-align:text-top}.lg\:align-text-bottom{vertical-align:text-bottom}.lg\:visible{visibility:visible}.lg\:invisible{visibility:hidden}.lg\:whitespace-normal{white-space:normal}.lg\:whitespace-no-wrap{white-space:nowrap}.lg\:whitespace-pre{white-space:pre}.lg\:whitespace-pre-line{white-space:pre-line}.lg\:whitespace-pre-wrap{white-space:pre-wrap}.lg\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.lg\:break-words{word-wrap:break-word;overflow-wrap:break-word}.lg\:break-all{word-break:break-all}.lg\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lg\:w-0{width:0}.lg\:w-1{width:.25rem}.lg\:w-2{width:.5rem}.lg\:w-3{width:.75rem}.lg\:w-4{width:1rem}.lg\:w-5{width:1.25rem}.lg\:w-6{width:1.5rem}.lg\:w-7{width:1.75rem}.lg\:w-8{width:2rem}.lg\:w-9{width:2.25rem}.lg\:w-10{width:2.5rem}.lg\:w-11{width:2.75rem}.lg\:w-12{width:3rem}.lg\:w-15{width:3.75rem}.lg\:w-16{width:4rem}.lg\:w-20{width:5rem}.lg\:w-22{width:5.5rem}.lg\:w-24{width:6rem}.lg\:w-25{width:6.25rem}.lg\:w-26{width:6.5rem}.lg\:w-28{width:8rem}.lg\:w-30{width:8.5rem}.lg\:w-32{width:9rem}.lg\:w-40{width:10rem}.lg\:w-48{width:12rem}.lg\:w-52{width:13rem}.lg\:w-56{width:14rem}.lg\:w-60{width:15rem}.lg\:w-64{width:16rem}.lg\:w-68{width:17rem}.lg\:w-auto{width:auto}.lg\:w-px{width:1px}.lg\:w-0\.5{width:.125rem}.lg\:w-1\.5{width:.375rem}.lg\:w-2\.5{width:.625rem}.lg\:w-7\.5{width:1.875rem}.lg\:w-1\/2{width:50%}.lg\:w-1\/3{width:33.333333%}.lg\:w-2\/3{width:66.666667%}.lg\:w-1\/4{width:25%}.lg\:w-2\/4{width:50%}.lg\:w-3\/4{width:75%}.lg\:w-1\/5{width:20%}.lg\:w-2\/5{width:40%}.lg\:w-3\/5{width:60%}.lg\:w-4\/5{width:80%}.lg\:w-1\/6{width:16.666667%}.lg\:w-2\/6{width:33.333333%}.lg\:w-3\/6{width:50%}.lg\:w-4\/6{width:66.666667%}.lg\:w-5\/6{width:83.333333%}.lg\:w-1\/12{width:8.333333%}.lg\:w-2\/12{width:16.666667%}.lg\:w-3\/12{width:25%}.lg\:w-4\/12{width:33.333333%}.lg\:w-5\/12{width:41.666667%}.lg\:w-6\/12{width:50%}.lg\:w-7\/12{width:58.333333%}.lg\:w-8\/12{width:66.666667%}.lg\:w-9\/12{width:75%}.lg\:w-10\/12{width:83.333333%}.lg\:w-11\/12{width:91.666667%}.lg\:w-full{width:100%}.lg\:w-screen{width:100vw}.lg\:w-3\/10{width:30%}.lg\:w-7\/10{width:70%}.lg\:w-9\/10{width:90%}.lg\:w-12\/25{width:48%}.lg\:z-0{z-index:0}.lg\:z-1{z-index:1}.lg\:z-2{z-index:2}.lg\:z-3{z-index:3}.lg\:z-4{z-index:4}.lg\:z-5{z-index:5}.lg\:z-6{z-index:6}.lg\:z-10{z-index:10}.lg\:z-20{z-index:20}.lg\:z-30{z-index:30}.lg\:z-40{z-index:40}.lg\:z-50{z-index:50}.lg\:z-auto{z-index:auto}.lg\:gap-0{grid-gap:0;gap:0}.lg\:gap-1{grid-gap:.25rem;gap:.25rem}.lg\:gap-2{grid-gap:.5rem;gap:.5rem}.lg\:gap-3{grid-gap:.75rem;gap:.75rem}.lg\:gap-4{grid-gap:1rem;gap:1rem}.lg\:gap-5{grid-gap:1.25rem;gap:1.25rem}.lg\:gap-6{grid-gap:1.5rem;gap:1.5rem}.lg\:gap-7{grid-gap:1.75rem;gap:1.75rem}.lg\:gap-8{grid-gap:2rem;gap:2rem}.lg\:gap-9{grid-gap:2.25rem;gap:2.25rem}.lg\:gap-10{grid-gap:2.5rem;gap:2.5rem}.lg\:gap-11{grid-gap:2.75rem;gap:2.75rem}.lg\:gap-12{grid-gap:3rem;gap:3rem}.lg\:gap-15{grid-gap:3.75rem;gap:3.75rem}.lg\:gap-16{grid-gap:4rem;gap:4rem}.lg\:gap-20{grid-gap:5rem;gap:5rem}.lg\:gap-22{grid-gap:5.5rem;gap:5.5rem}.lg\:gap-24{grid-gap:6rem;gap:6rem}.lg\:gap-25{grid-gap:6.25rem;gap:6.25rem}.lg\:gap-26{grid-gap:6.5rem;gap:6.5rem}.lg\:gap-28{grid-gap:8rem;gap:8rem}.lg\:gap-30{grid-gap:8.5rem;gap:8.5rem}.lg\:gap-32{grid-gap:9rem;gap:9rem}.lg\:gap-40{grid-gap:10rem;gap:10rem}.lg\:gap-48{grid-gap:12rem;gap:12rem}.lg\:gap-52{grid-gap:13rem;gap:13rem}.lg\:gap-56{grid-gap:14rem;gap:14rem}.lg\:gap-60{grid-gap:15rem;gap:15rem}.lg\:gap-64{grid-gap:16rem;gap:16rem}.lg\:gap-68{grid-gap:17rem;gap:17rem}.lg\:gap-px{grid-gap:1px;gap:1px}.lg\:gap-0\.5{grid-gap:.125rem;gap:.125rem}.lg\:gap-1\.5{grid-gap:.375rem;gap:.375rem}.lg\:gap-2\.5{grid-gap:.625rem;gap:.625rem}.lg\:gap-7\.5{grid-gap:1.875rem;gap:1.875rem}.lg\:col-gap-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.lg\:col-gap-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.lg\:col-gap-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.lg\:col-gap-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.lg\:col-gap-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.lg\:col-gap-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.lg\:col-gap-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.lg\:col-gap-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.lg\:col-gap-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.lg\:col-gap-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.lg\:col-gap-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.lg\:col-gap-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.lg\:col-gap-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.lg\:col-gap-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.lg\:col-gap-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.lg\:col-gap-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.lg\:col-gap-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.lg\:col-gap-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.lg\:col-gap-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.lg\:col-gap-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.lg\:col-gap-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.lg\:col-gap-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.lg\:col-gap-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.lg\:col-gap-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.lg\:col-gap-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.lg\:col-gap-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.lg\:col-gap-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.lg\:col-gap-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.lg\:col-gap-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.lg\:col-gap-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.lg\:col-gap-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.lg\:col-gap-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.lg\:col-gap-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.lg\:col-gap-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.lg\:col-gap-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.lg\:gap-x-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.lg\:gap-x-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.lg\:gap-x-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.lg\:gap-x-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.lg\:gap-x-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.lg\:gap-x-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.lg\:gap-x-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.lg\:gap-x-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.lg\:gap-x-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.lg\:gap-x-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.lg\:gap-x-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.lg\:gap-x-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.lg\:gap-x-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.lg\:gap-x-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.lg\:gap-x-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.lg\:gap-x-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.lg\:gap-x-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.lg\:gap-x-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.lg\:gap-x-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.lg\:gap-x-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.lg\:gap-x-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.lg\:gap-x-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.lg\:gap-x-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.lg\:gap-x-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.lg\:gap-x-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.lg\:gap-x-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.lg\:gap-x-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.lg\:gap-x-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.lg\:gap-x-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.lg\:gap-x-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.lg\:gap-x-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.lg\:gap-x-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.lg\:gap-x-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.lg\:gap-x-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.lg\:gap-x-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.lg\:row-gap-0{grid-row-gap:0;row-gap:0}.lg\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.lg\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.lg\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.lg\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.lg\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.lg\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.lg\:row-gap-7{grid-row-gap:1.75rem;row-gap:1.75rem}.lg\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.lg\:row-gap-9{grid-row-gap:2.25rem;row-gap:2.25rem}.lg\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.lg\:row-gap-11{grid-row-gap:2.75rem;row-gap:2.75rem}.lg\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.lg\:row-gap-15{grid-row-gap:3.75rem;row-gap:3.75rem}.lg\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.lg\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.lg\:row-gap-22{grid-row-gap:5.5rem;row-gap:5.5rem}.lg\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.lg\:row-gap-25{grid-row-gap:6.25rem;row-gap:6.25rem}.lg\:row-gap-26{grid-row-gap:6.5rem;row-gap:6.5rem}.lg\:row-gap-28{grid-row-gap:8rem;row-gap:8rem}.lg\:row-gap-30{grid-row-gap:8.5rem;row-gap:8.5rem}.lg\:row-gap-32{grid-row-gap:9rem;row-gap:9rem}.lg\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.lg\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.lg\:row-gap-52{grid-row-gap:13rem;row-gap:13rem}.lg\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.lg\:row-gap-60{grid-row-gap:15rem;row-gap:15rem}.lg\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.lg\:row-gap-68{grid-row-gap:17rem;row-gap:17rem}.lg\:row-gap-px{grid-row-gap:1px;row-gap:1px}.lg\:row-gap-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.lg\:row-gap-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.lg\:row-gap-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.lg\:row-gap-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.lg\:gap-y-0{grid-row-gap:0;row-gap:0}.lg\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.lg\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.lg\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.lg\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.lg\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.lg\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.lg\:gap-y-7{grid-row-gap:1.75rem;row-gap:1.75rem}.lg\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.lg\:gap-y-9{grid-row-gap:2.25rem;row-gap:2.25rem}.lg\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.lg\:gap-y-11{grid-row-gap:2.75rem;row-gap:2.75rem}.lg\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.lg\:gap-y-15{grid-row-gap:3.75rem;row-gap:3.75rem}.lg\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.lg\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.lg\:gap-y-22{grid-row-gap:5.5rem;row-gap:5.5rem}.lg\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.lg\:gap-y-25{grid-row-gap:6.25rem;row-gap:6.25rem}.lg\:gap-y-26{grid-row-gap:6.5rem;row-gap:6.5rem}.lg\:gap-y-28{grid-row-gap:8rem;row-gap:8rem}.lg\:gap-y-30{grid-row-gap:8.5rem;row-gap:8.5rem}.lg\:gap-y-32{grid-row-gap:9rem;row-gap:9rem}.lg\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.lg\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.lg\:gap-y-52{grid-row-gap:13rem;row-gap:13rem}.lg\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.lg\:gap-y-60{grid-row-gap:15rem;row-gap:15rem}.lg\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.lg\:gap-y-68{grid-row-gap:17rem;row-gap:17rem}.lg\:gap-y-px{grid-row-gap:1px;row-gap:1px}.lg\:gap-y-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.lg\:gap-y-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.lg\:gap-y-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.lg\:gap-y-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.lg\:grid-flow-row{grid-auto-flow:row}.lg\:grid-flow-col{grid-auto-flow:column}.lg\:grid-flow-row-dense{grid-auto-flow:row dense}.lg\:grid-flow-col-dense{grid-auto-flow:column dense}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-none{grid-template-columns:none}.lg\:auto-cols-auto{grid-auto-columns:auto}.lg\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.lg\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.lg\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.lg\:col-auto{grid-column:auto}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-9{grid-column:span 9/span 9}.lg\:col-span-10{grid-column:span 10/span 10}.lg\:col-span-11{grid-column:span 11/span 11}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:col-span-full{grid-column:1/-1}.lg\:col-start-1{grid-column-start:1}.lg\:col-start-2{grid-column-start:2}.lg\:col-start-3{grid-column-start:3}.lg\:col-start-4{grid-column-start:4}.lg\:col-start-5{grid-column-start:5}.lg\:col-start-6{grid-column-start:6}.lg\:col-start-7{grid-column-start:7}.lg\:col-start-8{grid-column-start:8}.lg\:col-start-9{grid-column-start:9}.lg\:col-start-10{grid-column-start:10}.lg\:col-start-11{grid-column-start:11}.lg\:col-start-12{grid-column-start:12}.lg\:col-start-13{grid-column-start:13}.lg\:col-start-auto{grid-column-start:auto}.lg\:col-end-1{grid-column-end:1}.lg\:col-end-2{grid-column-end:2}.lg\:col-end-3{grid-column-end:3}.lg\:col-end-4{grid-column-end:4}.lg\:col-end-5{grid-column-end:5}.lg\:col-end-6{grid-column-end:6}.lg\:col-end-7{grid-column-end:7}.lg\:col-end-8{grid-column-end:8}.lg\:col-end-9{grid-column-end:9}.lg\:col-end-10{grid-column-end:10}.lg\:col-end-11{grid-column-end:11}.lg\:col-end-12{grid-column-end:12}.lg\:col-end-13{grid-column-end:13}.lg\:col-end-auto{grid-column-end:auto}.lg\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.lg\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.lg\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.lg\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.lg\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.lg\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.lg\:grid-rows-none{grid-template-rows:none}.lg\:auto-rows-auto{grid-auto-rows:auto}.lg\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.lg\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.lg\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.lg\:row-auto{grid-row:auto}.lg\:row-span-1{grid-row:span 1/span 1}.lg\:row-span-2{grid-row:span 2/span 2}.lg\:row-span-3{grid-row:span 3/span 3}.lg\:row-span-4{grid-row:span 4/span 4}.lg\:row-span-5{grid-row:span 5/span 5}.lg\:row-span-6{grid-row:span 6/span 6}.lg\:row-span-full{grid-row:1/-1}.lg\:row-start-1{grid-row-start:1}.lg\:row-start-2{grid-row-start:2}.lg\:row-start-3{grid-row-start:3}.lg\:row-start-4{grid-row-start:4}.lg\:row-start-5{grid-row-start:5}.lg\:row-start-6{grid-row-start:6}.lg\:row-start-7{grid-row-start:7}.lg\:row-start-auto{grid-row-start:auto}.lg\:row-end-1{grid-row-end:1}.lg\:row-end-2{grid-row-end:2}.lg\:row-end-3{grid-row-end:3}.lg\:row-end-4{grid-row-end:4}.lg\:row-end-5{grid-row-end:5}.lg\:row-end-6{grid-row-end:6}.lg\:row-end-7{grid-row-end:7}.lg\:row-end-auto{grid-row-end:auto}.lg\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.lg\:origin-center{transform-origin:center}.lg\:origin-top{transform-origin:top}.lg\:origin-top-right{transform-origin:top right}.lg\:origin-right{transform-origin:right}.lg\:origin-bottom-right{transform-origin:bottom right}.lg\:origin-bottom{transform-origin:bottom}.lg\:origin-bottom-left{transform-origin:bottom left}.lg\:origin-left{transform-origin:left}.lg\:origin-top-left{transform-origin:top left}.lg\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.lg\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.lg\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.lg\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.lg\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.lg\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.lg\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.lg\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.lg\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.lg\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.lg\:scale-x-0{--transform-scale-x:0}.lg\:scale-x-50{--transform-scale-x:.5}.lg\:scale-x-75{--transform-scale-x:.75}.lg\:scale-x-90{--transform-scale-x:.9}.lg\:scale-x-95{--transform-scale-x:.95}.lg\:scale-x-100{--transform-scale-x:1}.lg\:scale-x-105{--transform-scale-x:1.05}.lg\:scale-x-110{--transform-scale-x:1.1}.lg\:scale-x-125{--transform-scale-x:1.25}.lg\:scale-x-150{--transform-scale-x:1.5}.lg\:scale-y-0{--transform-scale-y:0}.lg\:scale-y-50{--transform-scale-y:.5}.lg\:scale-y-75{--transform-scale-y:.75}.lg\:scale-y-90{--transform-scale-y:.9}.lg\:scale-y-95{--transform-scale-y:.95}.lg\:scale-y-100{--transform-scale-y:1}.lg\:scale-y-105{--transform-scale-y:1.05}.lg\:scale-y-110{--transform-scale-y:1.1}.lg\:scale-y-125{--transform-scale-y:1.25}.lg\:scale-y-150{--transform-scale-y:1.5}.lg\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.lg\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.lg\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.lg\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.lg\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.lg\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.lg\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.lg\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.lg\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.lg\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.lg\:hover\:scale-x-0:hover{--transform-scale-x:0}.lg\:hover\:scale-x-50:hover{--transform-scale-x:.5}.lg\:hover\:scale-x-75:hover{--transform-scale-x:.75}.lg\:hover\:scale-x-90:hover{--transform-scale-x:.9}.lg\:hover\:scale-x-95:hover{--transform-scale-x:.95}.lg\:hover\:scale-x-100:hover{--transform-scale-x:1}.lg\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.lg\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.lg\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.lg\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.lg\:hover\:scale-y-0:hover{--transform-scale-y:0}.lg\:hover\:scale-y-50:hover{--transform-scale-y:.5}.lg\:hover\:scale-y-75:hover{--transform-scale-y:.75}.lg\:hover\:scale-y-90:hover{--transform-scale-y:.9}.lg\:hover\:scale-y-95:hover{--transform-scale-y:.95}.lg\:hover\:scale-y-100:hover{--transform-scale-y:1}.lg\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.lg\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.lg\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.lg\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.lg\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.lg\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.lg\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.lg\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.lg\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.lg\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.lg\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.lg\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.lg\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.lg\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.lg\:focus\:scale-x-0:focus{--transform-scale-x:0}.lg\:focus\:scale-x-50:focus{--transform-scale-x:.5}.lg\:focus\:scale-x-75:focus{--transform-scale-x:.75}.lg\:focus\:scale-x-90:focus{--transform-scale-x:.9}.lg\:focus\:scale-x-95:focus{--transform-scale-x:.95}.lg\:focus\:scale-x-100:focus{--transform-scale-x:1}.lg\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.lg\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.lg\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.lg\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.lg\:focus\:scale-y-0:focus{--transform-scale-y:0}.lg\:focus\:scale-y-50:focus{--transform-scale-y:.5}.lg\:focus\:scale-y-75:focus{--transform-scale-y:.75}.lg\:focus\:scale-y-90:focus{--transform-scale-y:.9}.lg\:focus\:scale-y-95:focus{--transform-scale-y:.95}.lg\:focus\:scale-y-100:focus{--transform-scale-y:1}.lg\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.lg\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.lg\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.lg\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.lg\:rotate-0{--transform-rotate:0}.lg\:rotate-90{--transform-rotate:90deg}.lg\:rotate-135{--transform-rotate:135deg}.lg\:rotate-180{--transform-rotate:180deg}.lg\:-rotate-180{--transform-rotate:-180deg}.lg\:-rotate-135{--transform-rotate:-135deg}.lg\:-rotate-90{--transform-rotate:-90deg}.lg\:hover\:rotate-0:hover{--transform-rotate:0}.lg\:hover\:rotate-90:hover{--transform-rotate:90deg}.lg\:hover\:rotate-135:hover{--transform-rotate:135deg}.lg\:hover\:rotate-180:hover{--transform-rotate:180deg}.lg\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.lg\:hover\:-rotate-135:hover{--transform-rotate:-135deg}.lg\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.lg\:focus\:rotate-0:focus{--transform-rotate:0}.lg\:focus\:rotate-90:focus{--transform-rotate:90deg}.lg\:focus\:rotate-135:focus{--transform-rotate:135deg}.lg\:focus\:rotate-180:focus{--transform-rotate:180deg}.lg\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.lg\:focus\:-rotate-135:focus{--transform-rotate:-135deg}.lg\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.lg\:translate-x-0{--transform-translate-x:0}.lg\:translate-x-1{--transform-translate-x:.25rem}.lg\:translate-x-2{--transform-translate-x:.5rem}.lg\:translate-x-3{--transform-translate-x:.75rem}.lg\:translate-x-4{--transform-translate-x:1rem}.lg\:translate-x-5{--transform-translate-x:1.25rem}.lg\:translate-x-6{--transform-translate-x:1.5rem}.lg\:translate-x-7{--transform-translate-x:1.75rem}.lg\:translate-x-8{--transform-translate-x:2rem}.lg\:translate-x-9{--transform-translate-x:2.25rem}.lg\:translate-x-10{--transform-translate-x:2.5rem}.lg\:translate-x-11{--transform-translate-x:2.75rem}.lg\:translate-x-12{--transform-translate-x:3rem}.lg\:translate-x-15{--transform-translate-x:3.75rem}.lg\:translate-x-16{--transform-translate-x:4rem}.lg\:translate-x-20{--transform-translate-x:5rem}.lg\:translate-x-22{--transform-translate-x:5.5rem}.lg\:translate-x-24{--transform-translate-x:6rem}.lg\:translate-x-25{--transform-translate-x:6.25rem}.lg\:translate-x-26{--transform-translate-x:6.5rem}.lg\:translate-x-28{--transform-translate-x:8rem}.lg\:translate-x-30{--transform-translate-x:8.5rem}.lg\:translate-x-32{--transform-translate-x:9rem}.lg\:translate-x-40{--transform-translate-x:10rem}.lg\:translate-x-48{--transform-translate-x:12rem}.lg\:translate-x-52{--transform-translate-x:13rem}.lg\:translate-x-56{--transform-translate-x:14rem}.lg\:translate-x-60{--transform-translate-x:15rem}.lg\:translate-x-64{--transform-translate-x:16rem}.lg\:translate-x-68{--transform-translate-x:17rem}.lg\:translate-x-px{--transform-translate-x:1px}.lg\:translate-x-0\.5{--transform-translate-x:.125rem}.lg\:translate-x-1\.5{--transform-translate-x:.375rem}.lg\:translate-x-2\.5{--transform-translate-x:.625rem}.lg\:translate-x-7\.5{--transform-translate-x:1.875rem}.lg\:-translate-x-1{--transform-translate-x:-0.25rem}.lg\:-translate-x-2{--transform-translate-x:-0.5rem}.lg\:-translate-x-3{--transform-translate-x:-0.75rem}.lg\:-translate-x-4{--transform-translate-x:-1rem}.lg\:-translate-x-5{--transform-translate-x:-1.25rem}.lg\:-translate-x-6{--transform-translate-x:-1.5rem}.lg\:-translate-x-7{--transform-translate-x:-1.75rem}.lg\:-translate-x-8{--transform-translate-x:-2rem}.lg\:-translate-x-9{--transform-translate-x:-2.25rem}.lg\:-translate-x-10{--transform-translate-x:-2.5rem}.lg\:-translate-x-11{--transform-translate-x:-2.75rem}.lg\:-translate-x-12{--transform-translate-x:-3rem}.lg\:-translate-x-15{--transform-translate-x:-3.75rem}.lg\:-translate-x-16{--transform-translate-x:-4rem}.lg\:-translate-x-20{--transform-translate-x:-5rem}.lg\:-translate-x-22{--transform-translate-x:-5.5rem}.lg\:-translate-x-24{--transform-translate-x:-6rem}.lg\:-translate-x-25{--transform-translate-x:-6.25rem}.lg\:-translate-x-26{--transform-translate-x:-6.5rem}.lg\:-translate-x-28{--transform-translate-x:-8rem}.lg\:-translate-x-30{--transform-translate-x:-8.5rem}.lg\:-translate-x-32{--transform-translate-x:-9rem}.lg\:-translate-x-40{--transform-translate-x:-10rem}.lg\:-translate-x-48{--transform-translate-x:-12rem}.lg\:-translate-x-52{--transform-translate-x:-13rem}.lg\:-translate-x-56{--transform-translate-x:-14rem}.lg\:-translate-x-60{--transform-translate-x:-15rem}.lg\:-translate-x-64{--transform-translate-x:-16rem}.lg\:-translate-x-68{--transform-translate-x:-17rem}.lg\:-translate-x-px{--transform-translate-x:-1px}.lg\:-translate-x-0\.5{--transform-translate-x:-0.125rem}.lg\:-translate-x-1\.5{--transform-translate-x:-0.375rem}.lg\:-translate-x-2\.5{--transform-translate-x:-0.625rem}.lg\:-translate-x-7\.5{--transform-translate-x:-1.875rem}.lg\:-translate-x-full{--transform-translate-x:-100%}.lg\:-translate-x-1\/2{--transform-translate-x:-50%}.lg\:translate-x-1\/2{--transform-translate-x:50%}.lg\:translate-x-full{--transform-translate-x:100%}.lg\:translate-y-0{--transform-translate-y:0}.lg\:translate-y-1{--transform-translate-y:.25rem}.lg\:translate-y-2{--transform-translate-y:.5rem}.lg\:translate-y-3{--transform-translate-y:.75rem}.lg\:translate-y-4{--transform-translate-y:1rem}.lg\:translate-y-5{--transform-translate-y:1.25rem}.lg\:translate-y-6{--transform-translate-y:1.5rem}.lg\:translate-y-7{--transform-translate-y:1.75rem}.lg\:translate-y-8{--transform-translate-y:2rem}.lg\:translate-y-9{--transform-translate-y:2.25rem}.lg\:translate-y-10{--transform-translate-y:2.5rem}.lg\:translate-y-11{--transform-translate-y:2.75rem}.lg\:translate-y-12{--transform-translate-y:3rem}.lg\:translate-y-15{--transform-translate-y:3.75rem}.lg\:translate-y-16{--transform-translate-y:4rem}.lg\:translate-y-20{--transform-translate-y:5rem}.lg\:translate-y-22{--transform-translate-y:5.5rem}.lg\:translate-y-24{--transform-translate-y:6rem}.lg\:translate-y-25{--transform-translate-y:6.25rem}.lg\:translate-y-26{--transform-translate-y:6.5rem}.lg\:translate-y-28{--transform-translate-y:8rem}.lg\:translate-y-30{--transform-translate-y:8.5rem}.lg\:translate-y-32{--transform-translate-y:9rem}.lg\:translate-y-40{--transform-translate-y:10rem}.lg\:translate-y-48{--transform-translate-y:12rem}.lg\:translate-y-52{--transform-translate-y:13rem}.lg\:translate-y-56{--transform-translate-y:14rem}.lg\:translate-y-60{--transform-translate-y:15rem}.lg\:translate-y-64{--transform-translate-y:16rem}.lg\:translate-y-68{--transform-translate-y:17rem}.lg\:translate-y-px{--transform-translate-y:1px}.lg\:translate-y-0\.5{--transform-translate-y:.125rem}.lg\:translate-y-1\.5{--transform-translate-y:.375rem}.lg\:translate-y-2\.5{--transform-translate-y:.625rem}.lg\:translate-y-7\.5{--transform-translate-y:1.875rem}.lg\:-translate-y-1{--transform-translate-y:-0.25rem}.lg\:-translate-y-2{--transform-translate-y:-0.5rem}.lg\:-translate-y-3{--transform-translate-y:-0.75rem}.lg\:-translate-y-4{--transform-translate-y:-1rem}.lg\:-translate-y-5{--transform-translate-y:-1.25rem}.lg\:-translate-y-6{--transform-translate-y:-1.5rem}.lg\:-translate-y-7{--transform-translate-y:-1.75rem}.lg\:-translate-y-8{--transform-translate-y:-2rem}.lg\:-translate-y-9{--transform-translate-y:-2.25rem}.lg\:-translate-y-10{--transform-translate-y:-2.5rem}.lg\:-translate-y-11{--transform-translate-y:-2.75rem}.lg\:-translate-y-12{--transform-translate-y:-3rem}.lg\:-translate-y-15{--transform-translate-y:-3.75rem}.lg\:-translate-y-16{--transform-translate-y:-4rem}.lg\:-translate-y-20{--transform-translate-y:-5rem}.lg\:-translate-y-22{--transform-translate-y:-5.5rem}.lg\:-translate-y-24{--transform-translate-y:-6rem}.lg\:-translate-y-25{--transform-translate-y:-6.25rem}.lg\:-translate-y-26{--transform-translate-y:-6.5rem}.lg\:-translate-y-28{--transform-translate-y:-8rem}.lg\:-translate-y-30{--transform-translate-y:-8.5rem}.lg\:-translate-y-32{--transform-translate-y:-9rem}.lg\:-translate-y-40{--transform-translate-y:-10rem}.lg\:-translate-y-48{--transform-translate-y:-12rem}.lg\:-translate-y-52{--transform-translate-y:-13rem}.lg\:-translate-y-56{--transform-translate-y:-14rem}.lg\:-translate-y-60{--transform-translate-y:-15rem}.lg\:-translate-y-64{--transform-translate-y:-16rem}.lg\:-translate-y-68{--transform-translate-y:-17rem}.lg\:-translate-y-px{--transform-translate-y:-1px}.lg\:-translate-y-0\.5{--transform-translate-y:-0.125rem}.lg\:-translate-y-1\.5{--transform-translate-y:-0.375rem}.lg\:-translate-y-2\.5{--transform-translate-y:-0.625rem}.lg\:-translate-y-7\.5{--transform-translate-y:-1.875rem}.lg\:-translate-y-full{--transform-translate-y:-100%}.lg\:-translate-y-1\/2{--transform-translate-y:-50%}.lg\:translate-y-1\/2{--transform-translate-y:50%}.lg\:translate-y-full{--transform-translate-y:100%}.lg\:hover\:translate-x-0:hover{--transform-translate-x:0}.lg\:hover\:translate-x-1:hover{--transform-translate-x:.25rem}.lg\:hover\:translate-x-2:hover{--transform-translate-x:.5rem}.lg\:hover\:translate-x-3:hover{--transform-translate-x:.75rem}.lg\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.lg\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.lg\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.lg\:hover\:translate-x-7:hover{--transform-translate-x:1.75rem}.lg\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.lg\:hover\:translate-x-9:hover{--transform-translate-x:2.25rem}.lg\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.lg\:hover\:translate-x-11:hover{--transform-translate-x:2.75rem}.lg\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.lg\:hover\:translate-x-15:hover{--transform-translate-x:3.75rem}.lg\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.lg\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.lg\:hover\:translate-x-22:hover{--transform-translate-x:5.5rem}.lg\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.lg\:hover\:translate-x-25:hover{--transform-translate-x:6.25rem}.lg\:hover\:translate-x-26:hover{--transform-translate-x:6.5rem}.lg\:hover\:translate-x-28:hover{--transform-translate-x:8rem}.lg\:hover\:translate-x-30:hover{--transform-translate-x:8.5rem}.lg\:hover\:translate-x-32:hover{--transform-translate-x:9rem}.lg\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.lg\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.lg\:hover\:translate-x-52:hover{--transform-translate-x:13rem}.lg\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.lg\:hover\:translate-x-60:hover{--transform-translate-x:15rem}.lg\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.lg\:hover\:translate-x-68:hover{--transform-translate-x:17rem}.lg\:hover\:translate-x-px:hover{--transform-translate-x:1px}.lg\:hover\:translate-x-0\.5:hover{--transform-translate-x:.125rem}.lg\:hover\:translate-x-1\.5:hover{--transform-translate-x:.375rem}.lg\:hover\:translate-x-2\.5:hover{--transform-translate-x:.625rem}.lg\:hover\:translate-x-7\.5:hover{--transform-translate-x:1.875rem}.lg\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.lg\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.lg\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.lg\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.lg\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.lg\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.lg\:hover\:-translate-x-7:hover{--transform-translate-x:-1.75rem}.lg\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.lg\:hover\:-translate-x-9:hover{--transform-translate-x:-2.25rem}.lg\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.lg\:hover\:-translate-x-11:hover{--transform-translate-x:-2.75rem}.lg\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.lg\:hover\:-translate-x-15:hover{--transform-translate-x:-3.75rem}.lg\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.lg\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.lg\:hover\:-translate-x-22:hover{--transform-translate-x:-5.5rem}.lg\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.lg\:hover\:-translate-x-25:hover{--transform-translate-x:-6.25rem}.lg\:hover\:-translate-x-26:hover{--transform-translate-x:-6.5rem}.lg\:hover\:-translate-x-28:hover{--transform-translate-x:-8rem}.lg\:hover\:-translate-x-30:hover{--transform-translate-x:-8.5rem}.lg\:hover\:-translate-x-32:hover{--transform-translate-x:-9rem}.lg\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.lg\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.lg\:hover\:-translate-x-52:hover{--transform-translate-x:-13rem}.lg\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.lg\:hover\:-translate-x-60:hover{--transform-translate-x:-15rem}.lg\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.lg\:hover\:-translate-x-68:hover{--transform-translate-x:-17rem}.lg\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.lg\:hover\:-translate-x-0\.5:hover{--transform-translate-x:-0.125rem}.lg\:hover\:-translate-x-1\.5:hover{--transform-translate-x:-0.375rem}.lg\:hover\:-translate-x-2\.5:hover{--transform-translate-x:-0.625rem}.lg\:hover\:-translate-x-7\.5:hover{--transform-translate-x:-1.875rem}.lg\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.lg\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.lg\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.lg\:hover\:translate-x-full:hover{--transform-translate-x:100%}.lg\:hover\:translate-y-0:hover{--transform-translate-y:0}.lg\:hover\:translate-y-1:hover{--transform-translate-y:.25rem}.lg\:hover\:translate-y-2:hover{--transform-translate-y:.5rem}.lg\:hover\:translate-y-3:hover{--transform-translate-y:.75rem}.lg\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.lg\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.lg\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.lg\:hover\:translate-y-7:hover{--transform-translate-y:1.75rem}.lg\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.lg\:hover\:translate-y-9:hover{--transform-translate-y:2.25rem}.lg\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.lg\:hover\:translate-y-11:hover{--transform-translate-y:2.75rem}.lg\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.lg\:hover\:translate-y-15:hover{--transform-translate-y:3.75rem}.lg\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.lg\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.lg\:hover\:translate-y-22:hover{--transform-translate-y:5.5rem}.lg\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.lg\:hover\:translate-y-25:hover{--transform-translate-y:6.25rem}.lg\:hover\:translate-y-26:hover{--transform-translate-y:6.5rem}.lg\:hover\:translate-y-28:hover{--transform-translate-y:8rem}.lg\:hover\:translate-y-30:hover{--transform-translate-y:8.5rem}.lg\:hover\:translate-y-32:hover{--transform-translate-y:9rem}.lg\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.lg\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.lg\:hover\:translate-y-52:hover{--transform-translate-y:13rem}.lg\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.lg\:hover\:translate-y-60:hover{--transform-translate-y:15rem}.lg\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.lg\:hover\:translate-y-68:hover{--transform-translate-y:17rem}.lg\:hover\:translate-y-px:hover{--transform-translate-y:1px}.lg\:hover\:translate-y-0\.5:hover{--transform-translate-y:.125rem}.lg\:hover\:translate-y-1\.5:hover{--transform-translate-y:.375rem}.lg\:hover\:translate-y-2\.5:hover{--transform-translate-y:.625rem}.lg\:hover\:translate-y-7\.5:hover{--transform-translate-y:1.875rem}.lg\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.lg\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.lg\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.lg\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.lg\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.lg\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.lg\:hover\:-translate-y-7:hover{--transform-translate-y:-1.75rem}.lg\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.lg\:hover\:-translate-y-9:hover{--transform-translate-y:-2.25rem}.lg\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.lg\:hover\:-translate-y-11:hover{--transform-translate-y:-2.75rem}.lg\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.lg\:hover\:-translate-y-15:hover{--transform-translate-y:-3.75rem}.lg\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.lg\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.lg\:hover\:-translate-y-22:hover{--transform-translate-y:-5.5rem}.lg\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.lg\:hover\:-translate-y-25:hover{--transform-translate-y:-6.25rem}.lg\:hover\:-translate-y-26:hover{--transform-translate-y:-6.5rem}.lg\:hover\:-translate-y-28:hover{--transform-translate-y:-8rem}.lg\:hover\:-translate-y-30:hover{--transform-translate-y:-8.5rem}.lg\:hover\:-translate-y-32:hover{--transform-translate-y:-9rem}.lg\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.lg\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.lg\:hover\:-translate-y-52:hover{--transform-translate-y:-13rem}.lg\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.lg\:hover\:-translate-y-60:hover{--transform-translate-y:-15rem}.lg\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.lg\:hover\:-translate-y-68:hover{--transform-translate-y:-17rem}.lg\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.lg\:hover\:-translate-y-0\.5:hover{--transform-translate-y:-0.125rem}.lg\:hover\:-translate-y-1\.5:hover{--transform-translate-y:-0.375rem}.lg\:hover\:-translate-y-2\.5:hover{--transform-translate-y:-0.625rem}.lg\:hover\:-translate-y-7\.5:hover{--transform-translate-y:-1.875rem}.lg\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.lg\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.lg\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.lg\:hover\:translate-y-full:hover{--transform-translate-y:100%}.lg\:focus\:translate-x-0:focus{--transform-translate-x:0}.lg\:focus\:translate-x-1:focus{--transform-translate-x:.25rem}.lg\:focus\:translate-x-2:focus{--transform-translate-x:.5rem}.lg\:focus\:translate-x-3:focus{--transform-translate-x:.75rem}.lg\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.lg\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.lg\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.lg\:focus\:translate-x-7:focus{--transform-translate-x:1.75rem}.lg\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.lg\:focus\:translate-x-9:focus{--transform-translate-x:2.25rem}.lg\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.lg\:focus\:translate-x-11:focus{--transform-translate-x:2.75rem}.lg\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.lg\:focus\:translate-x-15:focus{--transform-translate-x:3.75rem}.lg\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.lg\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.lg\:focus\:translate-x-22:focus{--transform-translate-x:5.5rem}.lg\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.lg\:focus\:translate-x-25:focus{--transform-translate-x:6.25rem}.lg\:focus\:translate-x-26:focus{--transform-translate-x:6.5rem}.lg\:focus\:translate-x-28:focus{--transform-translate-x:8rem}.lg\:focus\:translate-x-30:focus{--transform-translate-x:8.5rem}.lg\:focus\:translate-x-32:focus{--transform-translate-x:9rem}.lg\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.lg\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.lg\:focus\:translate-x-52:focus{--transform-translate-x:13rem}.lg\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.lg\:focus\:translate-x-60:focus{--transform-translate-x:15rem}.lg\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.lg\:focus\:translate-x-68:focus{--transform-translate-x:17rem}.lg\:focus\:translate-x-px:focus{--transform-translate-x:1px}.lg\:focus\:translate-x-0\.5:focus{--transform-translate-x:.125rem}.lg\:focus\:translate-x-1\.5:focus{--transform-translate-x:.375rem}.lg\:focus\:translate-x-2\.5:focus{--transform-translate-x:.625rem}.lg\:focus\:translate-x-7\.5:focus{--transform-translate-x:1.875rem}.lg\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.lg\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.lg\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.lg\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.lg\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.lg\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.lg\:focus\:-translate-x-7:focus{--transform-translate-x:-1.75rem}.lg\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.lg\:focus\:-translate-x-9:focus{--transform-translate-x:-2.25rem}.lg\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.lg\:focus\:-translate-x-11:focus{--transform-translate-x:-2.75rem}.lg\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.lg\:focus\:-translate-x-15:focus{--transform-translate-x:-3.75rem}.lg\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.lg\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.lg\:focus\:-translate-x-22:focus{--transform-translate-x:-5.5rem}.lg\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.lg\:focus\:-translate-x-25:focus{--transform-translate-x:-6.25rem}.lg\:focus\:-translate-x-26:focus{--transform-translate-x:-6.5rem}.lg\:focus\:-translate-x-28:focus{--transform-translate-x:-8rem}.lg\:focus\:-translate-x-30:focus{--transform-translate-x:-8.5rem}.lg\:focus\:-translate-x-32:focus{--transform-translate-x:-9rem}.lg\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.lg\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.lg\:focus\:-translate-x-52:focus{--transform-translate-x:-13rem}.lg\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.lg\:focus\:-translate-x-60:focus{--transform-translate-x:-15rem}.lg\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.lg\:focus\:-translate-x-68:focus{--transform-translate-x:-17rem}.lg\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.lg\:focus\:-translate-x-0\.5:focus{--transform-translate-x:-0.125rem}.lg\:focus\:-translate-x-1\.5:focus{--transform-translate-x:-0.375rem}.lg\:focus\:-translate-x-2\.5:focus{--transform-translate-x:-0.625rem}.lg\:focus\:-translate-x-7\.5:focus{--transform-translate-x:-1.875rem}.lg\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.lg\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.lg\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.lg\:focus\:translate-x-full:focus{--transform-translate-x:100%}.lg\:focus\:translate-y-0:focus{--transform-translate-y:0}.lg\:focus\:translate-y-1:focus{--transform-translate-y:.25rem}.lg\:focus\:translate-y-2:focus{--transform-translate-y:.5rem}.lg\:focus\:translate-y-3:focus{--transform-translate-y:.75rem}.lg\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.lg\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.lg\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.lg\:focus\:translate-y-7:focus{--transform-translate-y:1.75rem}.lg\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.lg\:focus\:translate-y-9:focus{--transform-translate-y:2.25rem}.lg\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.lg\:focus\:translate-y-11:focus{--transform-translate-y:2.75rem}.lg\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.lg\:focus\:translate-y-15:focus{--transform-translate-y:3.75rem}.lg\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.lg\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.lg\:focus\:translate-y-22:focus{--transform-translate-y:5.5rem}.lg\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.lg\:focus\:translate-y-25:focus{--transform-translate-y:6.25rem}.lg\:focus\:translate-y-26:focus{--transform-translate-y:6.5rem}.lg\:focus\:translate-y-28:focus{--transform-translate-y:8rem}.lg\:focus\:translate-y-30:focus{--transform-translate-y:8.5rem}.lg\:focus\:translate-y-32:focus{--transform-translate-y:9rem}.lg\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.lg\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.lg\:focus\:translate-y-52:focus{--transform-translate-y:13rem}.lg\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.lg\:focus\:translate-y-60:focus{--transform-translate-y:15rem}.lg\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.lg\:focus\:translate-y-68:focus{--transform-translate-y:17rem}.lg\:focus\:translate-y-px:focus{--transform-translate-y:1px}.lg\:focus\:translate-y-0\.5:focus{--transform-translate-y:.125rem}.lg\:focus\:translate-y-1\.5:focus{--transform-translate-y:.375rem}.lg\:focus\:translate-y-2\.5:focus{--transform-translate-y:.625rem}.lg\:focus\:translate-y-7\.5:focus{--transform-translate-y:1.875rem}.lg\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.lg\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.lg\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.lg\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.lg\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.lg\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.lg\:focus\:-translate-y-7:focus{--transform-translate-y:-1.75rem}.lg\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.lg\:focus\:-translate-y-9:focus{--transform-translate-y:-2.25rem}.lg\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.lg\:focus\:-translate-y-11:focus{--transform-translate-y:-2.75rem}.lg\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.lg\:focus\:-translate-y-15:focus{--transform-translate-y:-3.75rem}.lg\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.lg\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.lg\:focus\:-translate-y-22:focus{--transform-translate-y:-5.5rem}.lg\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.lg\:focus\:-translate-y-25:focus{--transform-translate-y:-6.25rem}.lg\:focus\:-translate-y-26:focus{--transform-translate-y:-6.5rem}.lg\:focus\:-translate-y-28:focus{--transform-translate-y:-8rem}.lg\:focus\:-translate-y-30:focus{--transform-translate-y:-8.5rem}.lg\:focus\:-translate-y-32:focus{--transform-translate-y:-9rem}.lg\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.lg\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.lg\:focus\:-translate-y-52:focus{--transform-translate-y:-13rem}.lg\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.lg\:focus\:-translate-y-60:focus{--transform-translate-y:-15rem}.lg\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.lg\:focus\:-translate-y-68:focus{--transform-translate-y:-17rem}.lg\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.lg\:focus\:-translate-y-0\.5:focus{--transform-translate-y:-0.125rem}.lg\:focus\:-translate-y-1\.5:focus{--transform-translate-y:-0.375rem}.lg\:focus\:-translate-y-2\.5:focus{--transform-translate-y:-0.625rem}.lg\:focus\:-translate-y-7\.5:focus{--transform-translate-y:-1.875rem}.lg\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.lg\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.lg\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.lg\:focus\:translate-y-full:focus{--transform-translate-y:100%}.lg\:skew-x-0{--transform-skew-x:0}.lg\:skew-x-1{--transform-skew-x:1deg}.lg\:skew-x-2{--transform-skew-x:2deg}.lg\:skew-x-3{--transform-skew-x:3deg}.lg\:skew-x-6{--transform-skew-x:6deg}.lg\:skew-x-12{--transform-skew-x:12deg}.lg\:-skew-x-12{--transform-skew-x:-12deg}.lg\:-skew-x-6{--transform-skew-x:-6deg}.lg\:-skew-x-3{--transform-skew-x:-3deg}.lg\:-skew-x-2{--transform-skew-x:-2deg}.lg\:-skew-x-1{--transform-skew-x:-1deg}.lg\:skew-y-0{--transform-skew-y:0}.lg\:skew-y-1{--transform-skew-y:1deg}.lg\:skew-y-2{--transform-skew-y:2deg}.lg\:skew-y-3{--transform-skew-y:3deg}.lg\:skew-y-6{--transform-skew-y:6deg}.lg\:skew-y-12{--transform-skew-y:12deg}.lg\:-skew-y-12{--transform-skew-y:-12deg}.lg\:-skew-y-6{--transform-skew-y:-6deg}.lg\:-skew-y-3{--transform-skew-y:-3deg}.lg\:-skew-y-2{--transform-skew-y:-2deg}.lg\:-skew-y-1{--transform-skew-y:-1deg}.lg\:hover\:skew-x-0:hover{--transform-skew-x:0}.lg\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.lg\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.lg\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.lg\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.lg\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.lg\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.lg\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.lg\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.lg\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.lg\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.lg\:hover\:skew-y-0:hover{--transform-skew-y:0}.lg\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.lg\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.lg\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.lg\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.lg\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.lg\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.lg\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.lg\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.lg\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.lg\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.lg\:focus\:skew-x-0:focus{--transform-skew-x:0}.lg\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.lg\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.lg\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.lg\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.lg\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.lg\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.lg\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.lg\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.lg\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.lg\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.lg\:focus\:skew-y-0:focus{--transform-skew-y:0}.lg\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.lg\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.lg\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.lg\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.lg\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.lg\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.lg\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.lg\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.lg\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.lg\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.lg\:transition-none{transition-property:none}.lg\:transition-all{transition-property:all}.lg\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.lg\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.lg\:transition-opacity{transition-property:opacity}.lg\:transition-shadow{transition-property:box-shadow}.lg\:transition-transform{transition-property:transform}.lg\:ease-linear{transition-timing-function:linear}.lg\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.lg\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.lg\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:duration-75{transition-duration:75ms}.lg\:duration-100{transition-duration:.1s}.lg\:duration-150{transition-duration:.15s}.lg\:duration-200{transition-duration:.2s}.lg\:duration-300{transition-duration:.3s}.lg\:duration-500{transition-duration:.5s}.lg\:duration-700{transition-duration:.7s}.lg\:duration-1000{transition-duration:1s}.lg\:delay-75{transition-delay:75ms}.lg\:delay-100{transition-delay:.1s}.lg\:delay-150{transition-delay:.15s}.lg\:delay-200{transition-delay:.2s}.lg\:delay-300{transition-delay:.3s}.lg\:delay-500{transition-delay:.5s}.lg\:delay-700{transition-delay:.7s}.lg\:delay-1000{transition-delay:1s}.lg\:animate-none{-webkit-animation:none;animation:none}.lg\:animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.lg\:animate-ping{-webkit-animation:ping 1s cubic-bezier(0,0,.2,1) infinite;animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.lg\:animate-pulse{-webkit-animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.lg\:animate-bounce{-webkit-animation:bounce 1s infinite;animation:bounce 1s infinite}.lg\:transform-none{transform:none}.lg\:transform-center{transform-origin:center}.lg\:transform-top{transform-origin:top}.lg\:transform-top-right{transform-origin:top right}.lg\:transform-right{transform-origin:right}.lg\:transform-bottom-right{transform-origin:bottom right}.lg\:transform-bottom{transform-origin:bottom}.lg\:transform-bottom-left{transform-origin:bottom left}.lg\:transform-left{transform-origin:left}.lg\:transform-top-left{transform-origin:top left}.lg\:translate-x-0{transform:translateX(0)}.lg\:translate-y-0{transform:translateY(0)}.lg\:translate-x-1{transform:translateX(.25rem)}.lg\:translate-y-1{transform:translateY(.25rem)}.lg\:translate-x-2{transform:translateX(.5rem)}.lg\:translate-y-2{transform:translateY(.5rem)}.lg\:translate-x-3{transform:translateX(.75rem)}.lg\:translate-y-3{transform:translateY(.75rem)}.lg\:translate-x-4{transform:translateX(1rem)}.lg\:translate-y-4{transform:translateY(1rem)}.lg\:translate-x-5{transform:translateX(1.25rem)}.lg\:translate-y-5{transform:translateY(1.25rem)}.lg\:translate-x-6{transform:translateX(1.5rem)}.lg\:translate-y-6{transform:translateY(1.5rem)}.lg\:translate-x-7{transform:translateX(1.75rem)}.lg\:translate-y-7{transform:translateY(1.75rem)}.lg\:translate-x-8{transform:translateX(2rem)}.lg\:translate-y-8{transform:translateY(2rem)}.lg\:translate-x-9{transform:translateX(2.25rem)}.lg\:translate-y-9{transform:translateY(2.25rem)}.lg\:translate-x-10{transform:translateX(2.5rem)}.lg\:translate-y-10{transform:translateY(2.5rem)}.lg\:translate-x-11{transform:translateX(2.75rem)}.lg\:translate-y-11{transform:translateY(2.75rem)}.lg\:translate-x-12{transform:translateX(3rem)}.lg\:translate-y-12{transform:translateY(3rem)}.lg\:translate-x-15{transform:translateX(3.75rem)}.lg\:translate-y-15{transform:translateY(3.75rem)}.lg\:translate-x-16{transform:translateX(4rem)}.lg\:translate-y-16{transform:translateY(4rem)}.lg\:translate-x-20{transform:translateX(5rem)}.lg\:translate-y-20{transform:translateY(5rem)}.lg\:translate-x-22{transform:translateX(5.5rem)}.lg\:translate-y-22{transform:translateY(5.5rem)}.lg\:translate-x-24{transform:translateX(6rem)}.lg\:translate-y-24{transform:translateY(6rem)}.lg\:translate-x-25{transform:translateX(6.25rem)}.lg\:translate-y-25{transform:translateY(6.25rem)}.lg\:translate-x-26{transform:translateX(6.5rem)}.lg\:translate-y-26{transform:translateY(6.5rem)}.lg\:translate-x-28{transform:translateX(8rem)}.lg\:translate-y-28{transform:translateY(8rem)}.lg\:translate-x-30{transform:translateX(8.5rem)}.lg\:translate-y-30{transform:translateY(8.5rem)}.lg\:translate-x-32{transform:translateX(9rem)}.lg\:translate-y-32{transform:translateY(9rem)}.lg\:translate-x-40{transform:translateX(10rem)}.lg\:translate-y-40{transform:translateY(10rem)}.lg\:translate-x-48{transform:translateX(12rem)}.lg\:translate-y-48{transform:translateY(12rem)}.lg\:translate-x-52{transform:translateX(13rem)}.lg\:translate-y-52{transform:translateY(13rem)}.lg\:translate-x-56{transform:translateX(14rem)}.lg\:translate-y-56{transform:translateY(14rem)}.lg\:translate-x-60{transform:translateX(15rem)}.lg\:translate-y-60{transform:translateY(15rem)}.lg\:translate-x-64{transform:translateX(16rem)}.lg\:translate-y-64{transform:translateY(16rem)}.lg\:translate-x-68{transform:translateX(17rem)}.lg\:translate-y-68{transform:translateY(17rem)}.lg\:translate-x-px{transform:translateX(1px)}.lg\:translate-y-px{transform:translateY(1px)}.lg\:translate-x-0\.5{transform:translateX(.125rem)}.lg\:translate-y-0\.5{transform:translateY(.125rem)}.lg\:translate-x-1\.5{transform:translateX(.375rem)}.lg\:translate-y-1\.5{transform:translateY(.375rem)}.lg\:translate-x-2\.5{transform:translateX(.625rem)}.lg\:translate-y-2\.5{transform:translateY(.625rem)}.lg\:translate-x-7\.5{transform:translateX(1.875rem)}.lg\:translate-y-7\.5{transform:translateY(1.875rem)}.lg\:-translate-x-1{transform:translateX(-.25rem)}.lg\:-translate-y-1{transform:translateY(-.25rem)}.lg\:-translate-x-2{transform:translateX(-.5rem)}.lg\:-translate-y-2{transform:translateY(-.5rem)}.lg\:-translate-x-3{transform:translateX(-.75rem)}.lg\:-translate-y-3{transform:translateY(-.75rem)}.lg\:-translate-x-4{transform:translateX(-1rem)}.lg\:-translate-y-4{transform:translateY(-1rem)}.lg\:-translate-x-5{transform:translateX(-1.25rem)}.lg\:-translate-y-5{transform:translateY(-1.25rem)}.lg\:-translate-x-6{transform:translateX(-1.5rem)}.lg\:-translate-y-6{transform:translateY(-1.5rem)}.lg\:-translate-x-7{transform:translateX(-1.75rem)}.lg\:-translate-y-7{transform:translateY(-1.75rem)}.lg\:-translate-x-8{transform:translateX(-2rem)}.lg\:-translate-y-8{transform:translateY(-2rem)}.lg\:-translate-x-9{transform:translateX(-2.25rem)}.lg\:-translate-y-9{transform:translateY(-2.25rem)}.lg\:-translate-x-10{transform:translateX(-2.5rem)}.lg\:-translate-y-10{transform:translateY(-2.5rem)}.lg\:-translate-x-11{transform:translateX(-2.75rem)}.lg\:-translate-y-11{transform:translateY(-2.75rem)}.lg\:-translate-x-12{transform:translateX(-3rem)}.lg\:-translate-y-12{transform:translateY(-3rem)}.lg\:-translate-x-15{transform:translateX(-3.75rem)}.lg\:-translate-y-15{transform:translateY(-3.75rem)}.lg\:-translate-x-16{transform:translateX(-4rem)}.lg\:-translate-y-16{transform:translateY(-4rem)}.lg\:-translate-x-20{transform:translateX(-5rem)}.lg\:-translate-y-20{transform:translateY(-5rem)}.lg\:-translate-x-22{transform:translateX(-5.5rem)}.lg\:-translate-y-22{transform:translateY(-5.5rem)}.lg\:-translate-x-24{transform:translateX(-6rem)}.lg\:-translate-y-24{transform:translateY(-6rem)}.lg\:-translate-x-25{transform:translateX(-6.25rem)}.lg\:-translate-y-25{transform:translateY(-6.25rem)}.lg\:-translate-x-26{transform:translateX(-6.5rem)}.lg\:-translate-y-26{transform:translateY(-6.5rem)}.lg\:-translate-x-28{transform:translateX(-8rem)}.lg\:-translate-y-28{transform:translateY(-8rem)}.lg\:-translate-x-30{transform:translateX(-8.5rem)}.lg\:-translate-y-30{transform:translateY(-8.5rem)}.lg\:-translate-x-32{transform:translateX(-9rem)}.lg\:-translate-y-32{transform:translateY(-9rem)}.lg\:-translate-x-40{transform:translateX(-10rem)}.lg\:-translate-y-40{transform:translateY(-10rem)}.lg\:-translate-x-48{transform:translateX(-12rem)}.lg\:-translate-y-48{transform:translateY(-12rem)}.lg\:-translate-x-52{transform:translateX(-13rem)}.lg\:-translate-y-52{transform:translateY(-13rem)}.lg\:-translate-x-56{transform:translateX(-14rem)}.lg\:-translate-y-56{transform:translateY(-14rem)}.lg\:-translate-x-60{transform:translateX(-15rem)}.lg\:-translate-y-60{transform:translateY(-15rem)}.lg\:-translate-x-64{transform:translateX(-16rem)}.lg\:-translate-y-64{transform:translateY(-16rem)}.lg\:-translate-x-68{transform:translateX(-17rem)}.lg\:-translate-y-68{transform:translateY(-17rem)}.lg\:-translate-x-px{transform:translateX(-1px)}.lg\:-translate-y-px{transform:translateY(-1px)}.lg\:-translate-x-0\.5{transform:translateX(-.125rem)}.lg\:-translate-y-0\.5{transform:translateY(-.125rem)}.lg\:-translate-x-1\.5{transform:translateX(-.375rem)}.lg\:-translate-y-1\.5{transform:translateY(-.375rem)}.lg\:-translate-x-2\.5{transform:translateX(-.625rem)}.lg\:-translate-y-2\.5{transform:translateY(-.625rem)}.lg\:-translate-x-7\.5{transform:translateX(-1.875rem)}.lg\:-translate-y-7\.5{transform:translateY(-1.875rem)}.lg\:-translate-x-full{transform:translateX(-100%)}.lg\:-translate-y-full{transform:translateY(-100%)}.lg\:-translate-x-1\/2{transform:translateX(-50%)}.lg\:-translate-y-1\/2{transform:translateY(-50%)}.lg\:translate-x-1\/2{transform:translateX(50%)}.lg\:translate-y-1\/2{transform:translateY(50%)}.lg\:translate-x-full{transform:translateX(100%)}.lg\:translate-y-full{transform:translateY(100%)}.lg\:hover\:translate-x-0:hover{transform:translateX(0)}.lg\:hover\:translate-y-0:hover{transform:translateY(0)}.lg\:hover\:translate-x-1:hover{transform:translateX(.25rem)}.lg\:hover\:translate-y-1:hover{transform:translateY(.25rem)}.lg\:hover\:translate-x-2:hover{transform:translateX(.5rem)}.lg\:hover\:translate-y-2:hover{transform:translateY(.5rem)}.lg\:hover\:translate-x-3:hover{transform:translateX(.75rem)}.lg\:hover\:translate-y-3:hover{transform:translateY(.75rem)}.lg\:hover\:translate-x-4:hover{transform:translateX(1rem)}.lg\:hover\:translate-y-4:hover{transform:translateY(1rem)}.lg\:hover\:translate-x-5:hover{transform:translateX(1.25rem)}.lg\:hover\:translate-y-5:hover{transform:translateY(1.25rem)}.lg\:hover\:translate-x-6:hover{transform:translateX(1.5rem)}.lg\:hover\:translate-y-6:hover{transform:translateY(1.5rem)}.lg\:hover\:translate-x-7:hover{transform:translateX(1.75rem)}.lg\:hover\:translate-y-7:hover{transform:translateY(1.75rem)}.lg\:hover\:translate-x-8:hover{transform:translateX(2rem)}.lg\:hover\:translate-y-8:hover{transform:translateY(2rem)}.lg\:hover\:translate-x-9:hover{transform:translateX(2.25rem)}.lg\:hover\:translate-y-9:hover{transform:translateY(2.25rem)}.lg\:hover\:translate-x-10:hover{transform:translateX(2.5rem)}.lg\:hover\:translate-y-10:hover{transform:translateY(2.5rem)}.lg\:hover\:translate-x-11:hover{transform:translateX(2.75rem)}.lg\:hover\:translate-y-11:hover{transform:translateY(2.75rem)}.lg\:hover\:translate-x-12:hover{transform:translateX(3rem)}.lg\:hover\:translate-y-12:hover{transform:translateY(3rem)}.lg\:hover\:translate-x-15:hover{transform:translateX(3.75rem)}.lg\:hover\:translate-y-15:hover{transform:translateY(3.75rem)}.lg\:hover\:translate-x-16:hover{transform:translateX(4rem)}.lg\:hover\:translate-y-16:hover{transform:translateY(4rem)}.lg\:hover\:translate-x-20:hover{transform:translateX(5rem)}.lg\:hover\:translate-y-20:hover{transform:translateY(5rem)}.lg\:hover\:translate-x-22:hover{transform:translateX(5.5rem)}.lg\:hover\:translate-y-22:hover{transform:translateY(5.5rem)}.lg\:hover\:translate-x-24:hover{transform:translateX(6rem)}.lg\:hover\:translate-y-24:hover{transform:translateY(6rem)}.lg\:hover\:translate-x-25:hover{transform:translateX(6.25rem)}.lg\:hover\:translate-y-25:hover{transform:translateY(6.25rem)}.lg\:hover\:translate-x-26:hover{transform:translateX(6.5rem)}.lg\:hover\:translate-y-26:hover{transform:translateY(6.5rem)}.lg\:hover\:translate-x-28:hover{transform:translateX(8rem)}.lg\:hover\:translate-y-28:hover{transform:translateY(8rem)}.lg\:hover\:translate-x-30:hover{transform:translateX(8.5rem)}.lg\:hover\:translate-y-30:hover{transform:translateY(8.5rem)}.lg\:hover\:translate-x-32:hover{transform:translateX(9rem)}.lg\:hover\:translate-y-32:hover{transform:translateY(9rem)}.lg\:hover\:translate-x-40:hover{transform:translateX(10rem)}.lg\:hover\:translate-y-40:hover{transform:translateY(10rem)}.lg\:hover\:translate-x-48:hover{transform:translateX(12rem)}.lg\:hover\:translate-y-48:hover{transform:translateY(12rem)}.lg\:hover\:translate-x-52:hover{transform:translateX(13rem)}.lg\:hover\:translate-y-52:hover{transform:translateY(13rem)}.lg\:hover\:translate-x-56:hover{transform:translateX(14rem)}.lg\:hover\:translate-y-56:hover{transform:translateY(14rem)}.lg\:hover\:translate-x-60:hover{transform:translateX(15rem)}.lg\:hover\:translate-y-60:hover{transform:translateY(15rem)}.lg\:hover\:translate-x-64:hover{transform:translateX(16rem)}.lg\:hover\:translate-y-64:hover{transform:translateY(16rem)}.lg\:hover\:translate-x-68:hover{transform:translateX(17rem)}.lg\:hover\:translate-y-68:hover{transform:translateY(17rem)}.lg\:hover\:translate-x-px:hover{transform:translateX(1px)}.lg\:hover\:translate-y-px:hover{transform:translateY(1px)}.lg\:hover\:translate-x-0\.5:hover{transform:translateX(.125rem)}.lg\:hover\:translate-y-0\.5:hover{transform:translateY(.125rem)}.lg\:hover\:translate-x-1\.5:hover{transform:translateX(.375rem)}.lg\:hover\:translate-y-1\.5:hover{transform:translateY(.375rem)}.lg\:hover\:translate-x-2\.5:hover{transform:translateX(.625rem)}.lg\:hover\:translate-y-2\.5:hover{transform:translateY(.625rem)}.lg\:hover\:translate-x-7\.5:hover{transform:translateX(1.875rem)}.lg\:hover\:translate-y-7\.5:hover{transform:translateY(1.875rem)}.lg\:hover\:-translate-x-1:hover{transform:translateX(-.25rem)}.lg\:hover\:-translate-y-1:hover{transform:translateY(-.25rem)}.lg\:hover\:-translate-x-2:hover{transform:translateX(-.5rem)}.lg\:hover\:-translate-y-2:hover{transform:translateY(-.5rem)}.lg\:hover\:-translate-x-3:hover{transform:translateX(-.75rem)}.lg\:hover\:-translate-y-3:hover{transform:translateY(-.75rem)}.lg\:hover\:-translate-x-4:hover{transform:translateX(-1rem)}.lg\:hover\:-translate-y-4:hover{transform:translateY(-1rem)}.lg\:hover\:-translate-x-5:hover{transform:translateX(-1.25rem)}.lg\:hover\:-translate-y-5:hover{transform:translateY(-1.25rem)}.lg\:hover\:-translate-x-6:hover{transform:translateX(-1.5rem)}.lg\:hover\:-translate-y-6:hover{transform:translateY(-1.5rem)}.lg\:hover\:-translate-x-7:hover{transform:translateX(-1.75rem)}.lg\:hover\:-translate-y-7:hover{transform:translateY(-1.75rem)}.lg\:hover\:-translate-x-8:hover{transform:translateX(-2rem)}.lg\:hover\:-translate-y-8:hover{transform:translateY(-2rem)}.lg\:hover\:-translate-x-9:hover{transform:translateX(-2.25rem)}.lg\:hover\:-translate-y-9:hover{transform:translateY(-2.25rem)}.lg\:hover\:-translate-x-10:hover{transform:translateX(-2.5rem)}.lg\:hover\:-translate-y-10:hover{transform:translateY(-2.5rem)}.lg\:hover\:-translate-x-11:hover{transform:translateX(-2.75rem)}.lg\:hover\:-translate-y-11:hover{transform:translateY(-2.75rem)}.lg\:hover\:-translate-x-12:hover{transform:translateX(-3rem)}.lg\:hover\:-translate-y-12:hover{transform:translateY(-3rem)}.lg\:hover\:-translate-x-15:hover{transform:translateX(-3.75rem)}.lg\:hover\:-translate-y-15:hover{transform:translateY(-3.75rem)}.lg\:hover\:-translate-x-16:hover{transform:translateX(-4rem)}.lg\:hover\:-translate-y-16:hover{transform:translateY(-4rem)}.lg\:hover\:-translate-x-20:hover{transform:translateX(-5rem)}.lg\:hover\:-translate-y-20:hover{transform:translateY(-5rem)}.lg\:hover\:-translate-x-22:hover{transform:translateX(-5.5rem)}.lg\:hover\:-translate-y-22:hover{transform:translateY(-5.5rem)}.lg\:hover\:-translate-x-24:hover{transform:translateX(-6rem)}.lg\:hover\:-translate-y-24:hover{transform:translateY(-6rem)}.lg\:hover\:-translate-x-25:hover{transform:translateX(-6.25rem)}.lg\:hover\:-translate-y-25:hover{transform:translateY(-6.25rem)}.lg\:hover\:-translate-x-26:hover{transform:translateX(-6.5rem)}.lg\:hover\:-translate-y-26:hover{transform:translateY(-6.5rem)}.lg\:hover\:-translate-x-28:hover{transform:translateX(-8rem)}.lg\:hover\:-translate-y-28:hover{transform:translateY(-8rem)}.lg\:hover\:-translate-x-30:hover{transform:translateX(-8.5rem)}.lg\:hover\:-translate-y-30:hover{transform:translateY(-8.5rem)}.lg\:hover\:-translate-x-32:hover{transform:translateX(-9rem)}.lg\:hover\:-translate-y-32:hover{transform:translateY(-9rem)}.lg\:hover\:-translate-x-40:hover{transform:translateX(-10rem)}.lg\:hover\:-translate-y-40:hover{transform:translateY(-10rem)}.lg\:hover\:-translate-x-48:hover{transform:translateX(-12rem)}.lg\:hover\:-translate-y-48:hover{transform:translateY(-12rem)}.lg\:hover\:-translate-x-52:hover{transform:translateX(-13rem)}.lg\:hover\:-translate-y-52:hover{transform:translateY(-13rem)}.lg\:hover\:-translate-x-56:hover{transform:translateX(-14rem)}.lg\:hover\:-translate-y-56:hover{transform:translateY(-14rem)}.lg\:hover\:-translate-x-60:hover{transform:translateX(-15rem)}.lg\:hover\:-translate-y-60:hover{transform:translateY(-15rem)}.lg\:hover\:-translate-x-64:hover{transform:translateX(-16rem)}.lg\:hover\:-translate-y-64:hover{transform:translateY(-16rem)}.lg\:hover\:-translate-x-68:hover{transform:translateX(-17rem)}.lg\:hover\:-translate-y-68:hover{transform:translateY(-17rem)}.lg\:hover\:-translate-x-px:hover{transform:translateX(-1px)}.lg\:hover\:-translate-y-px:hover{transform:translateY(-1px)}.lg\:hover\:-translate-x-0\.5:hover{transform:translateX(-.125rem)}.lg\:hover\:-translate-y-0\.5:hover{transform:translateY(-.125rem)}.lg\:hover\:-translate-x-1\.5:hover{transform:translateX(-.375rem)}.lg\:hover\:-translate-y-1\.5:hover{transform:translateY(-.375rem)}.lg\:hover\:-translate-x-2\.5:hover{transform:translateX(-.625rem)}.lg\:hover\:-translate-y-2\.5:hover{transform:translateY(-.625rem)}.lg\:hover\:-translate-x-7\.5:hover{transform:translateX(-1.875rem)}.lg\:hover\:-translate-y-7\.5:hover{transform:translateY(-1.875rem)}.lg\:hover\:-translate-x-full:hover{transform:translateX(-100%)}.lg\:hover\:-translate-y-full:hover{transform:translateY(-100%)}.lg\:hover\:-translate-x-1\/2:hover{transform:translateX(-50%)}.lg\:hover\:-translate-y-1\/2:hover{transform:translateY(-50%)}.lg\:hover\:translate-x-1\/2:hover{transform:translateX(50%)}.lg\:hover\:translate-y-1\/2:hover{transform:translateY(50%)}.lg\:hover\:translate-x-full:hover{transform:translateX(100%)}.lg\:hover\:translate-y-full:hover{transform:translateY(100%)}.lg\:focus\:translate-x-0:focus{transform:translateX(0)}.lg\:focus\:translate-y-0:focus{transform:translateY(0)}.lg\:focus\:translate-x-1:focus{transform:translateX(.25rem)}.lg\:focus\:translate-y-1:focus{transform:translateY(.25rem)}.lg\:focus\:translate-x-2:focus{transform:translateX(.5rem)}.lg\:focus\:translate-y-2:focus{transform:translateY(.5rem)}.lg\:focus\:translate-x-3:focus{transform:translateX(.75rem)}.lg\:focus\:translate-y-3:focus{transform:translateY(.75rem)}.lg\:focus\:translate-x-4:focus{transform:translateX(1rem)}.lg\:focus\:translate-y-4:focus{transform:translateY(1rem)}.lg\:focus\:translate-x-5:focus{transform:translateX(1.25rem)}.lg\:focus\:translate-y-5:focus{transform:translateY(1.25rem)}.lg\:focus\:translate-x-6:focus{transform:translateX(1.5rem)}.lg\:focus\:translate-y-6:focus{transform:translateY(1.5rem)}.lg\:focus\:translate-x-7:focus{transform:translateX(1.75rem)}.lg\:focus\:translate-y-7:focus{transform:translateY(1.75rem)}.lg\:focus\:translate-x-8:focus{transform:translateX(2rem)}.lg\:focus\:translate-y-8:focus{transform:translateY(2rem)}.lg\:focus\:translate-x-9:focus{transform:translateX(2.25rem)}.lg\:focus\:translate-y-9:focus{transform:translateY(2.25rem)}.lg\:focus\:translate-x-10:focus{transform:translateX(2.5rem)}.lg\:focus\:translate-y-10:focus{transform:translateY(2.5rem)}.lg\:focus\:translate-x-11:focus{transform:translateX(2.75rem)}.lg\:focus\:translate-y-11:focus{transform:translateY(2.75rem)}.lg\:focus\:translate-x-12:focus{transform:translateX(3rem)}.lg\:focus\:translate-y-12:focus{transform:translateY(3rem)}.lg\:focus\:translate-x-15:focus{transform:translateX(3.75rem)}.lg\:focus\:translate-y-15:focus{transform:translateY(3.75rem)}.lg\:focus\:translate-x-16:focus{transform:translateX(4rem)}.lg\:focus\:translate-y-16:focus{transform:translateY(4rem)}.lg\:focus\:translate-x-20:focus{transform:translateX(5rem)}.lg\:focus\:translate-y-20:focus{transform:translateY(5rem)}.lg\:focus\:translate-x-22:focus{transform:translateX(5.5rem)}.lg\:focus\:translate-y-22:focus{transform:translateY(5.5rem)}.lg\:focus\:translate-x-24:focus{transform:translateX(6rem)}.lg\:focus\:translate-y-24:focus{transform:translateY(6rem)}.lg\:focus\:translate-x-25:focus{transform:translateX(6.25rem)}.lg\:focus\:translate-y-25:focus{transform:translateY(6.25rem)}.lg\:focus\:translate-x-26:focus{transform:translateX(6.5rem)}.lg\:focus\:translate-y-26:focus{transform:translateY(6.5rem)}.lg\:focus\:translate-x-28:focus{transform:translateX(8rem)}.lg\:focus\:translate-y-28:focus{transform:translateY(8rem)}.lg\:focus\:translate-x-30:focus{transform:translateX(8.5rem)}.lg\:focus\:translate-y-30:focus{transform:translateY(8.5rem)}.lg\:focus\:translate-x-32:focus{transform:translateX(9rem)}.lg\:focus\:translate-y-32:focus{transform:translateY(9rem)}.lg\:focus\:translate-x-40:focus{transform:translateX(10rem)}.lg\:focus\:translate-y-40:focus{transform:translateY(10rem)}.lg\:focus\:translate-x-48:focus{transform:translateX(12rem)}.lg\:focus\:translate-y-48:focus{transform:translateY(12rem)}.lg\:focus\:translate-x-52:focus{transform:translateX(13rem)}.lg\:focus\:translate-y-52:focus{transform:translateY(13rem)}.lg\:focus\:translate-x-56:focus{transform:translateX(14rem)}.lg\:focus\:translate-y-56:focus{transform:translateY(14rem)}.lg\:focus\:translate-x-60:focus{transform:translateX(15rem)}.lg\:focus\:translate-y-60:focus{transform:translateY(15rem)}.lg\:focus\:translate-x-64:focus{transform:translateX(16rem)}.lg\:focus\:translate-y-64:focus{transform:translateY(16rem)}.lg\:focus\:translate-x-68:focus{transform:translateX(17rem)}.lg\:focus\:translate-y-68:focus{transform:translateY(17rem)}.lg\:focus\:translate-x-px:focus{transform:translateX(1px)}.lg\:focus\:translate-y-px:focus{transform:translateY(1px)}.lg\:focus\:translate-x-0\.5:focus{transform:translateX(.125rem)}.lg\:focus\:translate-y-0\.5:focus{transform:translateY(.125rem)}.lg\:focus\:translate-x-1\.5:focus{transform:translateX(.375rem)}.lg\:focus\:translate-y-1\.5:focus{transform:translateY(.375rem)}.lg\:focus\:translate-x-2\.5:focus{transform:translateX(.625rem)}.lg\:focus\:translate-y-2\.5:focus{transform:translateY(.625rem)}.lg\:focus\:translate-x-7\.5:focus{transform:translateX(1.875rem)}.lg\:focus\:translate-y-7\.5:focus{transform:translateY(1.875rem)}.lg\:focus\:-translate-x-1:focus{transform:translateX(-.25rem)}.lg\:focus\:-translate-y-1:focus{transform:translateY(-.25rem)}.lg\:focus\:-translate-x-2:focus{transform:translateX(-.5rem)}.lg\:focus\:-translate-y-2:focus{transform:translateY(-.5rem)}.lg\:focus\:-translate-x-3:focus{transform:translateX(-.75rem)}.lg\:focus\:-translate-y-3:focus{transform:translateY(-.75rem)}.lg\:focus\:-translate-x-4:focus{transform:translateX(-1rem)}.lg\:focus\:-translate-y-4:focus{transform:translateY(-1rem)}.lg\:focus\:-translate-x-5:focus{transform:translateX(-1.25rem)}.lg\:focus\:-translate-y-5:focus{transform:translateY(-1.25rem)}.lg\:focus\:-translate-x-6:focus{transform:translateX(-1.5rem)}.lg\:focus\:-translate-y-6:focus{transform:translateY(-1.5rem)}.lg\:focus\:-translate-x-7:focus{transform:translateX(-1.75rem)}.lg\:focus\:-translate-y-7:focus{transform:translateY(-1.75rem)}.lg\:focus\:-translate-x-8:focus{transform:translateX(-2rem)}.lg\:focus\:-translate-y-8:focus{transform:translateY(-2rem)}.lg\:focus\:-translate-x-9:focus{transform:translateX(-2.25rem)}.lg\:focus\:-translate-y-9:focus{transform:translateY(-2.25rem)}.lg\:focus\:-translate-x-10:focus{transform:translateX(-2.5rem)}.lg\:focus\:-translate-y-10:focus{transform:translateY(-2.5rem)}.lg\:focus\:-translate-x-11:focus{transform:translateX(-2.75rem)}.lg\:focus\:-translate-y-11:focus{transform:translateY(-2.75rem)}.lg\:focus\:-translate-x-12:focus{transform:translateX(-3rem)}.lg\:focus\:-translate-y-12:focus{transform:translateY(-3rem)}.lg\:focus\:-translate-x-15:focus{transform:translateX(-3.75rem)}.lg\:focus\:-translate-y-15:focus{transform:translateY(-3.75rem)}.lg\:focus\:-translate-x-16:focus{transform:translateX(-4rem)}.lg\:focus\:-translate-y-16:focus{transform:translateY(-4rem)}.lg\:focus\:-translate-x-20:focus{transform:translateX(-5rem)}.lg\:focus\:-translate-y-20:focus{transform:translateY(-5rem)}.lg\:focus\:-translate-x-22:focus{transform:translateX(-5.5rem)}.lg\:focus\:-translate-y-22:focus{transform:translateY(-5.5rem)}.lg\:focus\:-translate-x-24:focus{transform:translateX(-6rem)}.lg\:focus\:-translate-y-24:focus{transform:translateY(-6rem)}.lg\:focus\:-translate-x-25:focus{transform:translateX(-6.25rem)}.lg\:focus\:-translate-y-25:focus{transform:translateY(-6.25rem)}.lg\:focus\:-translate-x-26:focus{transform:translateX(-6.5rem)}.lg\:focus\:-translate-y-26:focus{transform:translateY(-6.5rem)}.lg\:focus\:-translate-x-28:focus{transform:translateX(-8rem)}.lg\:focus\:-translate-y-28:focus{transform:translateY(-8rem)}.lg\:focus\:-translate-x-30:focus{transform:translateX(-8.5rem)}.lg\:focus\:-translate-y-30:focus{transform:translateY(-8.5rem)}.lg\:focus\:-translate-x-32:focus{transform:translateX(-9rem)}.lg\:focus\:-translate-y-32:focus{transform:translateY(-9rem)}.lg\:focus\:-translate-x-40:focus{transform:translateX(-10rem)}.lg\:focus\:-translate-y-40:focus{transform:translateY(-10rem)}.lg\:focus\:-translate-x-48:focus{transform:translateX(-12rem)}.lg\:focus\:-translate-y-48:focus{transform:translateY(-12rem)}.lg\:focus\:-translate-x-52:focus{transform:translateX(-13rem)}.lg\:focus\:-translate-y-52:focus{transform:translateY(-13rem)}.lg\:focus\:-translate-x-56:focus{transform:translateX(-14rem)}.lg\:focus\:-translate-y-56:focus{transform:translateY(-14rem)}.lg\:focus\:-translate-x-60:focus{transform:translateX(-15rem)}.lg\:focus\:-translate-y-60:focus{transform:translateY(-15rem)}.lg\:focus\:-translate-x-64:focus{transform:translateX(-16rem)}.lg\:focus\:-translate-y-64:focus{transform:translateY(-16rem)}.lg\:focus\:-translate-x-68:focus{transform:translateX(-17rem)}.lg\:focus\:-translate-y-68:focus{transform:translateY(-17rem)}.lg\:focus\:-translate-x-px:focus{transform:translateX(-1px)}.lg\:focus\:-translate-y-px:focus{transform:translateY(-1px)}.lg\:focus\:-translate-x-0\.5:focus{transform:translateX(-.125rem)}.lg\:focus\:-translate-y-0\.5:focus{transform:translateY(-.125rem)}.lg\:focus\:-translate-x-1\.5:focus{transform:translateX(-.375rem)}.lg\:focus\:-translate-y-1\.5:focus{transform:translateY(-.375rem)}.lg\:focus\:-translate-x-2\.5:focus{transform:translateX(-.625rem)}.lg\:focus\:-translate-y-2\.5:focus{transform:translateY(-.625rem)}.lg\:focus\:-translate-x-7\.5:focus{transform:translateX(-1.875rem)}.lg\:focus\:-translate-y-7\.5:focus{transform:translateY(-1.875rem)}.lg\:focus\:-translate-x-full:focus{transform:translateX(-100%)}.lg\:focus\:-translate-y-full:focus{transform:translateY(-100%)}.lg\:focus\:-translate-x-1\/2:focus{transform:translateX(-50%)}.lg\:focus\:-translate-y-1\/2:focus{transform:translateY(-50%)}.lg\:focus\:translate-x-1\/2:focus{transform:translateX(50%)}.lg\:focus\:translate-y-1\/2:focus{transform:translateY(50%)}.lg\:focus\:translate-x-full:focus{transform:translateX(100%)}.lg\:focus\:translate-y-full:focus{transform:translateY(100%)}.lg\:scale-0{transform:scale(0)}.lg\:scale-x-0{transform:scaleX(0)}.lg\:scale-y-0{transform:scaleY(0)}.lg\:scale-50{transform:scale(.5)}.lg\:scale-x-50{transform:scaleX(.5)}.lg\:scale-y-50{transform:scaleY(.5)}.lg\:scale-75{transform:scale(.75)}.lg\:scale-x-75{transform:scaleX(.75)}.lg\:scale-y-75{transform:scaleY(.75)}.lg\:scale-90{transform:scale(.9)}.lg\:scale-x-90{transform:scaleX(.9)}.lg\:scale-y-90{transform:scaleY(.9)}.lg\:scale-95{transform:scale(.95)}.lg\:scale-x-95{transform:scaleX(.95)}.lg\:scale-y-95{transform:scaleY(.95)}.lg\:scale-100{transform:scale(1)}.lg\:scale-x-100{transform:scaleX(1)}.lg\:scale-y-100{transform:scaleY(1)}.lg\:scale-105{transform:scale(1.05)}.lg\:scale-x-105{transform:scaleX(1.05)}.lg\:scale-y-105{transform:scaleY(1.05)}.lg\:scale-110{transform:scale(1.1)}.lg\:scale-x-110{transform:scaleX(1.1)}.lg\:scale-y-110{transform:scaleY(1.1)}.lg\:scale-125{transform:scale(1.25)}.lg\:scale-x-125{transform:scaleX(1.25)}.lg\:scale-y-125{transform:scaleY(1.25)}.lg\:scale-150{transform:scale(1.5)}.lg\:scale-x-150{transform:scaleX(1.5)}.lg\:scale-y-150{transform:scaleY(1.5)}.lg\:hover\:scale-0:hover{transform:scale(0)}.lg\:hover\:scale-x-0:hover{transform:scaleX(0)}.lg\:hover\:scale-y-0:hover{transform:scaleY(0)}.lg\:hover\:scale-50:hover{transform:scale(.5)}.lg\:hover\:scale-x-50:hover{transform:scaleX(.5)}.lg\:hover\:scale-y-50:hover{transform:scaleY(.5)}.lg\:hover\:scale-75:hover{transform:scale(.75)}.lg\:hover\:scale-x-75:hover{transform:scaleX(.75)}.lg\:hover\:scale-y-75:hover{transform:scaleY(.75)}.lg\:hover\:scale-90:hover{transform:scale(.9)}.lg\:hover\:scale-x-90:hover{transform:scaleX(.9)}.lg\:hover\:scale-y-90:hover{transform:scaleY(.9)}.lg\:hover\:scale-95:hover{transform:scale(.95)}.lg\:hover\:scale-x-95:hover{transform:scaleX(.95)}.lg\:hover\:scale-y-95:hover{transform:scaleY(.95)}.lg\:hover\:scale-100:hover{transform:scale(1)}.lg\:hover\:scale-x-100:hover{transform:scaleX(1)}.lg\:hover\:scale-y-100:hover{transform:scaleY(1)}.lg\:hover\:scale-105:hover{transform:scale(1.05)}.lg\:hover\:scale-x-105:hover{transform:scaleX(1.05)}.lg\:hover\:scale-y-105:hover{transform:scaleY(1.05)}.lg\:hover\:scale-110:hover{transform:scale(1.1)}.lg\:hover\:scale-x-110:hover{transform:scaleX(1.1)}.lg\:hover\:scale-y-110:hover{transform:scaleY(1.1)}.lg\:hover\:scale-125:hover{transform:scale(1.25)}.lg\:hover\:scale-x-125:hover{transform:scaleX(1.25)}.lg\:hover\:scale-y-125:hover{transform:scaleY(1.25)}.lg\:hover\:scale-150:hover{transform:scale(1.5)}.lg\:hover\:scale-x-150:hover{transform:scaleX(1.5)}.lg\:hover\:scale-y-150:hover{transform:scaleY(1.5)}.lg\:focus\:scale-0:focus{transform:scale(0)}.lg\:focus\:scale-x-0:focus{transform:scaleX(0)}.lg\:focus\:scale-y-0:focus{transform:scaleY(0)}.lg\:focus\:scale-50:focus{transform:scale(.5)}.lg\:focus\:scale-x-50:focus{transform:scaleX(.5)}.lg\:focus\:scale-y-50:focus{transform:scaleY(.5)}.lg\:focus\:scale-75:focus{transform:scale(.75)}.lg\:focus\:scale-x-75:focus{transform:scaleX(.75)}.lg\:focus\:scale-y-75:focus{transform:scaleY(.75)}.lg\:focus\:scale-90:focus{transform:scale(.9)}.lg\:focus\:scale-x-90:focus{transform:scaleX(.9)}.lg\:focus\:scale-y-90:focus{transform:scaleY(.9)}.lg\:focus\:scale-95:focus{transform:scale(.95)}.lg\:focus\:scale-x-95:focus{transform:scaleX(.95)}.lg\:focus\:scale-y-95:focus{transform:scaleY(.95)}.lg\:focus\:scale-100:focus{transform:scale(1)}.lg\:focus\:scale-x-100:focus{transform:scaleX(1)}.lg\:focus\:scale-y-100:focus{transform:scaleY(1)}.lg\:focus\:scale-105:focus{transform:scale(1.05)}.lg\:focus\:scale-x-105:focus{transform:scaleX(1.05)}.lg\:focus\:scale-y-105:focus{transform:scaleY(1.05)}.lg\:focus\:scale-110:focus{transform:scale(1.1)}.lg\:focus\:scale-x-110:focus{transform:scaleX(1.1)}.lg\:focus\:scale-y-110:focus{transform:scaleY(1.1)}.lg\:focus\:scale-125:focus{transform:scale(1.25)}.lg\:focus\:scale-x-125:focus{transform:scaleX(1.25)}.lg\:focus\:scale-y-125:focus{transform:scaleY(1.25)}.lg\:focus\:scale-150:focus{transform:scale(1.5)}.lg\:focus\:scale-x-150:focus{transform:scaleX(1.5)}.lg\:focus\:scale-y-150:focus{transform:scaleY(1.5)}.lg\:rotate-0{transform:rotate(0)}.lg\:rotate-90{transform:rotate(90deg)}.lg\:rotate-135{transform:rotate(135deg)}.lg\:rotate-180{transform:rotate(180deg)}.lg\:-rotate-180{transform:rotate(-180deg)}.lg\:-rotate-135{transform:rotate(-135deg)}.lg\:-rotate-90{transform:rotate(-90deg)}.lg\:hover\:rotate-0:hover{transform:rotate(0)}.lg\:hover\:rotate-90:hover{transform:rotate(90deg)}.lg\:hover\:rotate-135:hover{transform:rotate(135deg)}.lg\:hover\:rotate-180:hover{transform:rotate(180deg)}.lg\:hover\:-rotate-180:hover{transform:rotate(-180deg)}.lg\:hover\:-rotate-135:hover{transform:rotate(-135deg)}.lg\:hover\:-rotate-90:hover{transform:rotate(-90deg)}.lg\:focus\:rotate-0:focus{transform:rotate(0)}.lg\:focus\:rotate-90:focus{transform:rotate(90deg)}.lg\:focus\:rotate-135:focus{transform:rotate(135deg)}.lg\:focus\:rotate-180:focus{transform:rotate(180deg)}.lg\:focus\:-rotate-180:focus{transform:rotate(-180deg)}.lg\:focus\:-rotate-135:focus{transform:rotate(-135deg)}.lg\:focus\:-rotate-90:focus{transform:rotate(-90deg)}.lg\:skew-x-0{transform:skewX(0)}.lg\:skew-y-0{transform:skewY(0)}.lg\:skew-x-1{transform:skewX(1deg)}.lg\:skew-y-1{transform:skewY(1deg)}.lg\:skew-x-2{transform:skewX(2deg)}.lg\:skew-y-2{transform:skewY(2deg)}.lg\:skew-x-3{transform:skewX(3deg)}.lg\:skew-y-3{transform:skewY(3deg)}.lg\:skew-x-6{transform:skewX(6deg)}.lg\:skew-y-6{transform:skewY(6deg)}.lg\:skew-x-12{transform:skewX(12deg)}.lg\:skew-y-12{transform:skewY(12deg)}.lg\:-skew-x-12{transform:skewX(-12deg)}.lg\:-skew-y-12{transform:skewY(-12deg)}.lg\:-skew-x-6{transform:skewX(-6deg)}.lg\:-skew-y-6{transform:skewY(-6deg)}.lg\:-skew-x-3{transform:skewX(-3deg)}.lg\:-skew-y-3{transform:skewY(-3deg)}.lg\:-skew-x-2{transform:skewX(-2deg)}.lg\:-skew-y-2{transform:skewY(-2deg)}.lg\:-skew-x-1{transform:skewX(-1deg)}.lg\:-skew-y-1{transform:skewY(-1deg)}.lg\:hover\:skew-x-0:hover{transform:skewX(0)}.lg\:hover\:skew-y-0:hover{transform:skewY(0)}.lg\:hover\:skew-x-1:hover{transform:skewX(1deg)}.lg\:hover\:skew-y-1:hover{transform:skewY(1deg)}.lg\:hover\:skew-x-2:hover{transform:skewX(2deg)}.lg\:hover\:skew-y-2:hover{transform:skewY(2deg)}.lg\:hover\:skew-x-3:hover{transform:skewX(3deg)}.lg\:hover\:skew-y-3:hover{transform:skewY(3deg)}.lg\:hover\:skew-x-6:hover{transform:skewX(6deg)}.lg\:hover\:skew-y-6:hover{transform:skewY(6deg)}.lg\:hover\:skew-x-12:hover{transform:skewX(12deg)}.lg\:hover\:skew-y-12:hover{transform:skewY(12deg)}.lg\:hover\:-skew-x-12:hover{transform:skewX(-12deg)}.lg\:hover\:-skew-y-12:hover{transform:skewY(-12deg)}.lg\:hover\:-skew-x-6:hover{transform:skewX(-6deg)}.lg\:hover\:-skew-y-6:hover{transform:skewY(-6deg)}.lg\:hover\:-skew-x-3:hover{transform:skewX(-3deg)}.lg\:hover\:-skew-y-3:hover{transform:skewY(-3deg)}.lg\:hover\:-skew-x-2:hover{transform:skewX(-2deg)}.lg\:hover\:-skew-y-2:hover{transform:skewY(-2deg)}.lg\:hover\:-skew-x-1:hover{transform:skewX(-1deg)}.lg\:hover\:-skew-y-1:hover{transform:skewY(-1deg)}.lg\:focus\:skew-x-0:focus{transform:skewX(0)}.lg\:focus\:skew-y-0:focus{transform:skewY(0)}.lg\:focus\:skew-x-1:focus{transform:skewX(1deg)}.lg\:focus\:skew-y-1:focus{transform:skewY(1deg)}.lg\:focus\:skew-x-2:focus{transform:skewX(2deg)}.lg\:focus\:skew-y-2:focus{transform:skewY(2deg)}.lg\:focus\:skew-x-3:focus{transform:skewX(3deg)}.lg\:focus\:skew-y-3:focus{transform:skewY(3deg)}.lg\:focus\:skew-x-6:focus{transform:skewX(6deg)}.lg\:focus\:skew-y-6:focus{transform:skewY(6deg)}.lg\:focus\:skew-x-12:focus{transform:skewX(12deg)}.lg\:focus\:skew-y-12:focus{transform:skewY(12deg)}.lg\:focus\:-skew-x-12:focus{transform:skewX(-12deg)}.lg\:focus\:-skew-y-12:focus{transform:skewY(-12deg)}.lg\:focus\:-skew-x-6:focus{transform:skewX(-6deg)}.lg\:focus\:-skew-y-6:focus{transform:skewY(-6deg)}.lg\:focus\:-skew-x-3:focus{transform:skewX(-3deg)}.lg\:focus\:-skew-y-3:focus{transform:skewY(-3deg)}.lg\:focus\:-skew-x-2:focus{transform:skewX(-2deg)}.lg\:focus\:-skew-y-2:focus{transform:skewY(-2deg)}.lg\:focus\:-skew-x-1:focus{transform:skewX(-1deg)}.lg\:focus\:-skew-y-1:focus{transform:skewY(-1deg)}.lg\:transform-border{transform-box:border-box}.lg\:transform-fill{transform-box:fill-box}.lg\:transform-view{transform-box:view-box}}@media (min-width:76.26em){.xl\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px*(1 - var(--space-y-reverse)));margin-bottom:calc(0px*var(--space-y-reverse))}.xl\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px*var(--space-x-reverse));margin-left:calc(0px*(1 - var(--space-x-reverse)))}.xl\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.25rem*var(--space-y-reverse))}.xl\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.25rem*var(--space-x-reverse));margin-left:calc(0.25rem*(1 - var(--space-x-reverse)))}.xl\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.5rem*var(--space-y-reverse))}.xl\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.5rem*var(--space-x-reverse));margin-left:calc(0.5rem*(1 - var(--space-x-reverse)))}.xl\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.75rem*var(--space-y-reverse))}.xl\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.75rem*var(--space-x-reverse));margin-left:calc(0.75rem*(1 - var(--space-x-reverse)))}.xl\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1rem*var(--space-y-reverse))}.xl\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem*var(--space-x-reverse));margin-left:calc(1rem*(1 - var(--space-x-reverse)))}.xl\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem*var(--space-y-reverse))}.xl\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem*var(--space-x-reverse));margin-left:calc(1.25rem*(1 - var(--space-x-reverse)))}.xl\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem*var(--space-y-reverse))}.xl\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem*var(--space-x-reverse));margin-left:calc(1.5rem*(1 - var(--space-x-reverse)))}.xl\:space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.75rem*var(--space-y-reverse))}.xl\:space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.75rem*var(--space-x-reverse));margin-left:calc(1.75rem*(1 - var(--space-x-reverse)))}.xl\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2rem*var(--space-y-reverse))}.xl\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem*var(--space-x-reverse));margin-left:calc(2rem*(1 - var(--space-x-reverse)))}.xl\:space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.25rem*var(--space-y-reverse))}.xl\:space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.25rem*var(--space-x-reverse));margin-left:calc(2.25rem*(1 - var(--space-x-reverse)))}.xl\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem*var(--space-y-reverse))}.xl\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem*var(--space-x-reverse));margin-left:calc(2.5rem*(1 - var(--space-x-reverse)))}.xl\:space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(2.75rem*var(--space-y-reverse))}.xl\:space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.75rem*var(--space-x-reverse));margin-left:calc(2.75rem*(1 - var(--space-x-reverse)))}.xl\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3rem*var(--space-y-reverse))}.xl\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem*var(--space-x-reverse));margin-left:calc(3rem*(1 - var(--space-x-reverse)))}.xl\:space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(3.75rem*var(--space-y-reverse))}.xl\:space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3.75rem*var(--space-x-reverse));margin-left:calc(3.75rem*(1 - var(--space-x-reverse)))}.xl\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(4rem*var(--space-y-reverse))}.xl\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem*var(--space-x-reverse));margin-left:calc(4rem*(1 - var(--space-x-reverse)))}.xl\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5rem*var(--space-y-reverse))}.xl\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem*var(--space-x-reverse));margin-left:calc(5rem*(1 - var(--space-x-reverse)))}.xl\:space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(5.5rem*var(--space-y-reverse))}.xl\:space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5.5rem*var(--space-x-reverse));margin-left:calc(5.5rem*(1 - var(--space-x-reverse)))}.xl\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6rem*var(--space-y-reverse))}.xl\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem*var(--space-x-reverse));margin-left:calc(6rem*(1 - var(--space-x-reverse)))}.xl\:space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.25rem*var(--space-y-reverse))}.xl\:space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.25rem*var(--space-x-reverse));margin-left:calc(6.25rem*(1 - var(--space-x-reverse)))}.xl\:space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(6.5rem*var(--space-y-reverse))}.xl\:space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6.5rem*var(--space-x-reverse));margin-left:calc(6.5rem*(1 - var(--space-x-reverse)))}.xl\:space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8rem*var(--space-y-reverse))}.xl\:space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem*var(--space-x-reverse));margin-left:calc(8rem*(1 - var(--space-x-reverse)))}.xl\:space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(8.5rem*var(--space-y-reverse))}.xl\:space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8.5rem*var(--space-x-reverse));margin-left:calc(8.5rem*(1 - var(--space-x-reverse)))}.xl\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(9rem*var(--space-y-reverse))}.xl\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(9rem*var(--space-x-reverse));margin-left:calc(9rem*(1 - var(--space-x-reverse)))}.xl\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(10rem*var(--space-y-reverse))}.xl\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem*var(--space-x-reverse));margin-left:calc(10rem*(1 - var(--space-x-reverse)))}.xl\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(12rem*var(--space-y-reverse))}.xl\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem*var(--space-x-reverse));margin-left:calc(12rem*(1 - var(--space-x-reverse)))}.xl\:space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(13rem*var(--space-y-reverse))}.xl\:space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(13rem*var(--space-x-reverse));margin-left:calc(13rem*(1 - var(--space-x-reverse)))}.xl\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(14rem*var(--space-y-reverse))}.xl\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem*var(--space-x-reverse));margin-left:calc(14rem*(1 - var(--space-x-reverse)))}.xl\:space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(15rem*var(--space-y-reverse))}.xl\:space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(15rem*var(--space-x-reverse));margin-left:calc(15rem*(1 - var(--space-x-reverse)))}.xl\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(16rem*var(--space-y-reverse))}.xl\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem*var(--space-x-reverse));margin-left:calc(16rem*(1 - var(--space-x-reverse)))}.xl\:space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(17rem*var(--space-y-reverse))}.xl\:space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(17rem*var(--space-x-reverse));margin-left:calc(17rem*(1 - var(--space-x-reverse)))}.xl\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px*(1 - var(--space-y-reverse)));margin-bottom:calc(1px*var(--space-y-reverse))}.xl\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px*var(--space-x-reverse));margin-left:calc(1px*(1 - var(--space-x-reverse)))}.xl\:space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.125rem*var(--space-y-reverse))}.xl\:space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.125rem*var(--space-x-reverse));margin-left:calc(0.125rem*(1 - var(--space-x-reverse)))}.xl\:space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.375rem*var(--space-y-reverse))}.xl\:space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.375rem*var(--space-x-reverse));margin-left:calc(0.375rem*(1 - var(--space-x-reverse)))}.xl\:space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.625rem*var(--space-y-reverse))}.xl\:space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.625rem*var(--space-x-reverse));margin-left:calc(0.625rem*(1 - var(--space-x-reverse)))}.xl\:space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.875rem*var(--space-y-reverse))}.xl\:space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.875rem*var(--space-x-reverse));margin-left:calc(1.875rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.25rem*var(--space-y-reverse))}.xl\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.25rem*var(--space-x-reverse));margin-left:calc(-0.25rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.5rem*var(--space-y-reverse))}.xl\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.5rem*var(--space-x-reverse));margin-left:calc(-0.5rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.75rem*var(--space-y-reverse))}.xl\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.75rem*var(--space-x-reverse));margin-left:calc(-0.75rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem*var(--space-y-reverse))}.xl\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem*var(--space-x-reverse));margin-left:calc(-1rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem*var(--space-y-reverse))}.xl\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem*var(--space-x-reverse));margin-left:calc(-1.25rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem*var(--space-y-reverse))}.xl\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem*var(--space-x-reverse));margin-left:calc(-1.5rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-7>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.75rem*var(--space-y-reverse))}.xl\:-space-x-7>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.75rem*var(--space-x-reverse));margin-left:calc(-1.75rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem*var(--space-y-reverse))}.xl\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem*var(--space-x-reverse));margin-left:calc(-2rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-9>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.25rem*var(--space-y-reverse))}.xl\:-space-x-9>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.25rem*var(--space-x-reverse));margin-left:calc(-2.25rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem*var(--space-y-reverse))}.xl\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem*var(--space-x-reverse));margin-left:calc(-2.5rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-11>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-2.75rem*var(--space-y-reverse))}.xl\:-space-x-11>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.75rem*var(--space-x-reverse));margin-left:calc(-2.75rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem*var(--space-y-reverse))}.xl\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem*var(--space-x-reverse));margin-left:calc(-3rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-15>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-3.75rem*var(--space-y-reverse))}.xl\:-space-x-15>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3.75rem*var(--space-x-reverse));margin-left:calc(-3.75rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem*var(--space-y-reverse))}.xl\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem*var(--space-x-reverse));margin-left:calc(-4rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem*var(--space-y-reverse))}.xl\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem*var(--space-x-reverse));margin-left:calc(-5rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-22>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-5.5rem*var(--space-y-reverse))}.xl\:-space-x-22>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5.5rem*var(--space-x-reverse));margin-left:calc(-5.5rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem*var(--space-y-reverse))}.xl\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem*var(--space-x-reverse));margin-left:calc(-6rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-25>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.25rem*var(--space-y-reverse))}.xl\:-space-x-25>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.25rem*var(--space-x-reverse));margin-left:calc(-6.25rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-26>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-6.5rem*var(--space-y-reverse))}.xl\:-space-x-26>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6.5rem*var(--space-x-reverse));margin-left:calc(-6.5rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-28>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem*var(--space-y-reverse))}.xl\:-space-x-28>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem*var(--space-x-reverse));margin-left:calc(-8rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-30>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-8.5rem*var(--space-y-reverse))}.xl\:-space-x-30>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8.5rem*var(--space-x-reverse));margin-left:calc(-8.5rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-9rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-9rem*var(--space-y-reverse))}.xl\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-9rem*var(--space-x-reverse));margin-left:calc(-9rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem*var(--space-y-reverse))}.xl\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem*var(--space-x-reverse));margin-left:calc(-10rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem*var(--space-y-reverse))}.xl\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem*var(--space-x-reverse));margin-left:calc(-12rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-52>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-13rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-13rem*var(--space-y-reverse))}.xl\:-space-x-52>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-13rem*var(--space-x-reverse));margin-left:calc(-13rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem*var(--space-y-reverse))}.xl\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem*var(--space-x-reverse));margin-left:calc(-14rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-60>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-15rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-15rem*var(--space-y-reverse))}.xl\:-space-x-60>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-15rem*var(--space-x-reverse));margin-left:calc(-15rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem*var(--space-y-reverse))}.xl\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem*var(--space-x-reverse));margin-left:calc(-16rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-68>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-17rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-17rem*var(--space-y-reverse))}.xl\:-space-x-68>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-17rem*var(--space-x-reverse));margin-left:calc(-17rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px*(1 - var(--space-y-reverse)));margin-bottom:calc(-1px*var(--space-y-reverse))}.xl\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px*var(--space-x-reverse));margin-left:calc(-1px*(1 - var(--space-x-reverse)))}.xl\:-space-y-0\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.125rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.125rem*var(--space-y-reverse))}.xl\:-space-x-0\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.125rem*var(--space-x-reverse));margin-left:calc(-0.125rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-1\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.375rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.375rem*var(--space-y-reverse))}.xl\:-space-x-1\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.375rem*var(--space-x-reverse));margin-left:calc(-0.375rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-2\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-0.625rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-0.625rem*var(--space-y-reverse))}.xl\:-space-x-2\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-0.625rem*var(--space-x-reverse));margin-left:calc(-0.625rem*(1 - var(--space-x-reverse)))}.xl\:-space-y-7\.5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.875rem*(1 - var(--space-y-reverse)));margin-bottom:calc(-1.875rem*var(--space-y-reverse))}.xl\:-space-x-7\.5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.875rem*var(--space-x-reverse));margin-left:calc(-1.875rem*(1 - var(--space-x-reverse)))}.xl\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.xl\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.xl\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px*var(--divide-y-reverse))}.xl\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px*var(--divide-x-reverse));border-left-width:calc(0px*(1 - var(--divide-x-reverse)))}.xl\:divide-y-1>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.xl\:divide-x-1>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.xl\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px*var(--divide-y-reverse))}.xl\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px*var(--divide-x-reverse));border-left-width:calc(2px*(1 - var(--divide-x-reverse)))}.xl\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px*var(--divide-y-reverse))}.xl\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px*var(--divide-x-reverse));border-left-width:calc(4px*(1 - var(--divide-x-reverse)))}.xl\:divide-y-5>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(5px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(5px*var(--divide-y-reverse))}.xl\:divide-x-5>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(5px*var(--divide-x-reverse));border-left-width:calc(5px*(1 - var(--divide-x-reverse)))}.xl\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px*var(--divide-y-reverse))}.xl\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px*var(--divide-x-reverse));border-left-width:calc(8px*(1 - var(--divide-x-reverse)))}.xl\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.xl\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.xl\:divide-y-DEFAULT>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.xl\:divide-x-DEFAULT>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px*var(--divide-x-reverse));border-left-width:calc(1px*(1 - var(--divide-x-reverse)))}.xl\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.xl\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.xl\:divide-transparent>:not(template)~:not(template){border-color:transparent}.xl\:divide-current>:not(template)~:not(template){border-color:currentColor}.xl\:divide-black>:not(template)~:not(template){border-color:#000}.xl\:divide-white>:not(template)~:not(template){border-color:#fff}.xl\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.xl\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.xl\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.xl\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.xl\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.xl\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.xl\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.xl\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.xl\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.xl\:divide-gray-DEFAULT>:not(template)~:not(template),.xl\:divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.xl\:divide-red>:not(template)~:not(template){border-color:#d64343}.xl\:divide-orange>:not(template)~:not(template){border-color:#eb6437}.xl\:divide-yellow>:not(template)~:not(template){border-color:#f8da30}.xl\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.xl\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.xl\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.xl\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.xl\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.xl\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.xl\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.xl\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.xl\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.xl\:divide-green-DEFAULT>:not(template)~:not(template),.xl\:divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.xl\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.xl\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.xl\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.xl\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.xl\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.xl\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.xl\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.xl\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.xl\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.xl\:divide-teal-DEFAULT>:not(template)~:not(template),.xl\:divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.xl\:divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.xl\:divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.xl\:divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.xl\:divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.xl\:divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.xl\:divide-blue-500>:not(template)~:not(template){border-color:#058aff}.xl\:divide-blue-600>:not(template)~:not(template){border-color:#0075db}.xl\:divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.xl\:divide-blue-800>:not(template)~:not(template){border-color:#00498a}.xl\:divide-blue-900>:not(template)~:not(template){border-color:#003461}.xl\:divide-blue-DEFAULT>:not(template)~:not(template),.xl\:divide-blue>:not(template)~:not(template){border-color:#0075db}.xl\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.xl\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.xl\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.xl\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.xl\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.xl\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.xl\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.xl\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.xl\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.xl\:divide-indigo-DEFAULT>:not(template)~:not(template),.xl\:divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.xl\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.xl\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.xl\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.xl\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.xl\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.xl\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.xl\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.xl\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.xl\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.xl\:divide-purple-DEFAULT>:not(template)~:not(template),.xl\:divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.xl\:divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.xl\:divide-inherit>:not(template)~:not(template){border-color:inherit}.xl\:divide-amber>:not(template)~:not(template){border-color:#d78737}.xl\:divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.xl\:divide-ardoise>:not(template)~:not(template){border-color:#596a82}.xl\:divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.xl\:divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.xl\:divide-lightBlue-active>:not(template)~:not(template),.xl\:divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.xl\:divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.xl\:divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.xl\:divide-gold>:not(template)~:not(template){border-color:#bd9e56}.xl\:divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.xl\:divide-grenadine>:not(template)~:not(template){border-color:#c35078}.xl\:divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.xl\:divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.xl\:divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.xl\:divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.xl\:divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.xl\:divide-mahogany>:not(template)~:not(template){border-color:#57142e}.xl\:divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.xl\:divide-ocher>:not(template)~:not(template){border-color:#c29614}.xl\:divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.xl\:divide-pine>:not(template)~:not(template){border-color:#144d52}.xl\:divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.xl\:divide-platinum-active>:not(template)~:not(template),.xl\:divide-platinum>:not(template)~:not(template){border-color:#000}.xl\:divide-prune>:not(template)~:not(template){border-color:#661456}.xl\:divide-prune-active>:not(template)~:not(template){border-color:#72085d}.xl\:divide-sand>:not(template)~:not(template){border-color:#d7be88}.xl\:divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.xl\:divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.xl\:divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.xl\:divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.xl\:divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.xl\:divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.xl\:divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.xl\:divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.xl\:divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.xl\:divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.xl\:divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.xl\:divide-waterGreen>:not(template)~:not(template){border-color:#007571}.xl\:divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.xl\:divide-deepRed>:not(template)~:not(template){border-color:#c32222}.xl\:divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.xl\:divide-emerald>:not(template)~:not(template){border-color:#14a33a}.xl\:divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.xl\:divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.xl\:divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.xl\:divide-red-active>:not(template)~:not(template){border-color:#e13737}.xl\:divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.xl\:divide-white-button-active>:not(template)~:not(template),.xl\:divide-white-button>:not(template)~:not(template){border-color:#fff}.xl\:divide-code>:not(template)~:not(template){border-color:#3f3d57}.xl\:divide-code-active>:not(template)~:not(template){border-color:#37354b}.xl\:divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.xl\:divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.xl\:divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.xl\:divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.xl\:divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.xl\:divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.xl\:divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.xl\:divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.xl\:divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.xl\:divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-transparent>:not(template)~:not(template){border-color:transparent}.group:hover .xl\:group-hover\:divide-current>:not(template)~:not(template){border-color:currentColor}.group:hover .xl\:group-hover\:divide-black>:not(template)~:not(template){border-color:#000}.group:hover .xl\:group-hover\:divide-white>:not(template)~:not(template){border-color:#fff}.group:hover .xl\:group-hover\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-DEFAULT>:not(template)~:not(template),.group:hover .xl\:group-hover\:divide-gray>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-red>:not(template)~:not(template){border-color:#d64343}.group:hover .xl\:group-hover\:divide-orange>:not(template)~:not(template){border-color:#eb6437}.group:hover .xl\:group-hover\:divide-yellow>:not(template)~:not(template){border-color:#f8da30}.group:hover .xl\:group-hover\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-green-DEFAULT>:not(template)~:not(template),.group:hover .xl\:group-hover\:divide-green>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-teal-DEFAULT>:not(template)~:not(template),.group:hover .xl\:group-hover\:divide-teal>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-blue-50>:not(template)~:not(template){border-color:#d1eaff}.group:hover .xl\:group-hover\:divide-blue-100>:not(template)~:not(template){border-color:#a8d7ff}.group:hover .xl\:group-hover\:divide-blue-200>:not(template)~:not(template){border-color:#80c4ff}.group:hover .xl\:group-hover\:divide-blue-300>:not(template)~:not(template){border-color:#57b0ff}.group:hover .xl\:group-hover\:divide-blue-400>:not(template)~:not(template){border-color:#2e9dff}.group:hover .xl\:group-hover\:divide-blue-500>:not(template)~:not(template){border-color:#058aff}.group:hover .xl\:group-hover\:divide-blue-600>:not(template)~:not(template){border-color:#0075db}.group:hover .xl\:group-hover\:divide-blue-700>:not(template)~:not(template){border-color:#005fb3}.group:hover .xl\:group-hover\:divide-blue-800>:not(template)~:not(template){border-color:#00498a}.group:hover .xl\:group-hover\:divide-blue-900>:not(template)~:not(template){border-color:#003461}.group:hover .xl\:group-hover\:divide-blue-DEFAULT>:not(template)~:not(template),.group:hover .xl\:group-hover\:divide-blue>:not(template)~:not(template){border-color:#0075db}.group:hover .xl\:group-hover\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-indigo-DEFAULT>:not(template)~:not(template),.group:hover .xl\:group-hover\:divide-indigo>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-purple-DEFAULT>:not(template)~:not(template),.group:hover .xl\:group-hover\:divide-purple>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-pink>:not(template)~:not(template){--divide-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-inherit>:not(template)~:not(template){border-color:inherit}.group:hover .xl\:group-hover\:divide-amber>:not(template)~:not(template){border-color:#d78737}.group:hover .xl\:group-hover\:divide-amber-active>:not(template)~:not(template){border-color:#e3872b}.group:hover .xl\:group-hover\:divide-ardoise>:not(template)~:not(template){border-color:#596a82}.group:hover .xl\:group-hover\:divide-ardoise-active>:not(template)~:not(template){border-color:#476794}.group:hover .xl\:group-hover\:divide-blue-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .xl\:group-hover\:divide-lightBlue-active>:not(template)~:not(template),.group:hover .xl\:group-hover\:divide-lightBlue>:not(template)~:not(template){border-color:rgba(0,85,138,.1)}.group:hover .xl\:group-hover\:divide-deepBlue>:not(template)~:not(template){border-color:#0e346c}.group:hover .xl\:group-hover\:divide-deepBlue-active>:not(template)~:not(template){border-color:#0a3f8f}.group:hover .xl\:group-hover\:divide-gold>:not(template)~:not(template){border-color:#bd9e56}.group:hover .xl\:group-hover\:divide-gold-active>:not(template)~:not(template){border-color:#c9a34a}.group:hover .xl\:group-hover\:divide-grenadine>:not(template)~:not(template){border-color:#c35078}.group:hover .xl\:group-hover\:divide-grenadine-active>:not(template)~:not(template){border-color:#cf4475}.group:hover .xl\:group-hover\:divide-kiwi>:not(template)~:not(template){border-color:#9a9f1e}.group:hover .xl\:group-hover\:divide-kiwi-active>:not(template)~:not(template){border-color:#a3a815}.group:hover .xl\:group-hover\:divide-lilas>:not(template)~:not(template){border-color:#7ea1d3}.group:hover .xl\:group-hover\:divide-lilas-active>:not(template)~:not(template){border-color:#75a0db}.group:hover .xl\:group-hover\:divide-mahogany>:not(template)~:not(template){border-color:#57142e}.group:hover .xl\:group-hover\:divide-mahogany-active>:not(template)~:not(template){border-color:#610a2b}.group:hover .xl\:group-hover\:divide-ocher>:not(template)~:not(template){border-color:#c29614}.group:hover .xl\:group-hover\:divide-ocher-active>:not(template)~:not(template){border-color:#cd9c0a}.group:hover .xl\:group-hover\:divide-pine>:not(template)~:not(template){border-color:#144d52}.group:hover .xl\:group-hover\:divide-pine-active>:not(template)~:not(template){border-color:#0a555c}.group:hover .xl\:group-hover\:divide-platinum-active>:not(template)~:not(template),.group:hover .xl\:group-hover\:divide-platinum>:not(template)~:not(template){border-color:#000}.group:hover .xl\:group-hover\:divide-prune>:not(template)~:not(template){border-color:#661456}.group:hover .xl\:group-hover\:divide-prune-active>:not(template)~:not(template){border-color:#72085d}.group:hover .xl\:group-hover\:divide-sand>:not(template)~:not(template){border-color:#d7be88}.group:hover .xl\:group-hover\:divide-sand-active>:not(template)~:not(template){border-color:#dfc181}.group:hover .xl\:group-hover\:divide-sandPearl>:not(template)~:not(template){border-color:#f0e5d6}.group:hover .xl\:group-hover\:divide-sandPearl-active>:not(template)~:not(template){border-color:#f2e6d4}.group:hover .xl\:group-hover\:divide-silver>:not(template)~:not(template){border-color:#b1b2b4}.group:hover .xl\:group-hover\:divide-silver-active>:not(template)~:not(template){border-color:#a9afbc}.group:hover .xl\:group-hover\:divide-skyBlue>:not(template)~:not(template){border-color:#98d2d7}.group:hover .xl\:group-hover\:divide-skyBlue-active>:not(template)~:not(template){border-color:#91d8de}.group:hover .xl\:group-hover\:divide-southSea>:not(template)~:not(template){border-color:#9dc9cd}.group:hover .xl\:group-hover\:divide-southSea-active>:not(template)~:not(template){border-color:#95ced5}.group:hover .xl\:group-hover\:divide-turquoise>:not(template)~:not(template){border-color:#14a5c2}.group:hover .xl\:group-hover\:divide-turquoise-active>:not(template)~:not(template){border-color:#0aaccd}.group:hover .xl\:group-hover\:divide-waterGreen>:not(template)~:not(template){border-color:#007571}.group:hover .xl\:group-hover\:divide-waterGreen-active>:not(template)~:not(template){border-color:#00a8a3}.group:hover .xl\:group-hover\:divide-deepRed>:not(template)~:not(template){border-color:#c32222}.group:hover .xl\:group-hover\:divide-deepRed-active>:not(template)~:not(template){border-color:#cf1717}.group:hover .xl\:group-hover\:divide-emerald>:not(template)~:not(template){border-color:#14a33a}.group:hover .xl\:group-hover\:divide-emerald-active>:not(template)~:not(template){border-color:#0bad36}.group:hover .xl\:group-hover\:divide-greenLight>:not(template)~:not(template){--divide-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-orange-active>:not(template)~:not(template){border-color:#f65f2c}.group:hover .xl\:group-hover\:divide-red-active>:not(template)~:not(template){border-color:#e13737}.group:hover .xl\:group-hover\:divide-white-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .xl\:group-hover\:divide-white-button-active>:not(template)~:not(template),.group:hover .xl\:group-hover\:divide-white-button>:not(template)~:not(template){border-color:#fff}.group:hover .xl\:group-hover\:divide-code>:not(template)~:not(template){border-color:#3f3d57}.group:hover .xl\:group-hover\:divide-code-active>:not(template)~:not(template){border-color:#37354b}.group:hover .xl\:group-hover\:divide-gray-lighter>:not(template)~:not(template){--divide-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-lighter-active>:not(template)~:not(template){border-color:#ebebeb}.group:hover .xl\:group-hover\:divide-gray-light>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-medium>:not(template)~:not(template){--divide-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-darker>:not(template)~:not(template){--divide-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-darker-active>:not(template)~:not(template){border-color:#14a5c2}.group:hover .xl\:group-hover\:divide-api-default>:not(template)~:not(template){--divide-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-gray-xxl>:not(template)~:not(template){--divide-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--divide-opacity))}.group:hover .xl\:group-hover\:divide-line-even>:not(template)~:not(template){border-color:#f3f6f7}.group:hover .xl\:group-hover\:divide-DEFAULT>:not(template)~:not(template){--divide-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--divide-opacity))}.xl\:divide-solid>:not(template)~:not(template){border-style:solid}.xl\:divide-dashed>:not(template)~:not(template){border-style:dashed}.xl\:divide-dotted>:not(template)~:not(template){border-style:dotted}.xl\:divide-double>:not(template)~:not(template){border-style:double}.xl\:divide-none>:not(template)~:not(template){border-style:none}.xl\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.xl\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.xl\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.xl\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.xl\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.group:hover .xl\:group-hover\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.group:hover .xl\:group-hover\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.group:hover .xl\:group-hover\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.group:hover .xl\:group-hover\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.group:hover .xl\:group-hover\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.xl\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.xl\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.xl\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.xl\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.xl\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.xl\:bg-fixed{background-attachment:fixed}.xl\:bg-local{background-attachment:local}.xl\:bg-scroll{background-attachment:scroll}.xl\:bg-clip-border{background-clip:border-box}.xl\:bg-clip-padding{background-clip:padding-box}.xl\:bg-clip-content{background-clip:content-box}.xl\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.xl\:bg-transparent{background-color:transparent}.xl\:bg-current{background-color:currentColor}.xl\:bg-black{background-color:#000}.xl\:bg-white{background-color:#fff}.xl\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.xl\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.xl\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.xl\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.xl\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.xl\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.xl\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.xl\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.xl\:bg-gray,.xl\:bg-gray-DEFAULT{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:bg-red{background-color:#d64343}.xl\:bg-orange{background-color:#eb6437}.xl\:bg-yellow{background-color:#f8da30}.xl\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.xl\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.xl\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.xl\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.xl\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.xl\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.xl\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.xl\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.xl\:bg-green,.xl\:bg-green-DEFAULT{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.xl\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.xl\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.xl\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.xl\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.xl\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.xl\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.xl\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.xl\:bg-teal,.xl\:bg-teal-DEFAULT{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:bg-blue-50{background-color:#d1eaff}.xl\:bg-blue-100{background-color:#a8d7ff}.xl\:bg-blue-200{background-color:#80c4ff}.xl\:bg-blue-300{background-color:#57b0ff}.xl\:bg-blue-400{background-color:#2e9dff}.xl\:bg-blue-500{background-color:#058aff}.xl\:bg-blue-600{background-color:#0075db}.xl\:bg-blue-700{background-color:#005fb3}.xl\:bg-blue-800{background-color:#00498a}.xl\:bg-blue-900{background-color:#003461}.xl\:bg-blue,.xl\:bg-blue-DEFAULT{background-color:#0075db}.xl\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.xl\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.xl\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.xl\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.xl\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.xl\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.xl\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.xl\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.xl\:bg-indigo,.xl\:bg-indigo-DEFAULT{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.xl\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.xl\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.xl\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.xl\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.xl\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.xl\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.xl\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.xl\:bg-purple,.xl\:bg-purple-DEFAULT{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:bg-pink{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.xl\:bg-inherit{background-color:inherit}.xl\:bg-amber{background-color:#d78737}.xl\:bg-amber-active{background-color:#e3872b}.xl\:bg-ardoise{background-color:#596a82}.xl\:bg-ardoise-active{background-color:#476794}.xl\:bg-blue-active{background-color:#14a5c2}.xl\:bg-lightBlue,.xl\:bg-lightBlue-active{background-color:rgba(0,85,138,.1)}.xl\:bg-deepBlue{background-color:#0e346c}.xl\:bg-deepBlue-active{background-color:#0a3f8f}.xl\:bg-gold{background-color:#bd9e56}.xl\:bg-gold-active{background-color:#c9a34a}.xl\:bg-grenadine{background-color:#c35078}.xl\:bg-grenadine-active{background-color:#cf4475}.xl\:bg-kiwi{background-color:#9a9f1e}.xl\:bg-kiwi-active{background-color:#a3a815}.xl\:bg-lilas{background-color:#7ea1d3}.xl\:bg-lilas-active{background-color:#75a0db}.xl\:bg-mahogany{background-color:#57142e}.xl\:bg-mahogany-active{background-color:#610a2b}.xl\:bg-ocher{background-color:#c29614}.xl\:bg-ocher-active{background-color:#cd9c0a}.xl\:bg-pine{background-color:#144d52}.xl\:bg-pine-active{background-color:#0a555c}.xl\:bg-platinum,.xl\:bg-platinum-active{background-color:#000}.xl\:bg-prune{background-color:#661456}.xl\:bg-prune-active{background-color:#72085d}.xl\:bg-sand{background-color:#d7be88}.xl\:bg-sand-active{background-color:#dfc181}.xl\:bg-sandPearl{background-color:#f0e5d6}.xl\:bg-sandPearl-active{background-color:#f2e6d4}.xl\:bg-silver{background-color:#b1b2b4}.xl\:bg-silver-active{background-color:#a9afbc}.xl\:bg-skyBlue{background-color:#98d2d7}.xl\:bg-skyBlue-active{background-color:#91d8de}.xl\:bg-southSea{background-color:#9dc9cd}.xl\:bg-southSea-active{background-color:#95ced5}.xl\:bg-turquoise{background-color:#14a5c2}.xl\:bg-turquoise-active{background-color:#0aaccd}.xl\:bg-waterGreen{background-color:#007571}.xl\:bg-waterGreen-active{background-color:#00a8a3}.xl\:bg-deepRed{background-color:#c32222}.xl\:bg-deepRed-active{background-color:#cf1717}.xl\:bg-emerald{background-color:#14a33a}.xl\:bg-emerald-active{background-color:#0bad36}.xl\:bg-greenLight{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.xl\:bg-orange-active{background-color:#f65f2c}.xl\:bg-red-active{background-color:#e13737}.xl\:bg-white-active{background-color:#14a5c2}.xl\:bg-white-button,.xl\:bg-white-button-active{background-color:#fff}.xl\:bg-code{background-color:#3f3d57}.xl\:bg-code-active{background-color:#37354b}.xl\:bg-gray-lighter{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.xl\:bg-gray-lighter-active{background-color:#ebebeb}.xl\:bg-gray-light{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.xl\:bg-gray-medium{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.xl\:bg-gray-darker{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.xl\:bg-gray-darker-active{background-color:#14a5c2}.xl\:bg-api-default{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.xl\:bg-gray-xxl{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.xl\:bg-line-even{background-color:#f3f6f7}.xl\:hover\:bg-transparent:hover{background-color:transparent}.xl\:hover\:bg-current:hover{background-color:currentColor}.xl\:hover\:bg-black:hover{background-color:#000}.xl\:hover\:bg-white:hover{background-color:#fff}.xl\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.xl\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.xl\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.xl\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.xl\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.xl\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.xl\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.xl\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.xl\:hover\:bg-gray-DEFAULT:hover,.xl\:hover\:bg-gray:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:hover\:bg-red:hover{background-color:#d64343}.xl\:hover\:bg-orange:hover{background-color:#eb6437}.xl\:hover\:bg-yellow:hover{background-color:#f8da30}.xl\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.xl\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.xl\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.xl\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.xl\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.xl\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.xl\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.xl\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.xl\:hover\:bg-green-DEFAULT:hover,.xl\:hover\:bg-green:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.xl\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.xl\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.xl\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.xl\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.xl\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.xl\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.xl\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.xl\:hover\:bg-teal-DEFAULT:hover,.xl\:hover\:bg-teal:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:hover\:bg-blue-50:hover{background-color:#d1eaff}.xl\:hover\:bg-blue-100:hover{background-color:#a8d7ff}.xl\:hover\:bg-blue-200:hover{background-color:#80c4ff}.xl\:hover\:bg-blue-300:hover{background-color:#57b0ff}.xl\:hover\:bg-blue-400:hover{background-color:#2e9dff}.xl\:hover\:bg-blue-500:hover{background-color:#058aff}.xl\:hover\:bg-blue-600:hover{background-color:#0075db}.xl\:hover\:bg-blue-700:hover{background-color:#005fb3}.xl\:hover\:bg-blue-800:hover{background-color:#00498a}.xl\:hover\:bg-blue-900:hover{background-color:#003461}.xl\:hover\:bg-blue-DEFAULT:hover,.xl\:hover\:bg-blue:hover{background-color:#0075db}.xl\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.xl\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.xl\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.xl\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.xl\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.xl\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.xl\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.xl\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.xl\:hover\:bg-indigo-DEFAULT:hover,.xl\:hover\:bg-indigo:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.xl\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.xl\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.xl\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.xl\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.xl\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.xl\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.xl\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.xl\:hover\:bg-purple-DEFAULT:hover,.xl\:hover\:bg-purple:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:hover\:bg-pink:hover{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.xl\:hover\:bg-inherit:hover{background-color:inherit}.xl\:hover\:bg-amber:hover{background-color:#d78737}.xl\:hover\:bg-amber-active:hover{background-color:#e3872b}.xl\:hover\:bg-ardoise:hover{background-color:#596a82}.xl\:hover\:bg-ardoise-active:hover{background-color:#476794}.xl\:hover\:bg-blue-active:hover{background-color:#14a5c2}.xl\:hover\:bg-lightBlue-active:hover,.xl\:hover\:bg-lightBlue:hover{background-color:rgba(0,85,138,.1)}.xl\:hover\:bg-deepBlue:hover{background-color:#0e346c}.xl\:hover\:bg-deepBlue-active:hover{background-color:#0a3f8f}.xl\:hover\:bg-gold:hover{background-color:#bd9e56}.xl\:hover\:bg-gold-active:hover{background-color:#c9a34a}.xl\:hover\:bg-grenadine:hover{background-color:#c35078}.xl\:hover\:bg-grenadine-active:hover{background-color:#cf4475}.xl\:hover\:bg-kiwi:hover{background-color:#9a9f1e}.xl\:hover\:bg-kiwi-active:hover{background-color:#a3a815}.xl\:hover\:bg-lilas:hover{background-color:#7ea1d3}.xl\:hover\:bg-lilas-active:hover{background-color:#75a0db}.xl\:hover\:bg-mahogany:hover{background-color:#57142e}.xl\:hover\:bg-mahogany-active:hover{background-color:#610a2b}.xl\:hover\:bg-ocher:hover{background-color:#c29614}.xl\:hover\:bg-ocher-active:hover{background-color:#cd9c0a}.xl\:hover\:bg-pine:hover{background-color:#144d52}.xl\:hover\:bg-pine-active:hover{background-color:#0a555c}.xl\:hover\:bg-platinum-active:hover,.xl\:hover\:bg-platinum:hover{background-color:#000}.xl\:hover\:bg-prune:hover{background-color:#661456}.xl\:hover\:bg-prune-active:hover{background-color:#72085d}.xl\:hover\:bg-sand:hover{background-color:#d7be88}.xl\:hover\:bg-sand-active:hover{background-color:#dfc181}.xl\:hover\:bg-sandPearl:hover{background-color:#f0e5d6}.xl\:hover\:bg-sandPearl-active:hover{background-color:#f2e6d4}.xl\:hover\:bg-silver:hover{background-color:#b1b2b4}.xl\:hover\:bg-silver-active:hover{background-color:#a9afbc}.xl\:hover\:bg-skyBlue:hover{background-color:#98d2d7}.xl\:hover\:bg-skyBlue-active:hover{background-color:#91d8de}.xl\:hover\:bg-southSea:hover{background-color:#9dc9cd}.xl\:hover\:bg-southSea-active:hover{background-color:#95ced5}.xl\:hover\:bg-turquoise:hover{background-color:#14a5c2}.xl\:hover\:bg-turquoise-active:hover{background-color:#0aaccd}.xl\:hover\:bg-waterGreen:hover{background-color:#007571}.xl\:hover\:bg-waterGreen-active:hover{background-color:#00a8a3}.xl\:hover\:bg-deepRed:hover{background-color:#c32222}.xl\:hover\:bg-deepRed-active:hover{background-color:#cf1717}.xl\:hover\:bg-emerald:hover{background-color:#14a33a}.xl\:hover\:bg-emerald-active:hover{background-color:#0bad36}.xl\:hover\:bg-greenLight:hover{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.xl\:hover\:bg-orange-active:hover{background-color:#f65f2c}.xl\:hover\:bg-red-active:hover{background-color:#e13737}.xl\:hover\:bg-white-active:hover{background-color:#14a5c2}.xl\:hover\:bg-white-button-active:hover,.xl\:hover\:bg-white-button:hover{background-color:#fff}.xl\:hover\:bg-code:hover{background-color:#3f3d57}.xl\:hover\:bg-code-active:hover{background-color:#37354b}.xl\:hover\:bg-gray-lighter:hover{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.xl\:hover\:bg-gray-lighter-active:hover{background-color:#ebebeb}.xl\:hover\:bg-gray-light:hover{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.xl\:hover\:bg-gray-medium:hover{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.xl\:hover\:bg-gray-darker:hover{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.xl\:hover\:bg-gray-darker-active:hover{background-color:#14a5c2}.xl\:hover\:bg-api-default:hover{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.xl\:hover\:bg-gray-xxl:hover{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.xl\:hover\:bg-line-even:hover{background-color:#f3f6f7}.xl\:focus\:bg-transparent:focus{background-color:transparent}.xl\:focus\:bg-current:focus{background-color:currentColor}.xl\:focus\:bg-black:focus{background-color:#000}.xl\:focus\:bg-white:focus{background-color:#fff}.xl\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.xl\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.xl\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.xl\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.xl\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.xl\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.xl\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.xl\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.xl\:focus\:bg-gray-DEFAULT:focus,.xl\:focus\:bg-gray:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:focus\:bg-red:focus{background-color:#d64343}.xl\:focus\:bg-orange:focus{background-color:#eb6437}.xl\:focus\:bg-yellow:focus{background-color:#f8da30}.xl\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.xl\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.xl\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.xl\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.xl\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.xl\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.xl\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.xl\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.xl\:focus\:bg-green-DEFAULT:focus,.xl\:focus\:bg-green:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.xl\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.xl\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.xl\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.xl\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.xl\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.xl\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.xl\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.xl\:focus\:bg-teal-DEFAULT:focus,.xl\:focus\:bg-teal:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:focus\:bg-blue-50:focus{background-color:#d1eaff}.xl\:focus\:bg-blue-100:focus{background-color:#a8d7ff}.xl\:focus\:bg-blue-200:focus{background-color:#80c4ff}.xl\:focus\:bg-blue-300:focus{background-color:#57b0ff}.xl\:focus\:bg-blue-400:focus{background-color:#2e9dff}.xl\:focus\:bg-blue-500:focus{background-color:#058aff}.xl\:focus\:bg-blue-600:focus{background-color:#0075db}.xl\:focus\:bg-blue-700:focus{background-color:#005fb3}.xl\:focus\:bg-blue-800:focus{background-color:#00498a}.xl\:focus\:bg-blue-900:focus{background-color:#003461}.xl\:focus\:bg-blue-DEFAULT:focus,.xl\:focus\:bg-blue:focus{background-color:#0075db}.xl\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.xl\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.xl\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.xl\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.xl\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.xl\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.xl\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.xl\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.xl\:focus\:bg-indigo-DEFAULT:focus,.xl\:focus\:bg-indigo:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.xl\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.xl\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.xl\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.xl\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.xl\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.xl\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.xl\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.xl\:focus\:bg-purple-DEFAULT:focus,.xl\:focus\:bg-purple:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:focus\:bg-pink:focus{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity))}.xl\:focus\:bg-inherit:focus{background-color:inherit}.xl\:focus\:bg-amber:focus{background-color:#d78737}.xl\:focus\:bg-amber-active:focus{background-color:#e3872b}.xl\:focus\:bg-ardoise:focus{background-color:#596a82}.xl\:focus\:bg-ardoise-active:focus{background-color:#476794}.xl\:focus\:bg-blue-active:focus{background-color:#14a5c2}.xl\:focus\:bg-lightBlue-active:focus,.xl\:focus\:bg-lightBlue:focus{background-color:rgba(0,85,138,.1)}.xl\:focus\:bg-deepBlue:focus{background-color:#0e346c}.xl\:focus\:bg-deepBlue-active:focus{background-color:#0a3f8f}.xl\:focus\:bg-gold:focus{background-color:#bd9e56}.xl\:focus\:bg-gold-active:focus{background-color:#c9a34a}.xl\:focus\:bg-grenadine:focus{background-color:#c35078}.xl\:focus\:bg-grenadine-active:focus{background-color:#cf4475}.xl\:focus\:bg-kiwi:focus{background-color:#9a9f1e}.xl\:focus\:bg-kiwi-active:focus{background-color:#a3a815}.xl\:focus\:bg-lilas:focus{background-color:#7ea1d3}.xl\:focus\:bg-lilas-active:focus{background-color:#75a0db}.xl\:focus\:bg-mahogany:focus{background-color:#57142e}.xl\:focus\:bg-mahogany-active:focus{background-color:#610a2b}.xl\:focus\:bg-ocher:focus{background-color:#c29614}.xl\:focus\:bg-ocher-active:focus{background-color:#cd9c0a}.xl\:focus\:bg-pine:focus{background-color:#144d52}.xl\:focus\:bg-pine-active:focus{background-color:#0a555c}.xl\:focus\:bg-platinum-active:focus,.xl\:focus\:bg-platinum:focus{background-color:#000}.xl\:focus\:bg-prune:focus{background-color:#661456}.xl\:focus\:bg-prune-active:focus{background-color:#72085d}.xl\:focus\:bg-sand:focus{background-color:#d7be88}.xl\:focus\:bg-sand-active:focus{background-color:#dfc181}.xl\:focus\:bg-sandPearl:focus{background-color:#f0e5d6}.xl\:focus\:bg-sandPearl-active:focus{background-color:#f2e6d4}.xl\:focus\:bg-silver:focus{background-color:#b1b2b4}.xl\:focus\:bg-silver-active:focus{background-color:#a9afbc}.xl\:focus\:bg-skyBlue:focus{background-color:#98d2d7}.xl\:focus\:bg-skyBlue-active:focus{background-color:#91d8de}.xl\:focus\:bg-southSea:focus{background-color:#9dc9cd}.xl\:focus\:bg-southSea-active:focus{background-color:#95ced5}.xl\:focus\:bg-turquoise:focus{background-color:#14a5c2}.xl\:focus\:bg-turquoise-active:focus{background-color:#0aaccd}.xl\:focus\:bg-waterGreen:focus{background-color:#007571}.xl\:focus\:bg-waterGreen-active:focus{background-color:#00a8a3}.xl\:focus\:bg-deepRed:focus{background-color:#c32222}.xl\:focus\:bg-deepRed-active:focus{background-color:#cf1717}.xl\:focus\:bg-emerald:focus{background-color:#14a33a}.xl\:focus\:bg-emerald-active:focus{background-color:#0bad36}.xl\:focus\:bg-greenLight:focus{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity))}.xl\:focus\:bg-orange-active:focus{background-color:#f65f2c}.xl\:focus\:bg-red-active:focus{background-color:#e13737}.xl\:focus\:bg-white-active:focus{background-color:#14a5c2}.xl\:focus\:bg-white-button-active:focus,.xl\:focus\:bg-white-button:focus{background-color:#fff}.xl\:focus\:bg-code:focus{background-color:#3f3d57}.xl\:focus\:bg-code-active:focus{background-color:#37354b}.xl\:focus\:bg-gray-lighter:focus{--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.xl\:focus\:bg-gray-lighter-active:focus{background-color:#ebebeb}.xl\:focus\:bg-gray-light:focus{--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity))}.xl\:focus\:bg-gray-medium:focus{--bg-opacity:1;background-color:#a8a0a0;background-color:rgba(168,160,160,var(--bg-opacity))}.xl\:focus\:bg-gray-darker:focus{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.xl\:focus\:bg-gray-darker-active:focus{background-color:#14a5c2}.xl\:focus\:bg-api-default:focus{--bg-opacity:1;background-color:#507192;background-color:rgba(80,113,146,var(--bg-opacity))}.xl\:focus\:bg-gray-xxl:focus{--bg-opacity:1;background-color:#2c3e50;background-color:rgba(44,62,80,var(--bg-opacity))}.xl\:focus\:bg-line-even:focus{background-color:#f3f6f7}.xl\:bg-none{background-image:none}.xl\:bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))}.xl\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.xl\:bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))}.xl\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.xl\:bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))}.xl\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.xl\:bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))}.xl\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.xl\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.xl\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.xl\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.xl\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.xl\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.xl\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.xl\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.xl\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.xl\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.xl\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.xl\:from-gray,.xl\:from-gray-DEFAULT{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:from-red{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.xl\:from-orange{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.xl\:from-yellow{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.xl\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.xl\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.xl\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.xl\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.xl\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.xl\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.xl\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.xl\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.xl\:from-green,.xl\:from-green-DEFAULT{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.xl\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.xl\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.xl\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.xl\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.xl\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.xl\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.xl\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.xl\:from-teal,.xl\:from-teal-DEFAULT{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:from-blue-50{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.xl\:from-blue-100{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.xl\:from-blue-200{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.xl\:from-blue-300{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.xl\:from-blue-400{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.xl\:from-blue-500{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.xl\:from-blue-600{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:from-blue-700{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.xl\:from-blue-800{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.xl\:from-blue-900{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.xl\:from-blue,.xl\:from-blue-DEFAULT{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.xl\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.xl\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.xl\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.xl\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.xl\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.xl\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.xl\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.xl\:from-indigo,.xl\:from-indigo-DEFAULT{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.xl\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.xl\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.xl\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.xl\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.xl\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.xl\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.xl\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.xl\:from-purple,.xl\:from-purple-DEFAULT{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:from-pink{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.xl\:from-inherit{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:from-amber{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.xl\:from-amber-active{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.xl\:from-ardoise{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.xl\:from-ardoise-active{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.xl\:from-blue-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:from-lightBlue,.xl\:from-lightBlue-active{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.xl\:from-deepBlue{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.xl\:from-deepBlue-active{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.xl\:from-gold{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.xl\:from-gold-active{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.xl\:from-grenadine{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.xl\:from-grenadine-active{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.xl\:from-kiwi{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.xl\:from-kiwi-active{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.xl\:from-lilas{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.xl\:from-lilas-active{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.xl\:from-mahogany{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.xl\:from-mahogany-active{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.xl\:from-ocher{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.xl\:from-ocher-active{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.xl\:from-pine{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.xl\:from-pine-active{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.xl\:from-platinum,.xl\:from-platinum-active{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.xl\:from-prune{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.xl\:from-prune-active{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.xl\:from-sand{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.xl\:from-sand-active{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.xl\:from-sandPearl{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.xl\:from-sandPearl-active{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.xl\:from-silver{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.xl\:from-silver-active{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.xl\:from-skyBlue{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.xl\:from-skyBlue-active{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.xl\:from-southSea{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.xl\:from-southSea-active{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.xl\:from-turquoise{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:from-turquoise-active{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.xl\:from-waterGreen{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.xl\:from-waterGreen-active{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.xl\:from-deepRed{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.xl\:from-deepRed-active{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.xl\:from-emerald{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.xl\:from-emerald-active{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.xl\:from-greenLight{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.xl\:from-orange-active{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.xl\:from-red-active{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.xl\:from-white-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:from-white-button,.xl\:from-white-button-active{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:from-code{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.xl\:from-code-active{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.xl\:from-gray-lighter{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.xl\:from-gray-lighter-active{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.xl\:from-gray-light{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.xl\:from-gray-medium{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.xl\:from-gray-darker{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.xl\:from-gray-darker-active{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:from-api-default{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.xl\:from-gray-xxl{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.xl\:from-line-even{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.xl\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.xl\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.xl\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.xl\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.xl\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.xl\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.xl\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.xl\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.xl\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.xl\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.xl\:via-gray,.xl\:via-gray-DEFAULT{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:via-red{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.xl\:via-orange{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.xl\:via-yellow{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.xl\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.xl\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.xl\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.xl\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.xl\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.xl\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.xl\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.xl\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.xl\:via-green,.xl\:via-green-DEFAULT{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.xl\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.xl\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.xl\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.xl\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.xl\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.xl\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.xl\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.xl\:via-teal,.xl\:via-teal-DEFAULT{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:via-blue-50{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.xl\:via-blue-100{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.xl\:via-blue-200{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.xl\:via-blue-300{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.xl\:via-blue-400{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.xl\:via-blue-500{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.xl\:via-blue-600{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:via-blue-700{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.xl\:via-blue-800{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.xl\:via-blue-900{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.xl\:via-blue,.xl\:via-blue-DEFAULT{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.xl\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.xl\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.xl\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.xl\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.xl\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.xl\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.xl\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.xl\:via-indigo,.xl\:via-indigo-DEFAULT{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.xl\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.xl\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.xl\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.xl\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.xl\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.xl\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.xl\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.xl\:via-purple,.xl\:via-purple-DEFAULT{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:via-pink{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.xl\:via-inherit{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:via-amber{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.xl\:via-amber-active{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.xl\:via-ardoise{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.xl\:via-ardoise-active{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.xl\:via-blue-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:via-lightBlue,.xl\:via-lightBlue-active{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.xl\:via-deepBlue{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.xl\:via-deepBlue-active{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.xl\:via-gold{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.xl\:via-gold-active{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.xl\:via-grenadine{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.xl\:via-grenadine-active{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.xl\:via-kiwi{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.xl\:via-kiwi-active{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.xl\:via-lilas{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.xl\:via-lilas-active{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.xl\:via-mahogany{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.xl\:via-mahogany-active{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.xl\:via-ocher{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.xl\:via-ocher-active{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.xl\:via-pine{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.xl\:via-pine-active{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.xl\:via-platinum,.xl\:via-platinum-active{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.xl\:via-prune{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.xl\:via-prune-active{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.xl\:via-sand{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.xl\:via-sand-active{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.xl\:via-sandPearl{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.xl\:via-sandPearl-active{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.xl\:via-silver{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.xl\:via-silver-active{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.xl\:via-skyBlue{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.xl\:via-skyBlue-active{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.xl\:via-southSea{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.xl\:via-southSea-active{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.xl\:via-turquoise{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:via-turquoise-active{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.xl\:via-waterGreen{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.xl\:via-waterGreen-active{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.xl\:via-deepRed{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.xl\:via-deepRed-active{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.xl\:via-emerald{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.xl\:via-emerald-active{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.xl\:via-greenLight{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.xl\:via-orange-active{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.xl\:via-red-active{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.xl\:via-white-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:via-white-button,.xl\:via-white-button-active{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:via-code{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.xl\:via-code-active{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.xl\:via-gray-lighter{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.xl\:via-gray-lighter-active{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.xl\:via-gray-light{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.xl\:via-gray-medium{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.xl\:via-gray-darker{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.xl\:via-gray-darker-active{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:via-api-default{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.xl\:via-gray-xxl{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.xl\:via-line-even{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.xl\:to-transparent{--gradient-to-color:transparent}.xl\:to-current{--gradient-to-color:currentColor}.xl\:to-black{--gradient-to-color:#000}.xl\:to-white{--gradient-to-color:#fff}.xl\:to-gray-100{--gradient-to-color:#f7fafc}.xl\:to-gray-200{--gradient-to-color:#edf2f7}.xl\:to-gray-300{--gradient-to-color:#e2e8f0}.xl\:to-gray-400{--gradient-to-color:#cbd5e0}.xl\:to-gray-500{--gradient-to-color:#a0aec0}.xl\:to-gray-600{--gradient-to-color:#718096}.xl\:to-gray-700{--gradient-to-color:#4a5568}.xl\:to-gray-800{--gradient-to-color:#2d3748}.xl\:to-gray-900{--gradient-to-color:#1a202c}.xl\:to-gray,.xl\:to-gray-DEFAULT{--gradient-to-color:#718096}.xl\:to-red{--gradient-to-color:#d64343}.xl\:to-orange{--gradient-to-color:#eb6437}.xl\:to-yellow{--gradient-to-color:#f8da30}.xl\:to-green-100{--gradient-to-color:#f0fff4}.xl\:to-green-200{--gradient-to-color:#c6f6d5}.xl\:to-green-300{--gradient-to-color:#9ae6b4}.xl\:to-green-400{--gradient-to-color:#68d391}.xl\:to-green-500{--gradient-to-color:#48bb78}.xl\:to-green-600{--gradient-to-color:#38a169}.xl\:to-green-700{--gradient-to-color:#2f855a}.xl\:to-green-800{--gradient-to-color:#276749}.xl\:to-green-900{--gradient-to-color:#22543d}.xl\:to-green,.xl\:to-green-DEFAULT{--gradient-to-color:#38a169}.xl\:to-teal-100{--gradient-to-color:#e6fffa}.xl\:to-teal-200{--gradient-to-color:#b2f5ea}.xl\:to-teal-300{--gradient-to-color:#81e6d9}.xl\:to-teal-400{--gradient-to-color:#4fd1c5}.xl\:to-teal-500{--gradient-to-color:#38b2ac}.xl\:to-teal-600{--gradient-to-color:#319795}.xl\:to-teal-700{--gradient-to-color:#2c7a7b}.xl\:to-teal-800{--gradient-to-color:#285e61}.xl\:to-teal-900{--gradient-to-color:#234e52}.xl\:to-teal,.xl\:to-teal-DEFAULT{--gradient-to-color:#319795}.xl\:to-blue-50{--gradient-to-color:#d1eaff}.xl\:to-blue-100{--gradient-to-color:#a8d7ff}.xl\:to-blue-200{--gradient-to-color:#80c4ff}.xl\:to-blue-300{--gradient-to-color:#57b0ff}.xl\:to-blue-400{--gradient-to-color:#2e9dff}.xl\:to-blue-500{--gradient-to-color:#058aff}.xl\:to-blue-600{--gradient-to-color:#0075db}.xl\:to-blue-700{--gradient-to-color:#005fb3}.xl\:to-blue-800{--gradient-to-color:#00498a}.xl\:to-blue-900{--gradient-to-color:#003461}.xl\:to-blue,.xl\:to-blue-DEFAULT{--gradient-to-color:#0075db}.xl\:to-indigo-100{--gradient-to-color:#ebf4ff}.xl\:to-indigo-200{--gradient-to-color:#c3dafe}.xl\:to-indigo-300{--gradient-to-color:#a3bffa}.xl\:to-indigo-400{--gradient-to-color:#7f9cf5}.xl\:to-indigo-500{--gradient-to-color:#667eea}.xl\:to-indigo-600{--gradient-to-color:#5a67d8}.xl\:to-indigo-700{--gradient-to-color:#4c51bf}.xl\:to-indigo-800{--gradient-to-color:#434190}.xl\:to-indigo-900{--gradient-to-color:#3c366b}.xl\:to-indigo,.xl\:to-indigo-DEFAULT{--gradient-to-color:#5a67d8}.xl\:to-purple-100{--gradient-to-color:#faf5ff}.xl\:to-purple-200{--gradient-to-color:#e9d8fd}.xl\:to-purple-300{--gradient-to-color:#d6bcfa}.xl\:to-purple-400{--gradient-to-color:#b794f4}.xl\:to-purple-500{--gradient-to-color:#9f7aea}.xl\:to-purple-600{--gradient-to-color:#805ad5}.xl\:to-purple-700{--gradient-to-color:#6b46c1}.xl\:to-purple-800{--gradient-to-color:#553c9a}.xl\:to-purple-900{--gradient-to-color:#44337a}.xl\:to-purple,.xl\:to-purple-DEFAULT{--gradient-to-color:#805ad5}.xl\:to-pink{--gradient-to-color:#d81b60}.xl\:to-inherit{--gradient-to-color:inherit}.xl\:to-amber{--gradient-to-color:#d78737}.xl\:to-amber-active{--gradient-to-color:#e3872b}.xl\:to-ardoise{--gradient-to-color:#596a82}.xl\:to-ardoise-active{--gradient-to-color:#476794}.xl\:to-blue-active{--gradient-to-color:#14a5c2}.xl\:to-lightBlue,.xl\:to-lightBlue-active{--gradient-to-color:rgba(0,85,138,0.1)}.xl\:to-deepBlue{--gradient-to-color:#0e346c}.xl\:to-deepBlue-active{--gradient-to-color:#0a3f8f}.xl\:to-gold{--gradient-to-color:#bd9e56}.xl\:to-gold-active{--gradient-to-color:#c9a34a}.xl\:to-grenadine{--gradient-to-color:#c35078}.xl\:to-grenadine-active{--gradient-to-color:#cf4475}.xl\:to-kiwi{--gradient-to-color:#9a9f1e}.xl\:to-kiwi-active{--gradient-to-color:#a3a815}.xl\:to-lilas{--gradient-to-color:#7ea1d3}.xl\:to-lilas-active{--gradient-to-color:#75a0db}.xl\:to-mahogany{--gradient-to-color:#57142e}.xl\:to-mahogany-active{--gradient-to-color:#610a2b}.xl\:to-ocher{--gradient-to-color:#c29614}.xl\:to-ocher-active{--gradient-to-color:#cd9c0a}.xl\:to-pine{--gradient-to-color:#144d52}.xl\:to-pine-active{--gradient-to-color:#0a555c}.xl\:to-platinum,.xl\:to-platinum-active{--gradient-to-color:#000}.xl\:to-prune{--gradient-to-color:#661456}.xl\:to-prune-active{--gradient-to-color:#72085d}.xl\:to-sand{--gradient-to-color:#d7be88}.xl\:to-sand-active{--gradient-to-color:#dfc181}.xl\:to-sandPearl{--gradient-to-color:#f0e5d6}.xl\:to-sandPearl-active{--gradient-to-color:#f2e6d4}.xl\:to-silver{--gradient-to-color:#b1b2b4}.xl\:to-silver-active{--gradient-to-color:#a9afbc}.xl\:to-skyBlue{--gradient-to-color:#98d2d7}.xl\:to-skyBlue-active{--gradient-to-color:#91d8de}.xl\:to-southSea{--gradient-to-color:#9dc9cd}.xl\:to-southSea-active{--gradient-to-color:#95ced5}.xl\:to-turquoise{--gradient-to-color:#14a5c2}.xl\:to-turquoise-active{--gradient-to-color:#0aaccd}.xl\:to-waterGreen{--gradient-to-color:#007571}.xl\:to-waterGreen-active{--gradient-to-color:#00a8a3}.xl\:to-deepRed{--gradient-to-color:#c32222}.xl\:to-deepRed-active{--gradient-to-color:#cf1717}.xl\:to-emerald{--gradient-to-color:#14a33a}.xl\:to-emerald-active{--gradient-to-color:#0bad36}.xl\:to-greenLight{--gradient-to-color:#7cb342}.xl\:to-orange-active{--gradient-to-color:#f65f2c}.xl\:to-red-active{--gradient-to-color:#e13737}.xl\:to-white-active{--gradient-to-color:#14a5c2}.xl\:to-white-button,.xl\:to-white-button-active{--gradient-to-color:#fff}.xl\:to-code{--gradient-to-color:#3f3d57}.xl\:to-code-active{--gradient-to-color:#37354b}.xl\:to-gray-lighter{--gradient-to-color:#f7f7f7}.xl\:to-gray-lighter-active{--gradient-to-color:#ebebeb}.xl\:to-gray-light{--gradient-to-color:#d4d1d1}.xl\:to-gray-medium{--gradient-to-color:#a8a0a0}.xl\:to-gray-darker{--gradient-to-color:#504747}.xl\:to-gray-darker-active{--gradient-to-color:#14a5c2}.xl\:to-api-default{--gradient-to-color:#507192}.xl\:to-gray-xxl{--gradient-to-color:#2c3e50}.xl\:to-line-even{--gradient-to-color:#f3f6f7}.xl\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.xl\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.xl\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.xl\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.xl\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.xl\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.xl\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.xl\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.xl\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.xl\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.xl\:hover\:from-gray-DEFAULT:hover,.xl\:hover\:from-gray:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:hover\:from-red:hover{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.xl\:hover\:from-orange:hover{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.xl\:hover\:from-yellow:hover{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.xl\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.xl\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.xl\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.xl\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.xl\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.xl\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.xl\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.xl\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.xl\:hover\:from-green-DEFAULT:hover,.xl\:hover\:from-green:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.xl\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.xl\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.xl\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.xl\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.xl\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.xl\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.xl\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.xl\:hover\:from-teal-DEFAULT:hover,.xl\:hover\:from-teal:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:hover\:from-blue-50:hover{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.xl\:hover\:from-blue-100:hover{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.xl\:hover\:from-blue-200:hover{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.xl\:hover\:from-blue-300:hover{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.xl\:hover\:from-blue-400:hover{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.xl\:hover\:from-blue-500:hover{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.xl\:hover\:from-blue-600:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:hover\:from-blue-700:hover{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.xl\:hover\:from-blue-800:hover{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.xl\:hover\:from-blue-900:hover{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.xl\:hover\:from-blue-DEFAULT:hover,.xl\:hover\:from-blue:hover{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.xl\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.xl\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.xl\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.xl\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.xl\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.xl\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.xl\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.xl\:hover\:from-indigo-DEFAULT:hover,.xl\:hover\:from-indigo:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.xl\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.xl\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.xl\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.xl\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.xl\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.xl\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.xl\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.xl\:hover\:from-purple-DEFAULT:hover,.xl\:hover\:from-purple:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:hover\:from-pink:hover{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.xl\:hover\:from-inherit:hover{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:hover\:from-amber:hover{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.xl\:hover\:from-amber-active:hover{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.xl\:hover\:from-ardoise:hover{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.xl\:hover\:from-ardoise-active:hover{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.xl\:hover\:from-blue-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:hover\:from-lightBlue-active:hover,.xl\:hover\:from-lightBlue:hover{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.xl\:hover\:from-deepBlue:hover{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.xl\:hover\:from-deepBlue-active:hover{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.xl\:hover\:from-gold:hover{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.xl\:hover\:from-gold-active:hover{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.xl\:hover\:from-grenadine:hover{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.xl\:hover\:from-grenadine-active:hover{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.xl\:hover\:from-kiwi:hover{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.xl\:hover\:from-kiwi-active:hover{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.xl\:hover\:from-lilas:hover{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.xl\:hover\:from-lilas-active:hover{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.xl\:hover\:from-mahogany:hover{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.xl\:hover\:from-mahogany-active:hover{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.xl\:hover\:from-ocher:hover{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.xl\:hover\:from-ocher-active:hover{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.xl\:hover\:from-pine:hover{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.xl\:hover\:from-pine-active:hover{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.xl\:hover\:from-platinum-active:hover,.xl\:hover\:from-platinum:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.xl\:hover\:from-prune:hover{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.xl\:hover\:from-prune-active:hover{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.xl\:hover\:from-sand:hover{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.xl\:hover\:from-sand-active:hover{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.xl\:hover\:from-sandPearl:hover{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.xl\:hover\:from-sandPearl-active:hover{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.xl\:hover\:from-silver:hover{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.xl\:hover\:from-silver-active:hover{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.xl\:hover\:from-skyBlue:hover{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.xl\:hover\:from-skyBlue-active:hover{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.xl\:hover\:from-southSea:hover{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.xl\:hover\:from-southSea-active:hover{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.xl\:hover\:from-turquoise:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:hover\:from-turquoise-active:hover{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.xl\:hover\:from-waterGreen:hover{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.xl\:hover\:from-waterGreen-active:hover{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.xl\:hover\:from-deepRed:hover{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.xl\:hover\:from-deepRed-active:hover{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.xl\:hover\:from-emerald:hover{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.xl\:hover\:from-emerald-active:hover{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.xl\:hover\:from-greenLight:hover{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.xl\:hover\:from-orange-active:hover{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.xl\:hover\:from-red-active:hover{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.xl\:hover\:from-white-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:hover\:from-white-button-active:hover,.xl\:hover\:from-white-button:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:hover\:from-code:hover{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.xl\:hover\:from-code-active:hover{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.xl\:hover\:from-gray-lighter:hover{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.xl\:hover\:from-gray-lighter-active:hover{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.xl\:hover\:from-gray-light:hover{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.xl\:hover\:from-gray-medium:hover{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.xl\:hover\:from-gray-darker:hover{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.xl\:hover\:from-gray-darker-active:hover{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:hover\:from-api-default:hover{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.xl\:hover\:from-gray-xxl:hover{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.xl\:hover\:from-line-even:hover{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.xl\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.xl\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.xl\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.xl\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.xl\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.xl\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.xl\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.xl\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.xl\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.xl\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.xl\:hover\:via-gray-DEFAULT:hover,.xl\:hover\:via-gray:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:hover\:via-red:hover{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.xl\:hover\:via-orange:hover{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.xl\:hover\:via-yellow:hover{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.xl\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.xl\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.xl\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.xl\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.xl\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.xl\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.xl\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.xl\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.xl\:hover\:via-green-DEFAULT:hover,.xl\:hover\:via-green:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.xl\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.xl\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.xl\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.xl\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.xl\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.xl\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.xl\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.xl\:hover\:via-teal-DEFAULT:hover,.xl\:hover\:via-teal:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:hover\:via-blue-50:hover{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.xl\:hover\:via-blue-100:hover{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.xl\:hover\:via-blue-200:hover{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.xl\:hover\:via-blue-300:hover{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.xl\:hover\:via-blue-400:hover{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.xl\:hover\:via-blue-500:hover{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.xl\:hover\:via-blue-600:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:hover\:via-blue-700:hover{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.xl\:hover\:via-blue-800:hover{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.xl\:hover\:via-blue-900:hover{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.xl\:hover\:via-blue-DEFAULT:hover,.xl\:hover\:via-blue:hover{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.xl\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.xl\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.xl\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.xl\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.xl\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.xl\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.xl\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.xl\:hover\:via-indigo-DEFAULT:hover,.xl\:hover\:via-indigo:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.xl\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.xl\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.xl\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.xl\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.xl\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.xl\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.xl\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.xl\:hover\:via-purple-DEFAULT:hover,.xl\:hover\:via-purple:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:hover\:via-pink:hover{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.xl\:hover\:via-inherit:hover{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:hover\:via-amber:hover{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.xl\:hover\:via-amber-active:hover{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.xl\:hover\:via-ardoise:hover{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.xl\:hover\:via-ardoise-active:hover{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.xl\:hover\:via-blue-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:hover\:via-lightBlue-active:hover,.xl\:hover\:via-lightBlue:hover{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.xl\:hover\:via-deepBlue:hover{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.xl\:hover\:via-deepBlue-active:hover{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.xl\:hover\:via-gold:hover{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.xl\:hover\:via-gold-active:hover{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.xl\:hover\:via-grenadine:hover{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.xl\:hover\:via-grenadine-active:hover{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.xl\:hover\:via-kiwi:hover{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.xl\:hover\:via-kiwi-active:hover{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.xl\:hover\:via-lilas:hover{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.xl\:hover\:via-lilas-active:hover{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.xl\:hover\:via-mahogany:hover{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.xl\:hover\:via-mahogany-active:hover{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.xl\:hover\:via-ocher:hover{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.xl\:hover\:via-ocher-active:hover{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.xl\:hover\:via-pine:hover{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.xl\:hover\:via-pine-active:hover{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.xl\:hover\:via-platinum-active:hover,.xl\:hover\:via-platinum:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.xl\:hover\:via-prune:hover{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.xl\:hover\:via-prune-active:hover{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.xl\:hover\:via-sand:hover{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.xl\:hover\:via-sand-active:hover{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.xl\:hover\:via-sandPearl:hover{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.xl\:hover\:via-sandPearl-active:hover{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.xl\:hover\:via-silver:hover{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.xl\:hover\:via-silver-active:hover{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.xl\:hover\:via-skyBlue:hover{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.xl\:hover\:via-skyBlue-active:hover{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.xl\:hover\:via-southSea:hover{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.xl\:hover\:via-southSea-active:hover{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.xl\:hover\:via-turquoise:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:hover\:via-turquoise-active:hover{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.xl\:hover\:via-waterGreen:hover{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.xl\:hover\:via-waterGreen-active:hover{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.xl\:hover\:via-deepRed:hover{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.xl\:hover\:via-deepRed-active:hover{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.xl\:hover\:via-emerald:hover{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.xl\:hover\:via-emerald-active:hover{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.xl\:hover\:via-greenLight:hover{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.xl\:hover\:via-orange-active:hover{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.xl\:hover\:via-red-active:hover{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.xl\:hover\:via-white-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:hover\:via-white-button-active:hover,.xl\:hover\:via-white-button:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:hover\:via-code:hover{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.xl\:hover\:via-code-active:hover{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.xl\:hover\:via-gray-lighter:hover{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.xl\:hover\:via-gray-lighter-active:hover{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.xl\:hover\:via-gray-light:hover{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.xl\:hover\:via-gray-medium:hover{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.xl\:hover\:via-gray-darker:hover{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.xl\:hover\:via-gray-darker-active:hover{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:hover\:via-api-default:hover{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.xl\:hover\:via-gray-xxl:hover{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.xl\:hover\:via-line-even:hover{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.xl\:hover\:to-transparent:hover{--gradient-to-color:transparent}.xl\:hover\:to-current:hover{--gradient-to-color:currentColor}.xl\:hover\:to-black:hover{--gradient-to-color:#000}.xl\:hover\:to-white:hover{--gradient-to-color:#fff}.xl\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.xl\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.xl\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.xl\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.xl\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.xl\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.xl\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.xl\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.xl\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.xl\:hover\:to-gray-DEFAULT:hover,.xl\:hover\:to-gray:hover{--gradient-to-color:#718096}.xl\:hover\:to-red:hover{--gradient-to-color:#d64343}.xl\:hover\:to-orange:hover{--gradient-to-color:#eb6437}.xl\:hover\:to-yellow:hover{--gradient-to-color:#f8da30}.xl\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.xl\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.xl\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.xl\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.xl\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.xl\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.xl\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.xl\:hover\:to-green-800:hover{--gradient-to-color:#276749}.xl\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.xl\:hover\:to-green-DEFAULT:hover,.xl\:hover\:to-green:hover{--gradient-to-color:#38a169}.xl\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.xl\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.xl\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.xl\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.xl\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.xl\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.xl\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.xl\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.xl\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.xl\:hover\:to-teal-DEFAULT:hover,.xl\:hover\:to-teal:hover{--gradient-to-color:#319795}.xl\:hover\:to-blue-50:hover{--gradient-to-color:#d1eaff}.xl\:hover\:to-blue-100:hover{--gradient-to-color:#a8d7ff}.xl\:hover\:to-blue-200:hover{--gradient-to-color:#80c4ff}.xl\:hover\:to-blue-300:hover{--gradient-to-color:#57b0ff}.xl\:hover\:to-blue-400:hover{--gradient-to-color:#2e9dff}.xl\:hover\:to-blue-500:hover{--gradient-to-color:#058aff}.xl\:hover\:to-blue-600:hover{--gradient-to-color:#0075db}.xl\:hover\:to-blue-700:hover{--gradient-to-color:#005fb3}.xl\:hover\:to-blue-800:hover{--gradient-to-color:#00498a}.xl\:hover\:to-blue-900:hover{--gradient-to-color:#003461}.xl\:hover\:to-blue-DEFAULT:hover,.xl\:hover\:to-blue:hover{--gradient-to-color:#0075db}.xl\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.xl\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.xl\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.xl\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.xl\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.xl\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.xl\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.xl\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.xl\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.xl\:hover\:to-indigo-DEFAULT:hover,.xl\:hover\:to-indigo:hover{--gradient-to-color:#5a67d8}.xl\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.xl\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.xl\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.xl\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.xl\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.xl\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.xl\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.xl\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.xl\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.xl\:hover\:to-purple-DEFAULT:hover,.xl\:hover\:to-purple:hover{--gradient-to-color:#805ad5}.xl\:hover\:to-pink:hover{--gradient-to-color:#d81b60}.xl\:hover\:to-inherit:hover{--gradient-to-color:inherit}.xl\:hover\:to-amber:hover{--gradient-to-color:#d78737}.xl\:hover\:to-amber-active:hover{--gradient-to-color:#e3872b}.xl\:hover\:to-ardoise:hover{--gradient-to-color:#596a82}.xl\:hover\:to-ardoise-active:hover{--gradient-to-color:#476794}.xl\:hover\:to-blue-active:hover{--gradient-to-color:#14a5c2}.xl\:hover\:to-lightBlue-active:hover,.xl\:hover\:to-lightBlue:hover{--gradient-to-color:rgba(0,85,138,0.1)}.xl\:hover\:to-deepBlue:hover{--gradient-to-color:#0e346c}.xl\:hover\:to-deepBlue-active:hover{--gradient-to-color:#0a3f8f}.xl\:hover\:to-gold:hover{--gradient-to-color:#bd9e56}.xl\:hover\:to-gold-active:hover{--gradient-to-color:#c9a34a}.xl\:hover\:to-grenadine:hover{--gradient-to-color:#c35078}.xl\:hover\:to-grenadine-active:hover{--gradient-to-color:#cf4475}.xl\:hover\:to-kiwi:hover{--gradient-to-color:#9a9f1e}.xl\:hover\:to-kiwi-active:hover{--gradient-to-color:#a3a815}.xl\:hover\:to-lilas:hover{--gradient-to-color:#7ea1d3}.xl\:hover\:to-lilas-active:hover{--gradient-to-color:#75a0db}.xl\:hover\:to-mahogany:hover{--gradient-to-color:#57142e}.xl\:hover\:to-mahogany-active:hover{--gradient-to-color:#610a2b}.xl\:hover\:to-ocher:hover{--gradient-to-color:#c29614}.xl\:hover\:to-ocher-active:hover{--gradient-to-color:#cd9c0a}.xl\:hover\:to-pine:hover{--gradient-to-color:#144d52}.xl\:hover\:to-pine-active:hover{--gradient-to-color:#0a555c}.xl\:hover\:to-platinum-active:hover,.xl\:hover\:to-platinum:hover{--gradient-to-color:#000}.xl\:hover\:to-prune:hover{--gradient-to-color:#661456}.xl\:hover\:to-prune-active:hover{--gradient-to-color:#72085d}.xl\:hover\:to-sand:hover{--gradient-to-color:#d7be88}.xl\:hover\:to-sand-active:hover{--gradient-to-color:#dfc181}.xl\:hover\:to-sandPearl:hover{--gradient-to-color:#f0e5d6}.xl\:hover\:to-sandPearl-active:hover{--gradient-to-color:#f2e6d4}.xl\:hover\:to-silver:hover{--gradient-to-color:#b1b2b4}.xl\:hover\:to-silver-active:hover{--gradient-to-color:#a9afbc}.xl\:hover\:to-skyBlue:hover{--gradient-to-color:#98d2d7}.xl\:hover\:to-skyBlue-active:hover{--gradient-to-color:#91d8de}.xl\:hover\:to-southSea:hover{--gradient-to-color:#9dc9cd}.xl\:hover\:to-southSea-active:hover{--gradient-to-color:#95ced5}.xl\:hover\:to-turquoise:hover{--gradient-to-color:#14a5c2}.xl\:hover\:to-turquoise-active:hover{--gradient-to-color:#0aaccd}.xl\:hover\:to-waterGreen:hover{--gradient-to-color:#007571}.xl\:hover\:to-waterGreen-active:hover{--gradient-to-color:#00a8a3}.xl\:hover\:to-deepRed:hover{--gradient-to-color:#c32222}.xl\:hover\:to-deepRed-active:hover{--gradient-to-color:#cf1717}.xl\:hover\:to-emerald:hover{--gradient-to-color:#14a33a}.xl\:hover\:to-emerald-active:hover{--gradient-to-color:#0bad36}.xl\:hover\:to-greenLight:hover{--gradient-to-color:#7cb342}.xl\:hover\:to-orange-active:hover{--gradient-to-color:#f65f2c}.xl\:hover\:to-red-active:hover{--gradient-to-color:#e13737}.xl\:hover\:to-white-active:hover{--gradient-to-color:#14a5c2}.xl\:hover\:to-white-button-active:hover,.xl\:hover\:to-white-button:hover{--gradient-to-color:#fff}.xl\:hover\:to-code:hover{--gradient-to-color:#3f3d57}.xl\:hover\:to-code-active:hover{--gradient-to-color:#37354b}.xl\:hover\:to-gray-lighter:hover{--gradient-to-color:#f7f7f7}.xl\:hover\:to-gray-lighter-active:hover{--gradient-to-color:#ebebeb}.xl\:hover\:to-gray-light:hover{--gradient-to-color:#d4d1d1}.xl\:hover\:to-gray-medium:hover{--gradient-to-color:#a8a0a0}.xl\:hover\:to-gray-darker:hover{--gradient-to-color:#504747}.xl\:hover\:to-gray-darker-active:hover{--gradient-to-color:#14a5c2}.xl\:hover\:to-api-default:hover{--gradient-to-color:#507192}.xl\:hover\:to-gray-xxl:hover{--gradient-to-color:#2c3e50}.xl\:hover\:to-line-even:hover{--gradient-to-color:#f3f6f7}.xl\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.xl\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.xl\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))}.xl\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))}.xl\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))}.xl\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))}.xl\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))}.xl\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))}.xl\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))}.xl\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))}.xl\:focus\:from-gray-DEFAULT:focus,.xl\:focus\:from-gray:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:focus\:from-red:focus{--gradient-from-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.xl\:focus\:from-orange:focus{--gradient-from-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.xl\:focus\:from-yellow:focus{--gradient-from-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.xl\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))}.xl\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))}.xl\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))}.xl\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))}.xl\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))}.xl\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))}.xl\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))}.xl\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))}.xl\:focus\:from-green-DEFAULT:focus,.xl\:focus\:from-green:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))}.xl\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))}.xl\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))}.xl\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))}.xl\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))}.xl\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))}.xl\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))}.xl\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))}.xl\:focus\:from-teal-DEFAULT:focus,.xl\:focus\:from-teal:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:focus\:from-blue-50:focus{--gradient-from-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.xl\:focus\:from-blue-100:focus{--gradient-from-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.xl\:focus\:from-blue-200:focus{--gradient-from-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.xl\:focus\:from-blue-300:focus{--gradient-from-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.xl\:focus\:from-blue-400:focus{--gradient-from-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.xl\:focus\:from-blue-500:focus{--gradient-from-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.xl\:focus\:from-blue-600:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:focus\:from-blue-700:focus{--gradient-from-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.xl\:focus\:from-blue-800:focus{--gradient-from-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.xl\:focus\:from-blue-900:focus{--gradient-from-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.xl\:focus\:from-blue-DEFAULT:focus,.xl\:focus\:from-blue:focus{--gradient-from-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))}.xl\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))}.xl\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))}.xl\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))}.xl\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))}.xl\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))}.xl\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))}.xl\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))}.xl\:focus\:from-indigo-DEFAULT:focus,.xl\:focus\:from-indigo:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))}.xl\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))}.xl\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))}.xl\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))}.xl\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))}.xl\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))}.xl\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))}.xl\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))}.xl\:focus\:from-purple-DEFAULT:focus,.xl\:focus\:from-purple:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:focus\:from-pink:focus{--gradient-from-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(216,27,96,0))}.xl\:focus\:from-inherit:focus{--gradient-from-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:focus\:from-amber:focus{--gradient-from-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.xl\:focus\:from-amber-active:focus{--gradient-from-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.xl\:focus\:from-ardoise:focus{--gradient-from-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.xl\:focus\:from-ardoise-active:focus{--gradient-from-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.xl\:focus\:from-blue-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:focus\:from-lightBlue-active:focus,.xl\:focus\:from-lightBlue:focus{--gradient-from-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.xl\:focus\:from-deepBlue:focus{--gradient-from-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.xl\:focus\:from-deepBlue-active:focus{--gradient-from-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.xl\:focus\:from-gold:focus{--gradient-from-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.xl\:focus\:from-gold-active:focus{--gradient-from-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.xl\:focus\:from-grenadine:focus{--gradient-from-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.xl\:focus\:from-grenadine-active:focus{--gradient-from-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.xl\:focus\:from-kiwi:focus{--gradient-from-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.xl\:focus\:from-kiwi-active:focus{--gradient-from-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.xl\:focus\:from-lilas:focus{--gradient-from-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.xl\:focus\:from-lilas-active:focus{--gradient-from-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.xl\:focus\:from-mahogany:focus{--gradient-from-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.xl\:focus\:from-mahogany-active:focus{--gradient-from-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.xl\:focus\:from-ocher:focus{--gradient-from-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.xl\:focus\:from-ocher-active:focus{--gradient-from-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.xl\:focus\:from-pine:focus{--gradient-from-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.xl\:focus\:from-pine-active:focus{--gradient-from-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.xl\:focus\:from-platinum-active:focus,.xl\:focus\:from-platinum:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)}.xl\:focus\:from-prune:focus{--gradient-from-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.xl\:focus\:from-prune-active:focus{--gradient-from-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.xl\:focus\:from-sand:focus{--gradient-from-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.xl\:focus\:from-sand-active:focus{--gradient-from-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.xl\:focus\:from-sandPearl:focus{--gradient-from-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.xl\:focus\:from-sandPearl-active:focus{--gradient-from-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.xl\:focus\:from-silver:focus{--gradient-from-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.xl\:focus\:from-silver-active:focus{--gradient-from-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.xl\:focus\:from-skyBlue:focus{--gradient-from-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.xl\:focus\:from-skyBlue-active:focus{--gradient-from-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.xl\:focus\:from-southSea:focus{--gradient-from-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.xl\:focus\:from-southSea-active:focus{--gradient-from-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.xl\:focus\:from-turquoise:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:focus\:from-turquoise-active:focus{--gradient-from-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.xl\:focus\:from-waterGreen:focus{--gradient-from-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.xl\:focus\:from-waterGreen-active:focus{--gradient-from-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.xl\:focus\:from-deepRed:focus{--gradient-from-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.xl\:focus\:from-deepRed-active:focus{--gradient-from-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.xl\:focus\:from-emerald:focus{--gradient-from-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.xl\:focus\:from-emerald-active:focus{--gradient-from-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.xl\:focus\:from-greenLight:focus{--gradient-from-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(124,179,66,0))}.xl\:focus\:from-orange-active:focus{--gradient-from-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.xl\:focus\:from-red-active:focus{--gradient-from-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.xl\:focus\:from-white-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:focus\:from-white-button-active:focus,.xl\:focus\:from-white-button:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:focus\:from-code:focus{--gradient-from-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.xl\:focus\:from-code-active:focus{--gradient-from-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.xl\:focus\:from-gray-lighter:focus{--gradient-from-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.xl\:focus\:from-gray-lighter-active:focus{--gradient-from-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.xl\:focus\:from-gray-light:focus{--gradient-from-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(212,209,209,0))}.xl\:focus\:from-gray-medium:focus{--gradient-from-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(168,160,160,0))}.xl\:focus\:from-gray-darker:focus{--gradient-from-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,71,71,0))}.xl\:focus\:from-gray-darker-active:focus{--gradient-from-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:focus\:from-api-default:focus{--gradient-from-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(80,113,146,0))}.xl\:focus\:from-gray-xxl:focus{--gradient-from-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,62,80,0))}.xl\:focus\:from-line-even:focus{--gradient-from-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.xl\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.xl\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.xl\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))}.xl\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))}.xl\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))}.xl\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))}.xl\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))}.xl\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))}.xl\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))}.xl\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))}.xl\:focus\:via-gray-DEFAULT:focus,.xl\:focus\:via-gray:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))}.xl\:focus\:via-red:focus{--gradient-via-color:#d64343;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213.68999999999997,66.81000000000006,66.81000000000006,0))}.xl\:focus\:via-orange:focus{--gradient-via-color:#eb6437;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235.263,100.39349999999999,55.43699999999998,0))}.xl\:focus\:via-yellow:focus{--gradient-via-color:#f8da30;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247.50300000000001,217.6221,48.296999999999976,0))}.xl\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))}.xl\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))}.xl\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))}.xl\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))}.xl\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))}.xl\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))}.xl\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))}.xl\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))}.xl\:focus\:via-green-DEFAULT:focus,.xl\:focus\:via-green:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))}.xl\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))}.xl\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))}.xl\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))}.xl\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))}.xl\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))}.xl\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))}.xl\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))}.xl\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))}.xl\:focus\:via-teal-DEFAULT:focus,.xl\:focus\:via-teal:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))}.xl\:focus\:via-blue-50:focus{--gradient-via-color:#d1eaff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(209.10000000000002,233.58,255,0))}.xl\:focus\:via-blue-100:focus{--gradient-via-color:#a8d7ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168.29999999999998,214.54,255,0))}.xl\:focus\:via-blue-200:focus{--gradient-via-color:#80c4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127.5,195.5,255,0))}.xl\:focus\:via-blue-300:focus{--gradient-via-color:#57b0ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.70000000000005,176.46000000000004,254.99999999999997,0))}.xl\:focus\:via-blue-400:focus{--gradient-via-color:#2e9dff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45.90000000000001,157.42000000000002,254.99999999999997,0))}.xl\:focus\:via-blue-500:focus{--gradient-via-color:#058aff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(5.100000000000005,138.38000000000002,255,0))}.xl\:focus\:via-blue-600:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:focus\:via-blue-700:focus{--gradient-via-color:#005fb3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,95.2,178.5,0))}.xl\:focus\:via-blue-800:focus{--gradient-via-color:#00498a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,73.44000000000003,137.70000000000002,0))}.xl\:focus\:via-blue-900:focus{--gradient-via-color:#003461;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,51.68000000000001,96.9,0))}.xl\:focus\:via-blue-DEFAULT:focus,.xl\:focus\:via-blue:focus{--gradient-via-color:#0075db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,116.96000000000001,219.29999999999998,0))}.xl\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))}.xl\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))}.xl\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))}.xl\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))}.xl\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))}.xl\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))}.xl\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))}.xl\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))}.xl\:focus\:via-indigo-DEFAULT:focus,.xl\:focus\:via-indigo:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))}.xl\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))}.xl\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))}.xl\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))}.xl\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))}.xl\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))}.xl\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))}.xl\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))}.xl\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))}.xl\:focus\:via-purple-DEFAULT:focus,.xl\:focus\:via-purple:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))}.xl\:focus\:via-pink:focus{--gradient-via-color:#d81b60;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(216,27,96,0))}.xl\:focus\:via-inherit:focus{--gradient-via-color:inherit;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:focus\:via-amber:focus{--gradient-via-color:#d78737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.44950000000006,135.15,54.85049999999996,0))}.xl\:focus\:via-amber-active:focus{--gradient-via-color:#e3872b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(227.4345,135.15,42.865500000000004,0))}.xl\:focus\:via-ardoise:focus{--gradient-via-color:#596a82;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(88.81650000000002,106.17775,130.4835,0))}.xl\:focus\:via-ardoise-active:focus{--gradient-via-color:#476794;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(71.2725,103.25374999999998,148.0275,0))}.xl\:focus\:via-blue-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:focus\:via-lightBlue-active:focus,.xl\:focus\:via-lightBlue:focus{--gradient-via-color:rgba(0,85,138,0.1);--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,84.91499999999998,137.70000000000002,0))}.xl\:focus\:via-deepBlue:focus{--gradient-via-color:#0e346c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(14.075999999999993,51.77519999999999,108.324,0))}.xl\:focus\:via-deepBlue-active:focus{--gradient-via-color:#0a3f8f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.94499999999998,63.18899999999998,143.055,0))}.xl\:focus\:via-gold:focus{--gradient-via-color:#bd9e56;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(189.31199999999998,158.3448,86.08800000000004,0))}.xl\:focus\:via-gold-active:focus{--gradient-via-color:#c9a34a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(201.042,163.0368,74.35800000000002,0))}.xl\:focus\:via-grenadine:focus{--gradient-via-color:#c35078;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.17700000000002,80.223,120.45689999999993,0))}.xl\:focus\:via-grenadine-active:focus{--gradient-via-color:#cf4475;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.90699999999998,68.49300000000004,116.93789999999994,0))}.xl\:focus\:via-kiwi:focus{--gradient-via-color:#9a9f1e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154.2308,158.508,30.191999999999986,0))}.xl\:focus\:via-kiwi-active:focus{--gradient-via-color:#a3a815;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163.03679999999997,167.94299999999998,20.75700000000001,0))}.xl\:focus\:via-lilas:focus{--gradient-via-color:#7ea1d3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(125.81700000000005,161.21949999999998,210.78299999999996,0))}.xl\:focus\:via-lilas-active:focus{--gradient-via-color:#75a0db;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(117.147,159.7745,219.453,0))}.xl\:focus\:via-mahogany:focus{--gradient-via-color:#57142e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(86.751,20.348999999999997,45.80309999999995,0))}.xl\:focus\:via-mahogany-active:focus{--gradient-via-color:#610a2b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(97.46099999999998,9.639000000000014,43.304099999999934,0))}.xl\:focus\:via-ocher:focus{--gradient-via-color:#c29614;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(193.851,150.47549999999998,20.348999999999997,0))}.xl\:focus\:via-ocher-active:focus{--gradient-via-color:#cd9c0a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(204.561,155.8305,9.638999999999985,0))}.xl\:focus\:via-pine:focus{--gradient-via-color:#144d52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.39999999999999,76.50000000000003,81.60000000000002,0))}.xl\:focus\:via-pine-active:focus{--gradient-via-color:#0a555c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(10.199999999999996,85.00000000000003,91.80000000000001,0))}.xl\:focus\:via-platinum-active:focus,.xl\:focus\:via-platinum:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)}.xl\:focus\:via-prune:focus{--gradient-via-color:#661456;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102.204,20.195999999999998,85.80239999999993,0))}.xl\:focus\:via-prune-active:focus{--gradient-via-color:#72085d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(114.444,7.955999999999987,93.14639999999991,0))}.xl\:focus\:via-sand:focus{--gradient-via-color:#d7be88;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(215.475,190.44249999999997,136.42499999999998,0))}.xl\:focus\:via-sand-active:focus{--gradient-via-color:#dfc181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(223.38000000000002,193.341,128.51999999999995,0))}.xl\:focus\:via-sandPearl:focus{--gradient-via-color:#f0e5d6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(239.5725,229.4745,214.32750000000001,0))}.xl\:focus\:via-sandPearl-active:focus{--gradient-via-color:#f2e6d4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.37749999999997,230.0355,211.52250000000004,0))}.xl\:focus\:via-silver:focus{--gradient-via-color:#b1b2b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(176.97,177.98999999999998,180.03,0))}.xl\:focus\:via-silver-active:focus{--gradient-via-color:#a9afbc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(169.32,175.44,187.68,0))}.xl\:focus\:via-skyBlue:focus{--gradient-via-color:#98d2d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(152.184,209.78,215.016,0))}.xl\:focus\:via-skyBlue-active:focus{--gradient-via-color:#91d8de;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(145.04399999999998,215.73,222.156,0))}.xl\:focus\:via-southSea:focus{--gradient-via-color:#9dc9cd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156.64649999999997,200.57279999999997,205.45350000000002,0))}.xl\:focus\:via-southSea-active:focus{--gradient-via-color:#95ced5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(149.2515,206.48879999999994,212.8485,0))}.xl\:focus\:via-turquoise:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:focus\:via-turquoise-active:focus{--gradient-via-color:#0aaccd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(9.638999999999985,172.07399999999996,204.561,0))}.xl\:focus\:via-waterGreen:focus{--gradient-via-color:#007571;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,117.30000000000001,113.39000000000004,0))}.xl\:focus\:via-waterGreen-active:focus{--gradient-via-color:#00a8a3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(0,168.3,162.69000000000003,0))}.xl\:focus\:via-deepRed:focus{--gradient-via-color:#c32222;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195.07500000000002,34.425000000000004,34.425000000000004,0))}.xl\:focus\:via-deepRed-active:focus{--gradient-via-color:#cf1717;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(206.55,22.949999999999992,22.949999999999992,0))}.xl\:focus\:via-emerald:focus{--gradient-via-color:#14a33a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.195999999999984,163.404,58.3848,0))}.xl\:focus\:via-emerald-active:focus{--gradient-via-color:#0bad36;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(11.016000000000004,172.584,54.100800000000014,0))}.xl\:focus\:via-greenLight:focus{--gradient-via-color:#7cb342;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(124,179,66,0))}.xl\:focus\:via-orange-active:focus{--gradient-via-color:#f65f2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246.228,94.91099999999997,44.47199999999997,0))}.xl\:focus\:via-red-active:focus{--gradient-via-color:#e13737;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(225.165,55.33500000000002,55.33500000000002,0))}.xl\:focus\:via-white-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:focus\:via-white-button-active:focus,.xl\:focus\:via-white-button:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))}.xl\:focus\:via-code:focus{--gradient-via-color:#3f3d57;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(63.473749999999995,61.37850000000001,86.52149999999999,0))}.xl\:focus\:via-code-active:focus{--gradient-via-color:#37354b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(55.07999999999999,52.9125,74.58749999999999,0))}.xl\:focus\:via-gray-lighter:focus{--gradient-via-color:#f7f7f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,96.9%,0))}.xl\:focus\:via-gray-lighter-active:focus{--gradient-via-color:#ebebeb;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(234.60000000000002,234.60000000000002,234.60000000000002,0))}.xl\:focus\:via-gray-light:focus{--gradient-via-color:#d4d1d1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(212,209,209,0))}.xl\:focus\:via-gray-medium:focus{--gradient-via-color:#a8a0a0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(168,160,160,0))}.xl\:focus\:via-gray-darker:focus{--gradient-via-color:#504747;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,71,71,0))}.xl\:focus\:via-gray-darker-active:focus{--gradient-via-color:#14a5c2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(20.348999999999997,164.93399999999994,193.851,0))}.xl\:focus\:via-api-default:focus{--gradient-via-color:#507192;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(80,113,146,0))}.xl\:focus\:via-gray-xxl:focus{--gradient-via-color:#2c3e50;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,62,80,0))}.xl\:focus\:via-line-even:focus{--gradient-via-color:#f3f6f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(242.556,245.92199999999997,247.04399999999998,0))}.xl\:focus\:to-transparent:focus{--gradient-to-color:transparent}.xl\:focus\:to-current:focus{--gradient-to-color:currentColor}.xl\:focus\:to-black:focus{--gradient-to-color:#000}.xl\:focus\:to-white:focus{--gradient-to-color:#fff}.xl\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.xl\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.xl\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.xl\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.xl\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.xl\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.xl\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.xl\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.xl\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.xl\:focus\:to-gray-DEFAULT:focus,.xl\:focus\:to-gray:focus{--gradient-to-color:#718096}.xl\:focus\:to-red:focus{--gradient-to-color:#d64343}.xl\:focus\:to-orange:focus{--gradient-to-color:#eb6437}.xl\:focus\:to-yellow:focus{--gradient-to-color:#f8da30}.xl\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.xl\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.xl\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.xl\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.xl\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.xl\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.xl\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.xl\:focus\:to-green-800:focus{--gradient-to-color:#276749}.xl\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.xl\:focus\:to-green-DEFAULT:focus,.xl\:focus\:to-green:focus{--gradient-to-color:#38a169}.xl\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.xl\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.xl\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.xl\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.xl\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.xl\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.xl\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.xl\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.xl\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.xl\:focus\:to-teal-DEFAULT:focus,.xl\:focus\:to-teal:focus{--gradient-to-color:#319795}.xl\:focus\:to-blue-50:focus{--gradient-to-color:#d1eaff}.xl\:focus\:to-blue-100:focus{--gradient-to-color:#a8d7ff}.xl\:focus\:to-blue-200:focus{--gradient-to-color:#80c4ff}.xl\:focus\:to-blue-300:focus{--gradient-to-color:#57b0ff}.xl\:focus\:to-blue-400:focus{--gradient-to-color:#2e9dff}.xl\:focus\:to-blue-500:focus{--gradient-to-color:#058aff}.xl\:focus\:to-blue-600:focus{--gradient-to-color:#0075db}.xl\:focus\:to-blue-700:focus{--gradient-to-color:#005fb3}.xl\:focus\:to-blue-800:focus{--gradient-to-color:#00498a}.xl\:focus\:to-blue-900:focus{--gradient-to-color:#003461}.xl\:focus\:to-blue-DEFAULT:focus,.xl\:focus\:to-blue:focus{--gradient-to-color:#0075db}.xl\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.xl\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.xl\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.xl\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.xl\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.xl\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.xl\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.xl\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.xl\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.xl\:focus\:to-indigo-DEFAULT:focus,.xl\:focus\:to-indigo:focus{--gradient-to-color:#5a67d8}.xl\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.xl\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.xl\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.xl\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.xl\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.xl\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.xl\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.xl\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.xl\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.xl\:focus\:to-purple-DEFAULT:focus,.xl\:focus\:to-purple:focus{--gradient-to-color:#805ad5}.xl\:focus\:to-pink:focus{--gradient-to-color:#d81b60}.xl\:focus\:to-inherit:focus{--gradient-to-color:inherit}.xl\:focus\:to-amber:focus{--gradient-to-color:#d78737}.xl\:focus\:to-amber-active:focus{--gradient-to-color:#e3872b}.xl\:focus\:to-ardoise:focus{--gradient-to-color:#596a82}.xl\:focus\:to-ardoise-active:focus{--gradient-to-color:#476794}.xl\:focus\:to-blue-active:focus{--gradient-to-color:#14a5c2}.xl\:focus\:to-lightBlue-active:focus,.xl\:focus\:to-lightBlue:focus{--gradient-to-color:rgba(0,85,138,0.1)}.xl\:focus\:to-deepBlue:focus{--gradient-to-color:#0e346c}.xl\:focus\:to-deepBlue-active:focus{--gradient-to-color:#0a3f8f}.xl\:focus\:to-gold:focus{--gradient-to-color:#bd9e56}.xl\:focus\:to-gold-active:focus{--gradient-to-color:#c9a34a}.xl\:focus\:to-grenadine:focus{--gradient-to-color:#c35078}.xl\:focus\:to-grenadine-active:focus{--gradient-to-color:#cf4475}.xl\:focus\:to-kiwi:focus{--gradient-to-color:#9a9f1e}.xl\:focus\:to-kiwi-active:focus{--gradient-to-color:#a3a815}.xl\:focus\:to-lilas:focus{--gradient-to-color:#7ea1d3}.xl\:focus\:to-lilas-active:focus{--gradient-to-color:#75a0db}.xl\:focus\:to-mahogany:focus{--gradient-to-color:#57142e}.xl\:focus\:to-mahogany-active:focus{--gradient-to-color:#610a2b}.xl\:focus\:to-ocher:focus{--gradient-to-color:#c29614}.xl\:focus\:to-ocher-active:focus{--gradient-to-color:#cd9c0a}.xl\:focus\:to-pine:focus{--gradient-to-color:#144d52}.xl\:focus\:to-pine-active:focus{--gradient-to-color:#0a555c}.xl\:focus\:to-platinum-active:focus,.xl\:focus\:to-platinum:focus{--gradient-to-color:#000}.xl\:focus\:to-prune:focus{--gradient-to-color:#661456}.xl\:focus\:to-prune-active:focus{--gradient-to-color:#72085d}.xl\:focus\:to-sand:focus{--gradient-to-color:#d7be88}.xl\:focus\:to-sand-active:focus{--gradient-to-color:#dfc181}.xl\:focus\:to-sandPearl:focus{--gradient-to-color:#f0e5d6}.xl\:focus\:to-sandPearl-active:focus{--gradient-to-color:#f2e6d4}.xl\:focus\:to-silver:focus{--gradient-to-color:#b1b2b4}.xl\:focus\:to-silver-active:focus{--gradient-to-color:#a9afbc}.xl\:focus\:to-skyBlue:focus{--gradient-to-color:#98d2d7}.xl\:focus\:to-skyBlue-active:focus{--gradient-to-color:#91d8de}.xl\:focus\:to-southSea:focus{--gradient-to-color:#9dc9cd}.xl\:focus\:to-southSea-active:focus{--gradient-to-color:#95ced5}.xl\:focus\:to-turquoise:focus{--gradient-to-color:#14a5c2}.xl\:focus\:to-turquoise-active:focus{--gradient-to-color:#0aaccd}.xl\:focus\:to-waterGreen:focus{--gradient-to-color:#007571}.xl\:focus\:to-waterGreen-active:focus{--gradient-to-color:#00a8a3}.xl\:focus\:to-deepRed:focus{--gradient-to-color:#c32222}.xl\:focus\:to-deepRed-active:focus{--gradient-to-color:#cf1717}.xl\:focus\:to-emerald:focus{--gradient-to-color:#14a33a}.xl\:focus\:to-emerald-active:focus{--gradient-to-color:#0bad36}.xl\:focus\:to-greenLight:focus{--gradient-to-color:#7cb342}.xl\:focus\:to-orange-active:focus{--gradient-to-color:#f65f2c}.xl\:focus\:to-red-active:focus{--gradient-to-color:#e13737}.xl\:focus\:to-white-active:focus{--gradient-to-color:#14a5c2}.xl\:focus\:to-white-button-active:focus,.xl\:focus\:to-white-button:focus{--gradient-to-color:#fff}.xl\:focus\:to-code:focus{--gradient-to-color:#3f3d57}.xl\:focus\:to-code-active:focus{--gradient-to-color:#37354b}.xl\:focus\:to-gray-lighter:focus{--gradient-to-color:#f7f7f7}.xl\:focus\:to-gray-lighter-active:focus{--gradient-to-color:#ebebeb}.xl\:focus\:to-gray-light:focus{--gradient-to-color:#d4d1d1}.xl\:focus\:to-gray-medium:focus{--gradient-to-color:#a8a0a0}.xl\:focus\:to-gray-darker:focus{--gradient-to-color:#504747}.xl\:focus\:to-gray-darker-active:focus{--gradient-to-color:#14a5c2}.xl\:focus\:to-api-default:focus{--gradient-to-color:#507192}.xl\:focus\:to-gray-xxl:focus{--gradient-to-color:#2c3e50}.xl\:focus\:to-line-even:focus{--gradient-to-color:#f3f6f7}.xl\:bg-opacity-0{--bg-opacity:0}.xl\:bg-opacity-25{--bg-opacity:0.25}.xl\:bg-opacity-50{--bg-opacity:0.5}.xl\:bg-opacity-75{--bg-opacity:0.75}.xl\:bg-opacity-100{--bg-opacity:1}.xl\:hover\:bg-opacity-0:hover{--bg-opacity:0}.xl\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.xl\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.xl\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.xl\:hover\:bg-opacity-100:hover{--bg-opacity:1}.xl\:focus\:bg-opacity-0:focus{--bg-opacity:0}.xl\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.xl\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.xl\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.xl\:focus\:bg-opacity-100:focus{--bg-opacity:1}.xl\:bg-bottom{background-position:bottom}.xl\:bg-center{background-position:50%}.xl\:bg-left{background-position:0}.xl\:bg-left-bottom{background-position:0 100%}.xl\:bg-left-top{background-position:0 0}.xl\:bg-right{background-position:100%}.xl\:bg-right-bottom{background-position:100% 100%}.xl\:bg-right-top{background-position:100% 0}.xl\:bg-top{background-position:top}.xl\:bg-repeat{background-repeat:repeat}.xl\:bg-no-repeat{background-repeat:no-repeat}.xl\:bg-repeat-x{background-repeat:repeat-x}.xl\:bg-repeat-y{background-repeat:repeat-y}.xl\:bg-repeat-round{background-repeat:round}.xl\:bg-repeat-space{background-repeat:space}.xl\:bg-auto{background-size:auto}.xl\:bg-cover{background-size:cover}.xl\:bg-contain{background-size:contain}.xl\:border-collapse{border-collapse:collapse}.xl\:border-separate{border-collapse:separate}.xl\:border-transparent{border-color:transparent}.xl\:border-current{border-color:currentColor}.xl\:border-black{border-color:#000}.xl\:border-white{border-color:#fff}.xl\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.xl\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.xl\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.xl\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.xl\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.xl\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.xl\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.xl\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.xl\:border-gray,.xl\:border-gray-DEFAULT{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:border-red{border-color:#d64343}.xl\:border-orange{border-color:#eb6437}.xl\:border-yellow{border-color:#f8da30}.xl\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.xl\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.xl\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.xl\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.xl\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.xl\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.xl\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.xl\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.xl\:border-green,.xl\:border-green-DEFAULT{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.xl\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.xl\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.xl\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.xl\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.xl\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.xl\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.xl\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.xl\:border-teal,.xl\:border-teal-DEFAULT{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:border-blue-50{border-color:#d1eaff}.xl\:border-blue-100{border-color:#a8d7ff}.xl\:border-blue-200{border-color:#80c4ff}.xl\:border-blue-300{border-color:#57b0ff}.xl\:border-blue-400{border-color:#2e9dff}.xl\:border-blue-500{border-color:#058aff}.xl\:border-blue-600{border-color:#0075db}.xl\:border-blue-700{border-color:#005fb3}.xl\:border-blue-800{border-color:#00498a}.xl\:border-blue-900{border-color:#003461}.xl\:border-blue,.xl\:border-blue-DEFAULT{border-color:#0075db}.xl\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.xl\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.xl\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.xl\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.xl\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.xl\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.xl\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.xl\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.xl\:border-indigo,.xl\:border-indigo-DEFAULT{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.xl\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.xl\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.xl\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.xl\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.xl\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.xl\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.xl\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.xl\:border-purple,.xl\:border-purple-DEFAULT{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:border-pink{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.xl\:border-inherit{border-color:inherit}.xl\:border-amber{border-color:#d78737}.xl\:border-amber-active{border-color:#e3872b}.xl\:border-ardoise{border-color:#596a82}.xl\:border-ardoise-active{border-color:#476794}.xl\:border-blue-active{border-color:#14a5c2}.xl\:border-lightBlue,.xl\:border-lightBlue-active{border-color:rgba(0,85,138,.1)}.xl\:border-deepBlue{border-color:#0e346c}.xl\:border-deepBlue-active{border-color:#0a3f8f}.xl\:border-gold{border-color:#bd9e56}.xl\:border-gold-active{border-color:#c9a34a}.xl\:border-grenadine{border-color:#c35078}.xl\:border-grenadine-active{border-color:#cf4475}.xl\:border-kiwi{border-color:#9a9f1e}.xl\:border-kiwi-active{border-color:#a3a815}.xl\:border-lilas{border-color:#7ea1d3}.xl\:border-lilas-active{border-color:#75a0db}.xl\:border-mahogany{border-color:#57142e}.xl\:border-mahogany-active{border-color:#610a2b}.xl\:border-ocher{border-color:#c29614}.xl\:border-ocher-active{border-color:#cd9c0a}.xl\:border-pine{border-color:#144d52}.xl\:border-pine-active{border-color:#0a555c}.xl\:border-platinum,.xl\:border-platinum-active{border-color:#000}.xl\:border-prune{border-color:#661456}.xl\:border-prune-active{border-color:#72085d}.xl\:border-sand{border-color:#d7be88}.xl\:border-sand-active{border-color:#dfc181}.xl\:border-sandPearl{border-color:#f0e5d6}.xl\:border-sandPearl-active{border-color:#f2e6d4}.xl\:border-silver{border-color:#b1b2b4}.xl\:border-silver-active{border-color:#a9afbc}.xl\:border-skyBlue{border-color:#98d2d7}.xl\:border-skyBlue-active{border-color:#91d8de}.xl\:border-southSea{border-color:#9dc9cd}.xl\:border-southSea-active{border-color:#95ced5}.xl\:border-turquoise{border-color:#14a5c2}.xl\:border-turquoise-active{border-color:#0aaccd}.xl\:border-waterGreen{border-color:#007571}.xl\:border-waterGreen-active{border-color:#00a8a3}.xl\:border-deepRed{border-color:#c32222}.xl\:border-deepRed-active{border-color:#cf1717}.xl\:border-emerald{border-color:#14a33a}.xl\:border-emerald-active{border-color:#0bad36}.xl\:border-greenLight{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.xl\:border-orange-active{border-color:#f65f2c}.xl\:border-red-active{border-color:#e13737}.xl\:border-white-active{border-color:#14a5c2}.xl\:border-white-button,.xl\:border-white-button-active{border-color:#fff}.xl\:border-code{border-color:#3f3d57}.xl\:border-code-active{border-color:#37354b}.xl\:border-gray-lighter{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.xl\:border-gray-lighter-active{border-color:#ebebeb}.xl\:border-gray-light{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.xl\:border-gray-medium{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.xl\:border-gray-darker{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.xl\:border-gray-darker-active{border-color:#14a5c2}.xl\:border-api-default{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.xl\:border-gray-xxl{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.xl\:border-line-even{border-color:#f3f6f7}.xl\:border-DEFAULT{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.xl\:hover\:border-transparent:hover{border-color:transparent}.xl\:hover\:border-current:hover{border-color:currentColor}.xl\:hover\:border-black:hover{border-color:#000}.xl\:hover\:border-white:hover{border-color:#fff}.xl\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.xl\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.xl\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.xl\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.xl\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.xl\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.xl\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.xl\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.xl\:hover\:border-gray-DEFAULT:hover,.xl\:hover\:border-gray:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:hover\:border-red:hover{border-color:#d64343}.xl\:hover\:border-orange:hover{border-color:#eb6437}.xl\:hover\:border-yellow:hover{border-color:#f8da30}.xl\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.xl\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.xl\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.xl\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.xl\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.xl\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.xl\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.xl\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.xl\:hover\:border-green-DEFAULT:hover,.xl\:hover\:border-green:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.xl\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.xl\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.xl\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.xl\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.xl\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.xl\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.xl\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.xl\:hover\:border-teal-DEFAULT:hover,.xl\:hover\:border-teal:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:hover\:border-blue-50:hover{border-color:#d1eaff}.xl\:hover\:border-blue-100:hover{border-color:#a8d7ff}.xl\:hover\:border-blue-200:hover{border-color:#80c4ff}.xl\:hover\:border-blue-300:hover{border-color:#57b0ff}.xl\:hover\:border-blue-400:hover{border-color:#2e9dff}.xl\:hover\:border-blue-500:hover{border-color:#058aff}.xl\:hover\:border-blue-600:hover{border-color:#0075db}.xl\:hover\:border-blue-700:hover{border-color:#005fb3}.xl\:hover\:border-blue-800:hover{border-color:#00498a}.xl\:hover\:border-blue-900:hover{border-color:#003461}.xl\:hover\:border-blue-DEFAULT:hover,.xl\:hover\:border-blue:hover{border-color:#0075db}.xl\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.xl\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.xl\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.xl\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.xl\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.xl\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.xl\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.xl\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.xl\:hover\:border-indigo-DEFAULT:hover,.xl\:hover\:border-indigo:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.xl\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.xl\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.xl\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.xl\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.xl\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.xl\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.xl\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.xl\:hover\:border-purple-DEFAULT:hover,.xl\:hover\:border-purple:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:hover\:border-pink:hover{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.xl\:hover\:border-inherit:hover{border-color:inherit}.xl\:hover\:border-amber:hover{border-color:#d78737}.xl\:hover\:border-amber-active:hover{border-color:#e3872b}.xl\:hover\:border-ardoise:hover{border-color:#596a82}.xl\:hover\:border-ardoise-active:hover{border-color:#476794}.xl\:hover\:border-blue-active:hover{border-color:#14a5c2}.xl\:hover\:border-lightBlue-active:hover,.xl\:hover\:border-lightBlue:hover{border-color:rgba(0,85,138,.1)}.xl\:hover\:border-deepBlue:hover{border-color:#0e346c}.xl\:hover\:border-deepBlue-active:hover{border-color:#0a3f8f}.xl\:hover\:border-gold:hover{border-color:#bd9e56}.xl\:hover\:border-gold-active:hover{border-color:#c9a34a}.xl\:hover\:border-grenadine:hover{border-color:#c35078}.xl\:hover\:border-grenadine-active:hover{border-color:#cf4475}.xl\:hover\:border-kiwi:hover{border-color:#9a9f1e}.xl\:hover\:border-kiwi-active:hover{border-color:#a3a815}.xl\:hover\:border-lilas:hover{border-color:#7ea1d3}.xl\:hover\:border-lilas-active:hover{border-color:#75a0db}.xl\:hover\:border-mahogany:hover{border-color:#57142e}.xl\:hover\:border-mahogany-active:hover{border-color:#610a2b}.xl\:hover\:border-ocher:hover{border-color:#c29614}.xl\:hover\:border-ocher-active:hover{border-color:#cd9c0a}.xl\:hover\:border-pine:hover{border-color:#144d52}.xl\:hover\:border-pine-active:hover{border-color:#0a555c}.xl\:hover\:border-platinum-active:hover,.xl\:hover\:border-platinum:hover{border-color:#000}.xl\:hover\:border-prune:hover{border-color:#661456}.xl\:hover\:border-prune-active:hover{border-color:#72085d}.xl\:hover\:border-sand:hover{border-color:#d7be88}.xl\:hover\:border-sand-active:hover{border-color:#dfc181}.xl\:hover\:border-sandPearl:hover{border-color:#f0e5d6}.xl\:hover\:border-sandPearl-active:hover{border-color:#f2e6d4}.xl\:hover\:border-silver:hover{border-color:#b1b2b4}.xl\:hover\:border-silver-active:hover{border-color:#a9afbc}.xl\:hover\:border-skyBlue:hover{border-color:#98d2d7}.xl\:hover\:border-skyBlue-active:hover{border-color:#91d8de}.xl\:hover\:border-southSea:hover{border-color:#9dc9cd}.xl\:hover\:border-southSea-active:hover{border-color:#95ced5}.xl\:hover\:border-turquoise:hover{border-color:#14a5c2}.xl\:hover\:border-turquoise-active:hover{border-color:#0aaccd}.xl\:hover\:border-waterGreen:hover{border-color:#007571}.xl\:hover\:border-waterGreen-active:hover{border-color:#00a8a3}.xl\:hover\:border-deepRed:hover{border-color:#c32222}.xl\:hover\:border-deepRed-active:hover{border-color:#cf1717}.xl\:hover\:border-emerald:hover{border-color:#14a33a}.xl\:hover\:border-emerald-active:hover{border-color:#0bad36}.xl\:hover\:border-greenLight:hover{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.xl\:hover\:border-orange-active:hover{border-color:#f65f2c}.xl\:hover\:border-red-active:hover{border-color:#e13737}.xl\:hover\:border-white-active:hover{border-color:#14a5c2}.xl\:hover\:border-white-button-active:hover,.xl\:hover\:border-white-button:hover{border-color:#fff}.xl\:hover\:border-code:hover{border-color:#3f3d57}.xl\:hover\:border-code-active:hover{border-color:#37354b}.xl\:hover\:border-gray-lighter:hover{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.xl\:hover\:border-gray-lighter-active:hover{border-color:#ebebeb}.xl\:hover\:border-gray-light:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.xl\:hover\:border-gray-medium:hover{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.xl\:hover\:border-gray-darker:hover{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.xl\:hover\:border-gray-darker-active:hover{border-color:#14a5c2}.xl\:hover\:border-api-default:hover{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.xl\:hover\:border-gray-xxl:hover{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.xl\:hover\:border-line-even:hover{border-color:#f3f6f7}.xl\:hover\:border-DEFAULT:hover{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.xl\:focus\:border-transparent:focus{border-color:transparent}.xl\:focus\:border-current:focus{border-color:currentColor}.xl\:focus\:border-black:focus{border-color:#000}.xl\:focus\:border-white:focus{border-color:#fff}.xl\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.xl\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.xl\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.xl\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.xl\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.xl\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.xl\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.xl\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.xl\:focus\:border-gray-DEFAULT:focus,.xl\:focus\:border-gray:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:focus\:border-red:focus{border-color:#d64343}.xl\:focus\:border-orange:focus{border-color:#eb6437}.xl\:focus\:border-yellow:focus{border-color:#f8da30}.xl\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.xl\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.xl\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.xl\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.xl\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.xl\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.xl\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.xl\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.xl\:focus\:border-green-DEFAULT:focus,.xl\:focus\:border-green:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.xl\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.xl\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.xl\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.xl\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.xl\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.xl\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.xl\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.xl\:focus\:border-teal-DEFAULT:focus,.xl\:focus\:border-teal:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:focus\:border-blue-50:focus{border-color:#d1eaff}.xl\:focus\:border-blue-100:focus{border-color:#a8d7ff}.xl\:focus\:border-blue-200:focus{border-color:#80c4ff}.xl\:focus\:border-blue-300:focus{border-color:#57b0ff}.xl\:focus\:border-blue-400:focus{border-color:#2e9dff}.xl\:focus\:border-blue-500:focus{border-color:#058aff}.xl\:focus\:border-blue-600:focus{border-color:#0075db}.xl\:focus\:border-blue-700:focus{border-color:#005fb3}.xl\:focus\:border-blue-800:focus{border-color:#00498a}.xl\:focus\:border-blue-900:focus{border-color:#003461}.xl\:focus\:border-blue-DEFAULT:focus,.xl\:focus\:border-blue:focus{border-color:#0075db}.xl\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.xl\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.xl\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.xl\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.xl\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.xl\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.xl\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.xl\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.xl\:focus\:border-indigo-DEFAULT:focus,.xl\:focus\:border-indigo:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.xl\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.xl\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.xl\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.xl\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.xl\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.xl\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.xl\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.xl\:focus\:border-purple-DEFAULT:focus,.xl\:focus\:border-purple:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:focus\:border-pink:focus{--border-opacity:1;border-color:#d81b60;border-color:rgba(216,27,96,var(--border-opacity))}.xl\:focus\:border-inherit:focus{border-color:inherit}.xl\:focus\:border-amber:focus{border-color:#d78737}.xl\:focus\:border-amber-active:focus{border-color:#e3872b}.xl\:focus\:border-ardoise:focus{border-color:#596a82}.xl\:focus\:border-ardoise-active:focus{border-color:#476794}.xl\:focus\:border-blue-active:focus{border-color:#14a5c2}.xl\:focus\:border-lightBlue-active:focus,.xl\:focus\:border-lightBlue:focus{border-color:rgba(0,85,138,.1)}.xl\:focus\:border-deepBlue:focus{border-color:#0e346c}.xl\:focus\:border-deepBlue-active:focus{border-color:#0a3f8f}.xl\:focus\:border-gold:focus{border-color:#bd9e56}.xl\:focus\:border-gold-active:focus{border-color:#c9a34a}.xl\:focus\:border-grenadine:focus{border-color:#c35078}.xl\:focus\:border-grenadine-active:focus{border-color:#cf4475}.xl\:focus\:border-kiwi:focus{border-color:#9a9f1e}.xl\:focus\:border-kiwi-active:focus{border-color:#a3a815}.xl\:focus\:border-lilas:focus{border-color:#7ea1d3}.xl\:focus\:border-lilas-active:focus{border-color:#75a0db}.xl\:focus\:border-mahogany:focus{border-color:#57142e}.xl\:focus\:border-mahogany-active:focus{border-color:#610a2b}.xl\:focus\:border-ocher:focus{border-color:#c29614}.xl\:focus\:border-ocher-active:focus{border-color:#cd9c0a}.xl\:focus\:border-pine:focus{border-color:#144d52}.xl\:focus\:border-pine-active:focus{border-color:#0a555c}.xl\:focus\:border-platinum-active:focus,.xl\:focus\:border-platinum:focus{border-color:#000}.xl\:focus\:border-prune:focus{border-color:#661456}.xl\:focus\:border-prune-active:focus{border-color:#72085d}.xl\:focus\:border-sand:focus{border-color:#d7be88}.xl\:focus\:border-sand-active:focus{border-color:#dfc181}.xl\:focus\:border-sandPearl:focus{border-color:#f0e5d6}.xl\:focus\:border-sandPearl-active:focus{border-color:#f2e6d4}.xl\:focus\:border-silver:focus{border-color:#b1b2b4}.xl\:focus\:border-silver-active:focus{border-color:#a9afbc}.xl\:focus\:border-skyBlue:focus{border-color:#98d2d7}.xl\:focus\:border-skyBlue-active:focus{border-color:#91d8de}.xl\:focus\:border-southSea:focus{border-color:#9dc9cd}.xl\:focus\:border-southSea-active:focus{border-color:#95ced5}.xl\:focus\:border-turquoise:focus{border-color:#14a5c2}.xl\:focus\:border-turquoise-active:focus{border-color:#0aaccd}.xl\:focus\:border-waterGreen:focus{border-color:#007571}.xl\:focus\:border-waterGreen-active:focus{border-color:#00a8a3}.xl\:focus\:border-deepRed:focus{border-color:#c32222}.xl\:focus\:border-deepRed-active:focus{border-color:#cf1717}.xl\:focus\:border-emerald:focus{border-color:#14a33a}.xl\:focus\:border-emerald-active:focus{border-color:#0bad36}.xl\:focus\:border-greenLight:focus{--border-opacity:1;border-color:#7cb342;border-color:rgba(124,179,66,var(--border-opacity))}.xl\:focus\:border-orange-active:focus{border-color:#f65f2c}.xl\:focus\:border-red-active:focus{border-color:#e13737}.xl\:focus\:border-white-active:focus{border-color:#14a5c2}.xl\:focus\:border-white-button-active:focus,.xl\:focus\:border-white-button:focus{border-color:#fff}.xl\:focus\:border-code:focus{border-color:#3f3d57}.xl\:focus\:border-code-active:focus{border-color:#37354b}.xl\:focus\:border-gray-lighter:focus{--border-opacity:1;border-color:#f7f7f7;border-color:rgba(247,247,247,var(--border-opacity))}.xl\:focus\:border-gray-lighter-active:focus{border-color:#ebebeb}.xl\:focus\:border-gray-light:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.xl\:focus\:border-gray-medium:focus{--border-opacity:1;border-color:#a8a0a0;border-color:rgba(168,160,160,var(--border-opacity))}.xl\:focus\:border-gray-darker:focus{--border-opacity:1;border-color:#504747;border-color:rgba(80,71,71,var(--border-opacity))}.xl\:focus\:border-gray-darker-active:focus{border-color:#14a5c2}.xl\:focus\:border-api-default:focus{--border-opacity:1;border-color:#507192;border-color:rgba(80,113,146,var(--border-opacity))}.xl\:focus\:border-gray-xxl:focus{--border-opacity:1;border-color:#2c3e50;border-color:rgba(44,62,80,var(--border-opacity))}.xl\:focus\:border-line-even:focus{border-color:#f3f6f7}.xl\:focus\:border-DEFAULT:focus{--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity))}.xl\:border-opacity-0{--border-opacity:0}.xl\:border-opacity-25{--border-opacity:0.25}.xl\:border-opacity-50{--border-opacity:0.5}.xl\:border-opacity-75{--border-opacity:0.75}.xl\:border-opacity-100{--border-opacity:1}.xl\:hover\:border-opacity-0:hover{--border-opacity:0}.xl\:hover\:border-opacity-25:hover{--border-opacity:0.25}.xl\:hover\:border-opacity-50:hover{--border-opacity:0.5}.xl\:hover\:border-opacity-75:hover{--border-opacity:0.75}.xl\:hover\:border-opacity-100:hover{--border-opacity:1}.xl\:focus\:border-opacity-0:focus{--border-opacity:0}.xl\:focus\:border-opacity-25:focus{--border-opacity:0.25}.xl\:focus\:border-opacity-50:focus{--border-opacity:0.5}.xl\:focus\:border-opacity-75:focus{--border-opacity:0.75}.xl\:focus\:border-opacity-100:focus{--border-opacity:1}.xl\:rounded-none{border-radius:0}.xl\:rounded-sm{border-radius:.125rem}.xl\:rounded{border-radius:.25rem}.xl\:rounded-md{border-radius:.375rem}.xl\:rounded-lg{border-radius:.5rem}.xl\:rounded-xl{border-radius:.75rem}.xl\:rounded-2xl{border-radius:1rem}.xl\:rounded-3xl{border-radius:1.5rem}.xl\:rounded-full{border-radius:100%}.xl\:rounded-xs{border-radius:.15rem}.xl\:rounded-small{border-radius:.3125rem}.xl\:rounded-DEFAULT{border-radius:.5rem}.xl\:rounded-medium{border-radius:1rem}.xl\:rounded-large{border-radius:2rem}.xl\:rounded-half{border-radius:50%}.xl\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.xl\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.xl\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.xl\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.xl\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.xl\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.xl\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.xl\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.xl\:rounded-t{border-top-left-radius:.25rem}.xl\:rounded-r,.xl\:rounded-t{border-top-right-radius:.25rem}.xl\:rounded-b,.xl\:rounded-r{border-bottom-right-radius:.25rem}.xl\:rounded-b,.xl\:rounded-l{border-bottom-left-radius:.25rem}.xl\:rounded-l{border-top-left-radius:.25rem}.xl\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.xl\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.xl\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.xl\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.xl\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.xl\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.xl\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.xl\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.xl\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.xl\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.xl\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.xl\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.xl\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.xl\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.xl\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.xl\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.xl\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.xl\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.xl\:rounded-t-full{border-top-left-radius:100%;border-top-right-radius:100%}.xl\:rounded-r-full{border-top-right-radius:100%;border-bottom-right-radius:100%}.xl\:rounded-b-full{border-bottom-right-radius:100%;border-bottom-left-radius:100%}.xl\:rounded-l-full{border-top-left-radius:100%;border-bottom-left-radius:100%}.xl\:rounded-t-xs{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.xl\:rounded-r-xs{border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.xl\:rounded-b-xs{border-bottom-right-radius:.15rem;border-bottom-left-radius:.15rem}.xl\:rounded-l-xs{border-top-left-radius:.15rem;border-bottom-left-radius:.15rem}.xl\:rounded-t-small{border-top-left-radius:.3125rem;border-top-right-radius:.3125rem}.xl\:rounded-r-small{border-top-right-radius:.3125rem;border-bottom-right-radius:.3125rem}.xl\:rounded-b-small{border-bottom-right-radius:.3125rem;border-bottom-left-radius:.3125rem}.xl\:rounded-l-small{border-top-left-radius:.3125rem;border-bottom-left-radius:.3125rem}.xl\:rounded-t-DEFAULT{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.xl\:rounded-r-DEFAULT{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.xl\:rounded-b-DEFAULT{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-l-DEFAULT{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-t-medium{border-top-left-radius:1rem;border-top-right-radius:1rem}.xl\:rounded-r-medium{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.xl\:rounded-b-medium{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.xl\:rounded-l-medium{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.xl\:rounded-t-large{border-top-left-radius:2rem;border-top-right-radius:2rem}.xl\:rounded-r-large{border-top-right-radius:2rem;border-bottom-right-radius:2rem}.xl\:rounded-b-large{border-bottom-right-radius:2rem;border-bottom-left-radius:2rem}.xl\:rounded-l-large{border-top-left-radius:2rem;border-bottom-left-radius:2rem}.xl\:rounded-t-half{border-top-left-radius:50%;border-top-right-radius:50%}.xl\:rounded-r-half{border-top-right-radius:50%;border-bottom-right-radius:50%}.xl\:rounded-b-half{border-bottom-right-radius:50%;border-bottom-left-radius:50%}.xl\:rounded-l-half{border-top-left-radius:50%;border-bottom-left-radius:50%}.xl\:rounded-tl-none{border-top-left-radius:0}.xl\:rounded-tr-none{border-top-right-radius:0}.xl\:rounded-br-none{border-bottom-right-radius:0}.xl\:rounded-bl-none{border-bottom-left-radius:0}.xl\:rounded-tl-sm{border-top-left-radius:.125rem}.xl\:rounded-tr-sm{border-top-right-radius:.125rem}.xl\:rounded-br-sm{border-bottom-right-radius:.125rem}.xl\:rounded-bl-sm{border-bottom-left-radius:.125rem}.xl\:rounded-tl{border-top-left-radius:.25rem}.xl\:rounded-tr{border-top-right-radius:.25rem}.xl\:rounded-br{border-bottom-right-radius:.25rem}.xl\:rounded-bl{border-bottom-left-radius:.25rem}.xl\:rounded-tl-md{border-top-left-radius:.375rem}.xl\:rounded-tr-md{border-top-right-radius:.375rem}.xl\:rounded-br-md{border-bottom-right-radius:.375rem}.xl\:rounded-bl-md{border-bottom-left-radius:.375rem}.xl\:rounded-tl-lg{border-top-left-radius:.5rem}.xl\:rounded-tr-lg{border-top-right-radius:.5rem}.xl\:rounded-br-lg{border-bottom-right-radius:.5rem}.xl\:rounded-bl-lg{border-bottom-left-radius:.5rem}.xl\:rounded-tl-xl{border-top-left-radius:.75rem}.xl\:rounded-tr-xl{border-top-right-radius:.75rem}.xl\:rounded-br-xl{border-bottom-right-radius:.75rem}.xl\:rounded-bl-xl{border-bottom-left-radius:.75rem}.xl\:rounded-tl-2xl{border-top-left-radius:1rem}.xl\:rounded-tr-2xl{border-top-right-radius:1rem}.xl\:rounded-br-2xl{border-bottom-right-radius:1rem}.xl\:rounded-bl-2xl{border-bottom-left-radius:1rem}.xl\:rounded-tl-3xl{border-top-left-radius:1.5rem}.xl\:rounded-tr-3xl{border-top-right-radius:1.5rem}.xl\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.xl\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.xl\:rounded-tl-full{border-top-left-radius:100%}.xl\:rounded-tr-full{border-top-right-radius:100%}.xl\:rounded-br-full{border-bottom-right-radius:100%}.xl\:rounded-bl-full{border-bottom-left-radius:100%}.xl\:rounded-tl-xs{border-top-left-radius:.15rem}.xl\:rounded-tr-xs{border-top-right-radius:.15rem}.xl\:rounded-br-xs{border-bottom-right-radius:.15rem}.xl\:rounded-bl-xs{border-bottom-left-radius:.15rem}.xl\:rounded-tl-small{border-top-left-radius:.3125rem}.xl\:rounded-tr-small{border-top-right-radius:.3125rem}.xl\:rounded-br-small{border-bottom-right-radius:.3125rem}.xl\:rounded-bl-small{border-bottom-left-radius:.3125rem}.xl\:rounded-tl-DEFAULT{border-top-left-radius:.5rem}.xl\:rounded-tr-DEFAULT{border-top-right-radius:.5rem}.xl\:rounded-br-DEFAULT{border-bottom-right-radius:.5rem}.xl\:rounded-bl-DEFAULT{border-bottom-left-radius:.5rem}.xl\:rounded-tl-medium{border-top-left-radius:1rem}.xl\:rounded-tr-medium{border-top-right-radius:1rem}.xl\:rounded-br-medium{border-bottom-right-radius:1rem}.xl\:rounded-bl-medium{border-bottom-left-radius:1rem}.xl\:rounded-tl-large{border-top-left-radius:2rem}.xl\:rounded-tr-large{border-top-right-radius:2rem}.xl\:rounded-br-large{border-bottom-right-radius:2rem}.xl\:rounded-bl-large{border-bottom-left-radius:2rem}.xl\:rounded-tl-half{border-top-left-radius:50%}.xl\:rounded-tr-half{border-top-right-radius:50%}.xl\:rounded-br-half{border-bottom-right-radius:50%}.xl\:rounded-bl-half{border-bottom-left-radius:50%}.xl\:border-solid{border-style:solid}.xl\:border-dashed{border-style:dashed}.xl\:border-dotted{border-style:dotted}.xl\:border-double{border-style:double}.xl\:border-none{border-style:none}.xl\:border-0{border-width:0}.xl\:border-1{border-width:1px}.xl\:border-2{border-width:2px}.xl\:border-4{border-width:4px}.xl\:border-5{border-width:5px}.xl\:border-8{border-width:8px}.xl\:border,.xl\:border-DEFAULT{border-width:1px}.xl\:border-t-0{border-top-width:0}.xl\:border-r-0{border-right-width:0}.xl\:border-b-0{border-bottom-width:0}.xl\:border-l-0{border-left-width:0}.xl\:border-t-1{border-top-width:1px}.xl\:border-r-1{border-right-width:1px}.xl\:border-b-1{border-bottom-width:1px}.xl\:border-l-1{border-left-width:1px}.xl\:border-t-2{border-top-width:2px}.xl\:border-r-2{border-right-width:2px}.xl\:border-b-2{border-bottom-width:2px}.xl\:border-l-2{border-left-width:2px}.xl\:border-t-4{border-top-width:4px}.xl\:border-r-4{border-right-width:4px}.xl\:border-b-4{border-bottom-width:4px}.xl\:border-l-4{border-left-width:4px}.xl\:border-t-5{border-top-width:5px}.xl\:border-r-5{border-right-width:5px}.xl\:border-b-5{border-bottom-width:5px}.xl\:border-l-5{border-left-width:5px}.xl\:border-t-8{border-top-width:8px}.xl\:border-r-8{border-right-width:8px}.xl\:border-b-8{border-bottom-width:8px}.xl\:border-l-8{border-left-width:8px}.xl\:border-t{border-top-width:1px}.xl\:border-r{border-right-width:1px}.xl\:border-b{border-bottom-width:1px}.xl\:border-l{border-left-width:1px}.xl\:border-t-DEFAULT{border-top-width:1px}.xl\:border-r-DEFAULT{border-right-width:1px}.xl\:border-b-DEFAULT{border-bottom-width:1px}.xl\:border-l-DEFAULT{border-left-width:1px}.xl\:box-border{box-sizing:border-box}.xl\:box-content{box-sizing:content-box}.xl\:cursor-auto{cursor:auto}.xl\:cursor-default{cursor:default}.xl\:cursor-pointer{cursor:pointer}.xl\:cursor-wait{cursor:wait}.xl\:cursor-text{cursor:text}.xl\:cursor-move{cursor:move}.xl\:cursor-not-allowed{cursor:not-allowed}.xl\:block{display:block}.xl\:inline-block{display:inline-block}.xl\:inline{display:inline}.xl\:flex{display:flex}.xl\:inline-flex{display:inline-flex}.xl\:table{display:table}.xl\:table-caption{display:table-caption}.xl\:table-cell{display:table-cell}.xl\:table-column{display:table-column}.xl\:table-column-group{display:table-column-group}.xl\:table-footer-group{display:table-footer-group}.xl\:table-header-group{display:table-header-group}.xl\:table-row-group{display:table-row-group}.xl\:table-row{display:table-row}.xl\:flow-root{display:flow-root}.xl\:grid{display:grid}.xl\:inline-grid{display:inline-grid}.xl\:contents{display:contents}.xl\:hidden{display:none}.xl\:flex-row{flex-direction:row}.xl\:flex-row-reverse{flex-direction:row-reverse}.xl\:flex-col{flex-direction:column}.xl\:flex-col-reverse{flex-direction:column-reverse}.xl\:flex-wrap{flex-wrap:wrap}.xl\:flex-wrap-reverse{flex-wrap:wrap-reverse}.xl\:flex-no-wrap{flex-wrap:nowrap}.xl\:place-items-auto{place-items:auto}.xl\:place-items-start{place-items:start}.xl\:place-items-end{place-items:end}.xl\:place-items-center{place-items:center}.xl\:place-items-stretch{place-items:stretch}.xl\:place-content-center{place-content:center}.xl\:place-content-start{place-content:start}.xl\:place-content-end{place-content:end}.xl\:place-content-between{place-content:space-between}.xl\:place-content-around{place-content:space-around}.xl\:place-content-evenly{place-content:space-evenly}.xl\:place-content-stretch{place-content:stretch}.xl\:place-self-auto{place-self:auto}.xl\:place-self-start{place-self:start}.xl\:place-self-end{place-self:end}.xl\:place-self-center{place-self:center}.xl\:place-self-stretch{place-self:stretch}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:items-baseline{align-items:baseline}.xl\:items-stretch{align-items:stretch}.xl\:content-center{align-content:center}.xl\:content-start{align-content:flex-start}.xl\:content-end{align-content:flex-end}.xl\:content-between{align-content:space-between}.xl\:content-around{align-content:space-around}.xl\:content-evenly{align-content:space-evenly}.xl\:self-auto{align-self:auto}.xl\:self-start{align-self:flex-start}.xl\:self-end{align-self:flex-end}.xl\:self-center{align-self:center}.xl\:self-stretch{align-self:stretch}.xl\:justify-items-auto{justify-items:auto}.xl\:justify-items-start{justify-items:start}.xl\:justify-items-end{justify-items:end}.xl\:justify-items-center{justify-items:center}.xl\:justify-items-stretch{justify-items:stretch}.xl\:justify-start{justify-content:flex-start}.xl\:justify-end{justify-content:flex-end}.xl\:justify-center{justify-content:center}.xl\:justify-between{justify-content:space-between}.xl\:justify-around{justify-content:space-around}.xl\:justify-evenly{justify-content:space-evenly}.xl\:justify-self-auto{justify-self:auto}.xl\:justify-self-start{justify-self:start}.xl\:justify-self-end{justify-self:end}.xl\:justify-self-center{justify-self:center}.xl\:justify-self-stretch{justify-self:stretch}.xl\:flex-1{flex:1 1 0%}.xl\:flex-2{flex:2 2 0%}.xl\:flex-3{flex:3 3 0%}.xl\:flex-auto{flex:1 1 auto}.xl\:flex-initial{flex:0 1 auto}.xl\:flex-none{flex:none}.xl\:flex-grow-0{flex-grow:0}.xl\:flex-grow{flex-grow:1}.xl\:flex-shrink-0{flex-shrink:0}.xl\:flex-shrink{flex-shrink:1}.xl\:order-1{order:1}.xl\:order-2{order:2}.xl\:order-3{order:3}.xl\:order-4{order:4}.xl\:order-5{order:5}.xl\:order-6{order:6}.xl\:order-7{order:7}.xl\:order-8{order:8}.xl\:order-9{order:9}.xl\:order-10{order:10}.xl\:order-11{order:11}.xl\:order-12{order:12}.xl\:order-first{order:-9999}.xl\:order-last{order:9999}.xl\:order-none{order:0}.xl\:float-right{float:right}.xl\:float-left{float:left}.xl\:float-none{float:none}.xl\:clearfix:after{content:"";display:table;clear:both}.xl\:clear-left{clear:left}.xl\:clear-right{clear:right}.xl\:clear-both{clear:both}.xl\:clear-none{clear:none}.xl\:font-brand,.xl\:font-sans,.xl\:font-serif{font-family:Source Sans Pro,sans-serif}.xl\:font-inconsolata{font-family:Inconsolata}.xl\:font-source{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.xl\:font-hairline{font-weight:100}.xl\:font-thin{font-weight:200}.xl\:font-light{font-weight:300}.xl\:font-normal{font-weight:400}.xl\:font-medium{font-weight:500}.xl\:font-semibold{font-weight:600}.xl\:font-bold{font-weight:700}.xl\:font-extrabold{font-weight:800}.xl\:font-black{font-weight:900}.xl\:hover\:font-hairline:hover{font-weight:100}.xl\:hover\:font-thin:hover{font-weight:200}.xl\:hover\:font-light:hover{font-weight:300}.xl\:hover\:font-normal:hover{font-weight:400}.xl\:hover\:font-medium:hover{font-weight:500}.xl\:hover\:font-semibold:hover{font-weight:600}.xl\:hover\:font-bold:hover{font-weight:700}.xl\:hover\:font-extrabold:hover{font-weight:800}.xl\:hover\:font-black:hover{font-weight:900}.xl\:focus\:font-hairline:focus{font-weight:100}.xl\:focus\:font-thin:focus{font-weight:200}.xl\:focus\:font-light:focus{font-weight:300}.xl\:focus\:font-normal:focus{font-weight:400}.xl\:focus\:font-medium:focus{font-weight:500}.xl\:focus\:font-semibold:focus{font-weight:600}.xl\:focus\:font-bold:focus{font-weight:700}.xl\:focus\:font-extrabold:focus{font-weight:800}.xl\:focus\:font-black:focus{font-weight:900}.xl\:h-0{height:0}.xl\:h-1{height:.25rem}.xl\:h-2{height:.5rem}.xl\:h-3{height:.75rem}.xl\:h-4{height:1rem}.xl\:h-5{height:1.25rem}.xl\:h-6{height:1.5rem}.xl\:h-7{height:1.75rem}.xl\:h-8{height:2rem}.xl\:h-9{height:2.25rem}.xl\:h-10{height:2.5rem}.xl\:h-11{height:2.75rem}.xl\:h-12{height:3rem}.xl\:h-15{height:3.75rem}.xl\:h-16{height:4rem}.xl\:h-20{height:5rem}.xl\:h-22{height:5.5rem}.xl\:h-24{height:6rem}.xl\:h-25{height:6.25rem}.xl\:h-26{height:6.5rem}.xl\:h-28{height:8rem}.xl\:h-30{height:8.5rem}.xl\:h-32{height:9rem}.xl\:h-40{height:10rem}.xl\:h-48{height:12rem}.xl\:h-52{height:13rem}.xl\:h-56{height:14rem}.xl\:h-60{height:15rem}.xl\:h-64{height:16rem}.xl\:h-68{height:17rem}.xl\:h-auto{height:auto}.xl\:h-px{height:1px}.xl\:h-0\.5{height:.125rem}.xl\:h-1\.5{height:.375rem}.xl\:h-2\.5{height:.625rem}.xl\:h-7\.5{height:1.875rem}.xl\:h-full{height:100%}.xl\:h-screen{height:100vh}.xl\:text-micro{font-size:.5rem}.xl\:text-xxs{font-size:.625rem}.xl\:text-xs{font-size:.75rem}.xl\:text-sm{font-size:.875rem}.xl\:text-base{font-size:1rem}.xl\:text-md{font-size:1.125rem}.xl\:text-lg{font-size:1.25rem}.xl\:text-xl{font-size:1.5rem}.xl\:text-2xl{font-size:1.75rem}.xl\:text-3xl{font-size:2rem}.xl\:text-4xl{font-size:2.25rem}.xl\:text-5xl{font-size:2.75rem}.xl\:text-7xl{font-size:3.75rem}.xl\:text-11xl{font-size:4.75rem}.xl\:leading-3{line-height:.75rem}.xl\:leading-4{line-height:1rem}.xl\:leading-5{line-height:1.25rem}.xl\:leading-6{line-height:1.5rem}.xl\:leading-7{line-height:1.75rem}.xl\:leading-8{line-height:2rem}.xl\:leading-9{line-height:2.25rem}.xl\:leading-10{line-height:2.5rem}.xl\:leading-none{line-height:1}.xl\:leading-tight{line-height:1.25}.xl\:leading-snug{line-height:1.375}.xl\:leading-normal{line-height:1.5}.xl\:leading-relaxed{line-height:1.625}.xl\:leading-loose{line-height:2}.xl\:list-inside{list-style-position:inside}.xl\:list-outside{list-style-position:outside}.xl\:list-none{list-style-type:none}.xl\:list-disc{list-style-type:disc}.xl\:list-decimal{list-style-type:decimal}.xl\:m-0{margin:0}.xl\:m-1{margin:.25rem}.xl\:m-2{margin:.5rem}.xl\:m-3{margin:.75rem}.xl\:m-4{margin:1rem}.xl\:m-5{margin:1.25rem}.xl\:m-6{margin:1.5rem}.xl\:m-7{margin:1.75rem}.xl\:m-8{margin:2rem}.xl\:m-9{margin:2.25rem}.xl\:m-10{margin:2.5rem}.xl\:m-11{margin:2.75rem}.xl\:m-12{margin:3rem}.xl\:m-15{margin:3.75rem}.xl\:m-16{margin:4rem}.xl\:m-20{margin:5rem}.xl\:m-22{margin:5.5rem}.xl\:m-24{margin:6rem}.xl\:m-25{margin:6.25rem}.xl\:m-26{margin:6.5rem}.xl\:m-28{margin:8rem}.xl\:m-30{margin:8.5rem}.xl\:m-32{margin:9rem}.xl\:m-40{margin:10rem}.xl\:m-48{margin:12rem}.xl\:m-52{margin:13rem}.xl\:m-56{margin:14rem}.xl\:m-60{margin:15rem}.xl\:m-64{margin:16rem}.xl\:m-68{margin:17rem}.xl\:m-px{margin:1px}.xl\:-m-px{margin:-1px}.xl\:-m-2px{margin:-2px}.xl\:m-auto{margin:auto}.xl\:m-0\.5{margin:.125rem}.xl\:m-1\.5{margin:.375rem}.xl\:m-2\.5{margin:.625rem}.xl\:m-7\.5{margin:1.875rem}.xl\:-m-1{margin:-.25rem}.xl\:-m-2{margin:-.5rem}.xl\:-m-3{margin:-.75rem}.xl\:-m-4{margin:-1rem}.xl\:-m-5{margin:-1.25rem}.xl\:-m-6{margin:-1.5rem}.xl\:-m-7{margin:-1.75rem}.xl\:-m-8{margin:-2rem}.xl\:-m-9{margin:-2.25rem}.xl\:-m-10{margin:-2.5rem}.xl\:-m-11{margin:-2.75rem}.xl\:-m-12{margin:-3rem}.xl\:-m-15{margin:-3.75rem}.xl\:-m-16{margin:-4rem}.xl\:-m-20{margin:-5rem}.xl\:-m-22{margin:-5.5rem}.xl\:-m-24{margin:-6rem}.xl\:-m-25{margin:-6.25rem}.xl\:-m-26{margin:-6.5rem}.xl\:-m-28{margin:-8rem}.xl\:-m-30{margin:-8.5rem}.xl\:-m-32{margin:-9rem}.xl\:-m-40{margin:-10rem}.xl\:-m-48{margin:-12rem}.xl\:-m-52{margin:-13rem}.xl\:-m-56{margin:-14rem}.xl\:-m-60{margin:-15rem}.xl\:-m-64{margin:-16rem}.xl\:-m-68{margin:-17rem}.xl\:-m-0\.5{margin:-.125rem}.xl\:-m-1\.5{margin:-.375rem}.xl\:-m-2\.5{margin:-.625rem}.xl\:-m-7\.5{margin:-1.875rem}.xl\:my-0{margin-top:0;margin-bottom:0}.xl\:mx-0{margin-left:0;margin-right:0}.xl\:my-1{margin-top:.25rem;margin-bottom:.25rem}.xl\:mx-1{margin-left:.25rem;margin-right:.25rem}.xl\:my-2{margin-top:.5rem;margin-bottom:.5rem}.xl\:mx-2{margin-left:.5rem;margin-right:.5rem}.xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}.xl\:mx-3{margin-left:.75rem;margin-right:.75rem}.xl\:my-4{margin-top:1rem;margin-bottom:1rem}.xl\:mx-4{margin-left:1rem;margin-right:1rem}.xl\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.xl\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.xl\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.xl\:my-7{margin-top:1.75rem;margin-bottom:1.75rem}.xl\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.xl\:my-8{margin-top:2rem;margin-bottom:2rem}.xl\:mx-8{margin-left:2rem;margin-right:2rem}.xl\:my-9{margin-top:2.25rem;margin-bottom:2.25rem}.xl\:mx-9{margin-left:2.25rem;margin-right:2.25rem}.xl\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.xl\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.xl\:my-11{margin-top:2.75rem;margin-bottom:2.75rem}.xl\:mx-11{margin-left:2.75rem;margin-right:2.75rem}.xl\:my-12{margin-top:3rem;margin-bottom:3rem}.xl\:mx-12{margin-left:3rem;margin-right:3rem}.xl\:my-15{margin-top:3.75rem;margin-bottom:3.75rem}.xl\:mx-15{margin-left:3.75rem;margin-right:3.75rem}.xl\:my-16{margin-top:4rem;margin-bottom:4rem}.xl\:mx-16{margin-left:4rem;margin-right:4rem}.xl\:my-20{margin-top:5rem;margin-bottom:5rem}.xl\:mx-20{margin-left:5rem;margin-right:5rem}.xl\:my-22{margin-top:5.5rem;margin-bottom:5.5rem}.xl\:mx-22{margin-left:5.5rem;margin-right:5.5rem}.xl\:my-24{margin-top:6rem;margin-bottom:6rem}.xl\:mx-24{margin-left:6rem;margin-right:6rem}.xl\:my-25{margin-top:6.25rem;margin-bottom:6.25rem}.xl\:mx-25{margin-left:6.25rem;margin-right:6.25rem}.xl\:my-26{margin-top:6.5rem;margin-bottom:6.5rem}.xl\:mx-26{margin-left:6.5rem;margin-right:6.5rem}.xl\:my-28{margin-top:8rem;margin-bottom:8rem}.xl\:mx-28{margin-left:8rem;margin-right:8rem}.xl\:my-30{margin-top:8.5rem;margin-bottom:8.5rem}.xl\:mx-30{margin-left:8.5rem;margin-right:8.5rem}.xl\:my-32{margin-top:9rem;margin-bottom:9rem}.xl\:mx-32{margin-left:9rem;margin-right:9rem}.xl\:my-40{margin-top:10rem;margin-bottom:10rem}.xl\:mx-40{margin-left:10rem;margin-right:10rem}.xl\:my-48{margin-top:12rem;margin-bottom:12rem}.xl\:mx-48{margin-left:12rem;margin-right:12rem}.xl\:my-52{margin-top:13rem;margin-bottom:13rem}.xl\:mx-52{margin-left:13rem;margin-right:13rem}.xl\:my-56{margin-top:14rem;margin-bottom:14rem}.xl\:mx-56{margin-left:14rem;margin-right:14rem}.xl\:my-60{margin-top:15rem;margin-bottom:15rem}.xl\:mx-60{margin-left:15rem;margin-right:15rem}.xl\:my-64{margin-top:16rem;margin-bottom:16rem}.xl\:mx-64{margin-left:16rem;margin-right:16rem}.xl\:my-68{margin-top:17rem;margin-bottom:17rem}.xl\:mx-68{margin-left:17rem;margin-right:17rem}.xl\:my-px{margin-top:1px;margin-bottom:1px}.xl\:mx-px{margin-left:1px;margin-right:1px}.xl\:-my-px{margin-top:-1px;margin-bottom:-1px}.xl\:-mx-px{margin-left:-1px;margin-right:-1px}.xl\:-my-2px{margin-top:-2px;margin-bottom:-2px}.xl\:-mx-2px{margin-left:-2px;margin-right:-2px}.xl\:my-auto{margin-top:auto;margin-bottom:auto}.xl\:mx-auto{margin-left:auto;margin-right:auto}.xl\:my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.xl\:mx-0\.5{margin-left:.125rem;margin-right:.125rem}.xl\:my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.xl\:mx-1\.5{margin-left:.375rem;margin-right:.375rem}.xl\:my-2\.5{margin-top:.625rem;margin-bottom:.625rem}.xl\:mx-2\.5{margin-left:.625rem;margin-right:.625rem}.xl\:my-7\.5{margin-top:1.875rem;margin-bottom:1.875rem}.xl\:mx-7\.5{margin-left:1.875rem;margin-right:1.875rem}.xl\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.xl\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.xl\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.xl\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.xl\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.xl\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.xl\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.xl\:-mx-4{margin-left:-1rem;margin-right:-1rem}.xl\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.xl\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.xl\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.xl\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.xl\:-my-7{margin-top:-1.75rem;margin-bottom:-1.75rem}.xl\:-mx-7{margin-left:-1.75rem;margin-right:-1.75rem}.xl\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.xl\:-mx-8{margin-left:-2rem;margin-right:-2rem}.xl\:-my-9{margin-top:-2.25rem;margin-bottom:-2.25rem}.xl\:-mx-9{margin-left:-2.25rem;margin-right:-2.25rem}.xl\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.xl\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.xl\:-my-11{margin-top:-2.75rem;margin-bottom:-2.75rem}.xl\:-mx-11{margin-left:-2.75rem;margin-right:-2.75rem}.xl\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.xl\:-mx-12{margin-left:-3rem;margin-right:-3rem}.xl\:-my-15{margin-top:-3.75rem;margin-bottom:-3.75rem}.xl\:-mx-15{margin-left:-3.75rem;margin-right:-3.75rem}.xl\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.xl\:-mx-16{margin-left:-4rem;margin-right:-4rem}.xl\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.xl\:-mx-20{margin-left:-5rem;margin-right:-5rem}.xl\:-my-22{margin-top:-5.5rem;margin-bottom:-5.5rem}.xl\:-mx-22{margin-left:-5.5rem;margin-right:-5.5rem}.xl\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.xl\:-mx-24{margin-left:-6rem;margin-right:-6rem}.xl\:-my-25{margin-top:-6.25rem;margin-bottom:-6.25rem}.xl\:-mx-25{margin-left:-6.25rem;margin-right:-6.25rem}.xl\:-my-26{margin-top:-6.5rem;margin-bottom:-6.5rem}.xl\:-mx-26{margin-left:-6.5rem;margin-right:-6.5rem}.xl\:-my-28{margin-top:-8rem;margin-bottom:-8rem}.xl\:-mx-28{margin-left:-8rem;margin-right:-8rem}.xl\:-my-30{margin-top:-8.5rem;margin-bottom:-8.5rem}.xl\:-mx-30{margin-left:-8.5rem;margin-right:-8.5rem}.xl\:-my-32{margin-top:-9rem;margin-bottom:-9rem}.xl\:-mx-32{margin-left:-9rem;margin-right:-9rem}.xl\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.xl\:-mx-40{margin-left:-10rem;margin-right:-10rem}.xl\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.xl\:-mx-48{margin-left:-12rem;margin-right:-12rem}.xl\:-my-52{margin-top:-13rem;margin-bottom:-13rem}.xl\:-mx-52{margin-left:-13rem;margin-right:-13rem}.xl\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.xl\:-mx-56{margin-left:-14rem;margin-right:-14rem}.xl\:-my-60{margin-top:-15rem;margin-bottom:-15rem}.xl\:-mx-60{margin-left:-15rem;margin-right:-15rem}.xl\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.xl\:-mx-64{margin-left:-16rem;margin-right:-16rem}.xl\:-my-68{margin-top:-17rem;margin-bottom:-17rem}.xl\:-mx-68{margin-left:-17rem;margin-right:-17rem}.xl\:-my-0\.5{margin-top:-.125rem;margin-bottom:-.125rem}.xl\:-mx-0\.5{margin-left:-.125rem;margin-right:-.125rem}.xl\:-my-1\.5{margin-top:-.375rem;margin-bottom:-.375rem}.xl\:-mx-1\.5{margin-left:-.375rem;margin-right:-.375rem}.xl\:-my-2\.5{margin-top:-.625rem;margin-bottom:-.625rem}.xl\:-mx-2\.5{margin-left:-.625rem;margin-right:-.625rem}.xl\:-my-7\.5{margin-top:-1.875rem;margin-bottom:-1.875rem}.xl\:-mx-7\.5{margin-left:-1.875rem;margin-right:-1.875rem}.xl\:mt-0{margin-top:0}.xl\:mr-0{margin-right:0}.xl\:mb-0{margin-bottom:0}.xl\:ml-0{margin-left:0}.xl\:mt-1{margin-top:.25rem}.xl\:mr-1{margin-right:.25rem}.xl\:mb-1{margin-bottom:.25rem}.xl\:ml-1{margin-left:.25rem}.xl\:mt-2{margin-top:.5rem}.xl\:mr-2{margin-right:.5rem}.xl\:mb-2{margin-bottom:.5rem}.xl\:ml-2{margin-left:.5rem}.xl\:mt-3{margin-top:.75rem}.xl\:mr-3{margin-right:.75rem}.xl\:mb-3{margin-bottom:.75rem}.xl\:ml-3{margin-left:.75rem}.xl\:mt-4{margin-top:1rem}.xl\:mr-4{margin-right:1rem}.xl\:mb-4{margin-bottom:1rem}.xl\:ml-4{margin-left:1rem}.xl\:mt-5{margin-top:1.25rem}.xl\:mr-5{margin-right:1.25rem}.xl\:mb-5{margin-bottom:1.25rem}.xl\:ml-5{margin-left:1.25rem}.xl\:mt-6{margin-top:1.5rem}.xl\:mr-6{margin-right:1.5rem}.xl\:mb-6{margin-bottom:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:mt-7{margin-top:1.75rem}.xl\:mr-7{margin-right:1.75rem}.xl\:mb-7{margin-bottom:1.75rem}.xl\:ml-7{margin-left:1.75rem}.xl\:mt-8{margin-top:2rem}.xl\:mr-8{margin-right:2rem}.xl\:mb-8{margin-bottom:2rem}.xl\:ml-8{margin-left:2rem}.xl\:mt-9{margin-top:2.25rem}.xl\:mr-9{margin-right:2.25rem}.xl\:mb-9{margin-bottom:2.25rem}.xl\:ml-9{margin-left:2.25rem}.xl\:mt-10{margin-top:2.5rem}.xl\:mr-10{margin-right:2.5rem}.xl\:mb-10{margin-bottom:2.5rem}.xl\:ml-10{margin-left:2.5rem}.xl\:mt-11{margin-top:2.75rem}.xl\:mr-11{margin-right:2.75rem}.xl\:mb-11{margin-bottom:2.75rem}.xl\:ml-11{margin-left:2.75rem}.xl\:mt-12{margin-top:3rem}.xl\:mr-12{margin-right:3rem}.xl\:mb-12{margin-bottom:3rem}.xl\:ml-12{margin-left:3rem}.xl\:mt-15{margin-top:3.75rem}.xl\:mr-15{margin-right:3.75rem}.xl\:mb-15{margin-bottom:3.75rem}.xl\:ml-15{margin-left:3.75rem}.xl\:mt-16{margin-top:4rem}.xl\:mr-16{margin-right:4rem}.xl\:mb-16{margin-bottom:4rem}.xl\:ml-16{margin-left:4rem}.xl\:mt-20{margin-top:5rem}.xl\:mr-20{margin-right:5rem}.xl\:mb-20{margin-bottom:5rem}.xl\:ml-20{margin-left:5rem}.xl\:mt-22{margin-top:5.5rem}.xl\:mr-22{margin-right:5.5rem}.xl\:mb-22{margin-bottom:5.5rem}.xl\:ml-22{margin-left:5.5rem}.xl\:mt-24{margin-top:6rem}.xl\:mr-24{margin-right:6rem}.xl\:mb-24{margin-bottom:6rem}.xl\:ml-24{margin-left:6rem}.xl\:mt-25{margin-top:6.25rem}.xl\:mr-25{margin-right:6.25rem}.xl\:mb-25{margin-bottom:6.25rem}.xl\:ml-25{margin-left:6.25rem}.xl\:mt-26{margin-top:6.5rem}.xl\:mr-26{margin-right:6.5rem}.xl\:mb-26{margin-bottom:6.5rem}.xl\:ml-26{margin-left:6.5rem}.xl\:mt-28{margin-top:8rem}.xl\:mr-28{margin-right:8rem}.xl\:mb-28{margin-bottom:8rem}.xl\:ml-28{margin-left:8rem}.xl\:mt-30{margin-top:8.5rem}.xl\:mr-30{margin-right:8.5rem}.xl\:mb-30{margin-bottom:8.5rem}.xl\:ml-30{margin-left:8.5rem}.xl\:mt-32{margin-top:9rem}.xl\:mr-32{margin-right:9rem}.xl\:mb-32{margin-bottom:9rem}.xl\:ml-32{margin-left:9rem}.xl\:mt-40{margin-top:10rem}.xl\:mr-40{margin-right:10rem}.xl\:mb-40{margin-bottom:10rem}.xl\:ml-40{margin-left:10rem}.xl\:mt-48{margin-top:12rem}.xl\:mr-48{margin-right:12rem}.xl\:mb-48{margin-bottom:12rem}.xl\:ml-48{margin-left:12rem}.xl\:mt-52{margin-top:13rem}.xl\:mr-52{margin-right:13rem}.xl\:mb-52{margin-bottom:13rem}.xl\:ml-52{margin-left:13rem}.xl\:mt-56{margin-top:14rem}.xl\:mr-56{margin-right:14rem}.xl\:mb-56{margin-bottom:14rem}.xl\:ml-56{margin-left:14rem}.xl\:mt-60{margin-top:15rem}.xl\:mr-60{margin-right:15rem}.xl\:mb-60{margin-bottom:15rem}.xl\:ml-60{margin-left:15rem}.xl\:mt-64{margin-top:16rem}.xl\:mr-64{margin-right:16rem}.xl\:mb-64{margin-bottom:16rem}.xl\:ml-64{margin-left:16rem}.xl\:mt-68{margin-top:17rem}.xl\:mr-68{margin-right:17rem}.xl\:mb-68{margin-bottom:17rem}.xl\:ml-68{margin-left:17rem}.xl\:mt-px{margin-top:1px}.xl\:mr-px{margin-right:1px}.xl\:mb-px{margin-bottom:1px}.xl\:ml-px{margin-left:1px}.xl\:-mt-px{margin-top:-1px}.xl\:-mr-px{margin-right:-1px}.xl\:-mb-px{margin-bottom:-1px}.xl\:-ml-px{margin-left:-1px}.xl\:-mt-2px{margin-top:-2px}.xl\:-mr-2px{margin-right:-2px}.xl\:-mb-2px{margin-bottom:-2px}.xl\:-ml-2px{margin-left:-2px}.xl\:mt-auto{margin-top:auto}.xl\:mr-auto{margin-right:auto}.xl\:mb-auto{margin-bottom:auto}.xl\:ml-auto{margin-left:auto}.xl\:mt-0\.5{margin-top:.125rem}.xl\:mr-0\.5{margin-right:.125rem}.xl\:mb-0\.5{margin-bottom:.125rem}.xl\:ml-0\.5{margin-left:.125rem}.xl\:mt-1\.5{margin-top:.375rem}.xl\:mr-1\.5{margin-right:.375rem}.xl\:mb-1\.5{margin-bottom:.375rem}.xl\:ml-1\.5{margin-left:.375rem}.xl\:mt-2\.5{margin-top:.625rem}.xl\:mr-2\.5{margin-right:.625rem}.xl\:mb-2\.5{margin-bottom:.625rem}.xl\:ml-2\.5{margin-left:.625rem}.xl\:mt-7\.5{margin-top:1.875rem}.xl\:mr-7\.5{margin-right:1.875rem}.xl\:mb-7\.5{margin-bottom:1.875rem}.xl\:ml-7\.5{margin-left:1.875rem}.xl\:-mt-1{margin-top:-.25rem}.xl\:-mr-1{margin-right:-.25rem}.xl\:-mb-1{margin-bottom:-.25rem}.xl\:-ml-1{margin-left:-.25rem}.xl\:-mt-2{margin-top:-.5rem}.xl\:-mr-2{margin-right:-.5rem}.xl\:-mb-2{margin-bottom:-.5rem}.xl\:-ml-2{margin-left:-.5rem}.xl\:-mt-3{margin-top:-.75rem}.xl\:-mr-3{margin-right:-.75rem}.xl\:-mb-3{margin-bottom:-.75rem}.xl\:-ml-3{margin-left:-.75rem}.xl\:-mt-4{margin-top:-1rem}.xl\:-mr-4{margin-right:-1rem}.xl\:-mb-4{margin-bottom:-1rem}.xl\:-ml-4{margin-left:-1rem}.xl\:-mt-5{margin-top:-1.25rem}.xl\:-mr-5{margin-right:-1.25rem}.xl\:-mb-5{margin-bottom:-1.25rem}.xl\:-ml-5{margin-left:-1.25rem}.xl\:-mt-6{margin-top:-1.5rem}.xl\:-mr-6{margin-right:-1.5rem}.xl\:-mb-6{margin-bottom:-1.5rem}.xl\:-ml-6{margin-left:-1.5rem}.xl\:-mt-7{margin-top:-1.75rem}.xl\:-mr-7{margin-right:-1.75rem}.xl\:-mb-7{margin-bottom:-1.75rem}.xl\:-ml-7{margin-left:-1.75rem}.xl\:-mt-8{margin-top:-2rem}.xl\:-mr-8{margin-right:-2rem}.xl\:-mb-8{margin-bottom:-2rem}.xl\:-ml-8{margin-left:-2rem}.xl\:-mt-9{margin-top:-2.25rem}.xl\:-mr-9{margin-right:-2.25rem}.xl\:-mb-9{margin-bottom:-2.25rem}.xl\:-ml-9{margin-left:-2.25rem}.xl\:-mt-10{margin-top:-2.5rem}.xl\:-mr-10{margin-right:-2.5rem}.xl\:-mb-10{margin-bottom:-2.5rem}.xl\:-ml-10{margin-left:-2.5rem}.xl\:-mt-11{margin-top:-2.75rem}.xl\:-mr-11{margin-right:-2.75rem}.xl\:-mb-11{margin-bottom:-2.75rem}.xl\:-ml-11{margin-left:-2.75rem}.xl\:-mt-12{margin-top:-3rem}.xl\:-mr-12{margin-right:-3rem}.xl\:-mb-12{margin-bottom:-3rem}.xl\:-ml-12{margin-left:-3rem}.xl\:-mt-15{margin-top:-3.75rem}.xl\:-mr-15{margin-right:-3.75rem}.xl\:-mb-15{margin-bottom:-3.75rem}.xl\:-ml-15{margin-left:-3.75rem}.xl\:-mt-16{margin-top:-4rem}.xl\:-mr-16{margin-right:-4rem}.xl\:-mb-16{margin-bottom:-4rem}.xl\:-ml-16{margin-left:-4rem}.xl\:-mt-20{margin-top:-5rem}.xl\:-mr-20{margin-right:-5rem}.xl\:-mb-20{margin-bottom:-5rem}.xl\:-ml-20{margin-left:-5rem}.xl\:-mt-22{margin-top:-5.5rem}.xl\:-mr-22{margin-right:-5.5rem}.xl\:-mb-22{margin-bottom:-5.5rem}.xl\:-ml-22{margin-left:-5.5rem}.xl\:-mt-24{margin-top:-6rem}.xl\:-mr-24{margin-right:-6rem}.xl\:-mb-24{margin-bottom:-6rem}.xl\:-ml-24{margin-left:-6rem}.xl\:-mt-25{margin-top:-6.25rem}.xl\:-mr-25{margin-right:-6.25rem}.xl\:-mb-25{margin-bottom:-6.25rem}.xl\:-ml-25{margin-left:-6.25rem}.xl\:-mt-26{margin-top:-6.5rem}.xl\:-mr-26{margin-right:-6.5rem}.xl\:-mb-26{margin-bottom:-6.5rem}.xl\:-ml-26{margin-left:-6.5rem}.xl\:-mt-28{margin-top:-8rem}.xl\:-mr-28{margin-right:-8rem}.xl\:-mb-28{margin-bottom:-8rem}.xl\:-ml-28{margin-left:-8rem}.xl\:-mt-30{margin-top:-8.5rem}.xl\:-mr-30{margin-right:-8.5rem}.xl\:-mb-30{margin-bottom:-8.5rem}.xl\:-ml-30{margin-left:-8.5rem}.xl\:-mt-32{margin-top:-9rem}.xl\:-mr-32{margin-right:-9rem}.xl\:-mb-32{margin-bottom:-9rem}.xl\:-ml-32{margin-left:-9rem}.xl\:-mt-40{margin-top:-10rem}.xl\:-mr-40{margin-right:-10rem}.xl\:-mb-40{margin-bottom:-10rem}.xl\:-ml-40{margin-left:-10rem}.xl\:-mt-48{margin-top:-12rem}.xl\:-mr-48{margin-right:-12rem}.xl\:-mb-48{margin-bottom:-12rem}.xl\:-ml-48{margin-left:-12rem}.xl\:-mt-52{margin-top:-13rem}.xl\:-mr-52{margin-right:-13rem}.xl\:-mb-52{margin-bottom:-13rem}.xl\:-ml-52{margin-left:-13rem}.xl\:-mt-56{margin-top:-14rem}.xl\:-mr-56{margin-right:-14rem}.xl\:-mb-56{margin-bottom:-14rem}.xl\:-ml-56{margin-left:-14rem}.xl\:-mt-60{margin-top:-15rem}.xl\:-mr-60{margin-right:-15rem}.xl\:-mb-60{margin-bottom:-15rem}.xl\:-ml-60{margin-left:-15rem}.xl\:-mt-64{margin-top:-16rem}.xl\:-mr-64{margin-right:-16rem}.xl\:-mb-64{margin-bottom:-16rem}.xl\:-ml-64{margin-left:-16rem}.xl\:-mt-68{margin-top:-17rem}.xl\:-mr-68{margin-right:-17rem}.xl\:-mb-68{margin-bottom:-17rem}.xl\:-ml-68{margin-left:-17rem}.xl\:-mt-0\.5{margin-top:-.125rem}.xl\:-mr-0\.5{margin-right:-.125rem}.xl\:-mb-0\.5{margin-bottom:-.125rem}.xl\:-ml-0\.5{margin-left:-.125rem}.xl\:-mt-1\.5{margin-top:-.375rem}.xl\:-mr-1\.5{margin-right:-.375rem}.xl\:-mb-1\.5{margin-bottom:-.375rem}.xl\:-ml-1\.5{margin-left:-.375rem}.xl\:-mt-2\.5{margin-top:-.625rem}.xl\:-mr-2\.5{margin-right:-.625rem}.xl\:-mb-2\.5{margin-bottom:-.625rem}.xl\:-ml-2\.5{margin-left:-.625rem}.xl\:-mt-7\.5{margin-top:-1.875rem}.xl\:-mr-7\.5{margin-right:-1.875rem}.xl\:-mb-7\.5{margin-bottom:-1.875rem}.xl\:-ml-7\.5{margin-left:-1.875rem}.xl\:max-h-0{max-height:0}.xl\:max-h-1{max-height:.25rem}.xl\:max-h-2{max-height:.5rem}.xl\:max-h-3{max-height:.75rem}.xl\:max-h-4{max-height:1rem}.xl\:max-h-5{max-height:1.25rem}.xl\:max-h-6{max-height:1.5rem}.xl\:max-h-7{max-height:1.75rem}.xl\:max-h-8{max-height:2rem}.xl\:max-h-9{max-height:2.25rem}.xl\:max-h-10{max-height:2.5rem}.xl\:max-h-11{max-height:2.75rem}.xl\:max-h-12{max-height:3rem}.xl\:max-h-15{max-height:3.75rem}.xl\:max-h-16{max-height:4rem}.xl\:max-h-20{max-height:5rem}.xl\:max-h-22{max-height:5.5rem}.xl\:max-h-24{max-height:6rem}.xl\:max-h-25{max-height:6.25rem}.xl\:max-h-26{max-height:6.5rem}.xl\:max-h-28{max-height:8rem}.xl\:max-h-30{max-height:8.5rem}.xl\:max-h-32{max-height:9rem}.xl\:max-h-40{max-height:10rem}.xl\:max-h-48{max-height:12rem}.xl\:max-h-52{max-height:13rem}.xl\:max-h-56{max-height:14rem}.xl\:max-h-60{max-height:15rem}.xl\:max-h-64{max-height:16rem}.xl\:max-h-68{max-height:17rem}.xl\:max-h-px{max-height:1px}.xl\:max-h-0\.5{max-height:.125rem}.xl\:max-h-1\.5{max-height:.375rem}.xl\:max-h-2\.5{max-height:.625rem}.xl\:max-h-7\.5{max-height:1.875rem}.xl\:max-h-full{max-height:100%}.xl\:max-h-screen{max-height:100vh}.xl\:max-w-none{max-width:none}.xl\:max-w-xs{max-width:20rem}.xl\:max-w-sm{max-width:30rem}.xl\:max-w-md{max-width:40rem}.xl\:max-w-lg{max-width:50rem}.xl\:max-w-xl{max-width:60rem}.xl\:max-w-2xl{max-width:70rem}.xl\:max-w-3xl{max-width:80rem}.xl\:max-w-4xl{max-width:90rem}.xl\:max-w-5xl{max-width:100rem}.xl\:max-w-6xl{max-width:72rem}.xl\:max-w-full{max-width:100%}.xl\:max-w-screen-sm{max-width:40.01em}.xl\:max-w-screen-md{max-width:50.01em}.xl\:max-w-screen-lg{max-width:64.01em}.xl\:max-w-screen-xl{max-width:76.26em}.xl\:max-w-1\/4{max-width:25%}.xl\:max-w-1\/2{max-width:50%}.xl\:max-w-3\/5{max-width:60%}.xl\:max-w-4\/5{max-width:80%}.xl\:max-w-9\/10{max-width:90%}.xl\:max-w-site-mini{max-width:17.5rem}.xl\:max-w-site-small{max-width:31.25rem}.xl\:max-w-site-medium{max-width:43.75rem}.xl\:max-w-site-large{max-width:56.25rem}.xl\:max-w-site-xxl{max-width:90rem}.xl\:max-w-site{max-width:73.75rem}.xl\:max-w-screen{max-width:100vw}.xl\:min-h-0{min-height:0}.xl\:min-h-full{min-height:100%}.xl\:min-h-screen{min-height:100vh}.xl\:min-w-0{min-width:0}.xl\:min-w-full{min-width:100%}.xl\:min-w-min{min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content}.xl\:min-w-max{min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content}.xl\:min-w-site{min-width:18.75rem}.xl\:min-w-input-mini{min-width:17.5rem}.xl\:min-w-input-small{min-width:31.25rem}.xl\:min-w-input-medium{min-width:36.3125rem}.xl\:min-w-input-large{min-width:61.45rem}.xl\:min-w-button-mini{min-width:5.5rem}.xl\:min-w-button-small{min-width:7rem}.xl\:min-w-button-medium{min-width:9.875rem}.xl\:min-w-button-large{min-width:10rem}.xl\:object-contain{-o-object-fit:contain;object-fit:contain}.xl\:object-cover{-o-object-fit:cover;object-fit:cover}.xl\:object-fill{-o-object-fit:fill;object-fit:fill}.xl\:object-none{-o-object-fit:none;object-fit:none}.xl\:object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.xl\:object-bottom{-o-object-position:bottom;object-position:bottom}.xl\:object-center{-o-object-position:center;object-position:center}.xl\:object-left{-o-object-position:left;object-position:left}.xl\:object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.xl\:object-left-top{-o-object-position:left top;object-position:left top}.xl\:object-right{-o-object-position:right;object-position:right}.xl\:object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.xl\:object-right-top{-o-object-position:right top;object-position:right top}.xl\:object-top{-o-object-position:top;object-position:top}.xl\:opacity-0{opacity:0}.xl\:opacity-25{opacity:.25}.xl\:opacity-50{opacity:.5}.xl\:opacity-75{opacity:.75}.xl\:opacity-100{opacity:1}.xl\:hover\:opacity-0:hover{opacity:0}.xl\:hover\:opacity-25:hover{opacity:.25}.xl\:hover\:opacity-50:hover{opacity:.5}.xl\:hover\:opacity-75:hover{opacity:.75}.xl\:hover\:opacity-100:hover{opacity:1}.xl\:focus\:opacity-0:focus{opacity:0}.xl\:focus\:opacity-25:focus{opacity:.25}.xl\:focus\:opacity-50:focus{opacity:.5}.xl\:focus\:opacity-75:focus{opacity:.75}.xl\:focus\:opacity-100:focus{opacity:1}.group:hover .xl\:group-hover\:opacity-0{opacity:0}.group:hover .xl\:group-hover\:opacity-25{opacity:.25}.group:hover .xl\:group-hover\:opacity-50{opacity:.5}.group:hover .xl\:group-hover\:opacity-75{opacity:.75}.group:hover .xl\:group-hover\:opacity-100{opacity:1}.xl\:outline-none{outline:2px solid transparent;outline-offset:2px}.xl\:outline-white{outline:2px dotted #fff;outline-offset:2px}.xl\:outline-black{outline:2px dotted #000;outline-offset:2px}.xl\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.xl\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.xl\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.xl\:overflow-auto{overflow:auto}.xl\:overflow-hidden{overflow:hidden}.xl\:overflow-visible{overflow:visible}.xl\:overflow-scroll{overflow:scroll}.xl\:overflow-x-auto{overflow-x:auto}.xl\:overflow-y-auto{overflow-y:auto}.xl\:overflow-x-hidden{overflow-x:hidden}.xl\:overflow-y-hidden{overflow-y:hidden}.xl\:overflow-x-visible{overflow-x:visible}.xl\:overflow-y-visible{overflow-y:visible}.xl\:overflow-x-scroll{overflow-x:scroll}.xl\:overflow-y-scroll{overflow-y:scroll}.xl\:scrolling-touch{-webkit-overflow-scrolling:touch}.xl\:scrolling-auto{-webkit-overflow-scrolling:auto}.xl\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.xl\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.xl\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.xl\:overscroll-y-auto{overscroll-behavior-y:auto}.xl\:overscroll-y-contain{overscroll-behavior-y:contain}.xl\:overscroll-y-none{overscroll-behavior-y:none}.xl\:overscroll-x-auto{overscroll-behavior-x:auto}.xl\:overscroll-x-contain{overscroll-behavior-x:contain}.xl\:overscroll-x-none{overscroll-behavior-x:none}.xl\:p-0{padding:0}.xl\:p-1{padding:.25rem}.xl\:p-2{padding:.5rem}.xl\:p-3{padding:.75rem}.xl\:p-4{padding:1rem}.xl\:p-5{padding:1.25rem}.xl\:p-6{padding:1.5rem}.xl\:p-7{padding:1.75rem}.xl\:p-8{padding:2rem}.xl\:p-9{padding:2.25rem}.xl\:p-10{padding:2.5rem}.xl\:p-11{padding:2.75rem}.xl\:p-12{padding:3rem}.xl\:p-15{padding:3.75rem}.xl\:p-16{padding:4rem}.xl\:p-20{padding:5rem}.xl\:p-22{padding:5.5rem}.xl\:p-24{padding:6rem}.xl\:p-25{padding:6.25rem}.xl\:p-26{padding:6.5rem}.xl\:p-28{padding:8rem}.xl\:p-30{padding:8.5rem}.xl\:p-32{padding:9rem}.xl\:p-40{padding:10rem}.xl\:p-48{padding:12rem}.xl\:p-52{padding:13rem}.xl\:p-56{padding:14rem}.xl\:p-60{padding:15rem}.xl\:p-64{padding:16rem}.xl\:p-68{padding:17rem}.xl\:p-px{padding:1px}.xl\:p-0\.5{padding:.125rem}.xl\:p-1\.5{padding:.375rem}.xl\:p-2\.5{padding:.625rem}.xl\:p-7\.5{padding:1.875rem}.xl\:py-0{padding-top:0;padding-bottom:0}.xl\:px-0{padding-left:0;padding-right:0}.xl\:py-1{padding-top:.25rem;padding-bottom:.25rem}.xl\:px-1{padding-left:.25rem;padding-right:.25rem}.xl\:py-2{padding-top:.5rem;padding-bottom:.5rem}.xl\:px-2{padding-left:.5rem;padding-right:.5rem}.xl\:py-3{padding-top:.75rem;padding-bottom:.75rem}.xl\:px-3{padding-left:.75rem;padding-right:.75rem}.xl\:py-4{padding-top:1rem;padding-bottom:1rem}.xl\:px-4{padding-left:1rem;padding-right:1rem}.xl\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.xl\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.xl\:px-6{padding-left:1.5rem;padding-right:1.5rem}.xl\:py-7{padding-top:1.75rem;padding-bottom:1.75rem}.xl\:px-7{padding-left:1.75rem;padding-right:1.75rem}.xl\:py-8{padding-top:2rem;padding-bottom:2rem}.xl\:px-8{padding-left:2rem;padding-right:2rem}.xl\:py-9{padding-top:2.25rem;padding-bottom:2.25rem}.xl\:px-9{padding-left:2.25rem;padding-right:2.25rem}.xl\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.xl\:px-10{padding-left:2.5rem;padding-right:2.5rem}.xl\:py-11{padding-top:2.75rem;padding-bottom:2.75rem}.xl\:px-11{padding-left:2.75rem;padding-right:2.75rem}.xl\:py-12{padding-top:3rem;padding-bottom:3rem}.xl\:px-12{padding-left:3rem;padding-right:3rem}.xl\:py-15{padding-top:3.75rem;padding-bottom:3.75rem}.xl\:px-15{padding-left:3.75rem;padding-right:3.75rem}.xl\:py-16{padding-top:4rem;padding-bottom:4rem}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:py-20{padding-top:5rem;padding-bottom:5rem}.xl\:px-20{padding-left:5rem;padding-right:5rem}.xl\:py-22{padding-top:5.5rem;padding-bottom:5.5rem}.xl\:px-22{padding-left:5.5rem;padding-right:5.5rem}.xl\:py-24{padding-top:6rem;padding-bottom:6rem}.xl\:px-24{padding-left:6rem;padding-right:6rem}.xl\:py-25{padding-top:6.25rem;padding-bottom:6.25rem}.xl\:px-25{padding-left:6.25rem;padding-right:6.25rem}.xl\:py-26{padding-top:6.5rem;padding-bottom:6.5rem}.xl\:px-26{padding-left:6.5rem;padding-right:6.5rem}.xl\:py-28{padding-top:8rem;padding-bottom:8rem}.xl\:px-28{padding-left:8rem;padding-right:8rem}.xl\:py-30{padding-top:8.5rem;padding-bottom:8.5rem}.xl\:px-30{padding-left:8.5rem;padding-right:8.5rem}.xl\:py-32{padding-top:9rem;padding-bottom:9rem}.xl\:px-32{padding-left:9rem;padding-right:9rem}.xl\:py-40{padding-top:10rem;padding-bottom:10rem}.xl\:px-40{padding-left:10rem;padding-right:10rem}.xl\:py-48{padding-top:12rem;padding-bottom:12rem}.xl\:px-48{padding-left:12rem;padding-right:12rem}.xl\:py-52{padding-top:13rem;padding-bottom:13rem}.xl\:px-52{padding-left:13rem;padding-right:13rem}.xl\:py-56{padding-top:14rem;padding-bottom:14rem}.xl\:px-56{padding-left:14rem;padding-right:14rem}.xl\:py-60{padding-top:15rem;padding-bottom:15rem}.xl\:px-60{padding-left:15rem;padding-right:15rem}.xl\:py-64{padding-top:16rem;padding-bottom:16rem}.xl\:px-64{padding-left:16rem;padding-right:16rem}.xl\:py-68{padding-top:17rem;padding-bottom:17rem}.xl\:px-68{padding-left:17rem;padding-right:17rem}.xl\:py-px{padding-top:1px;padding-bottom:1px}.xl\:px-px{padding-left:1px;padding-right:1px}.xl\:py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.xl\:px-0\.5{padding-left:.125rem;padding-right:.125rem}.xl\:py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.xl\:px-1\.5{padding-left:.375rem;padding-right:.375rem}.xl\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.xl\:px-2\.5{padding-left:.625rem;padding-right:.625rem}.xl\:py-7\.5{padding-top:1.875rem;padding-bottom:1.875rem}.xl\:px-7\.5{padding-left:1.875rem;padding-right:1.875rem}.xl\:pt-0{padding-top:0}.xl\:pr-0{padding-right:0}.xl\:pb-0{padding-bottom:0}.xl\:pl-0{padding-left:0}.xl\:pt-1{padding-top:.25rem}.xl\:pr-1{padding-right:.25rem}.xl\:pb-1{padding-bottom:.25rem}.xl\:pl-1{padding-left:.25rem}.xl\:pt-2{padding-top:.5rem}.xl\:pr-2{padding-right:.5rem}.xl\:pb-2{padding-bottom:.5rem}.xl\:pl-2{padding-left:.5rem}.xl\:pt-3{padding-top:.75rem}.xl\:pr-3{padding-right:.75rem}.xl\:pb-3{padding-bottom:.75rem}.xl\:pl-3{padding-left:.75rem}.xl\:pt-4{padding-top:1rem}.xl\:pr-4{padding-right:1rem}.xl\:pb-4{padding-bottom:1rem}.xl\:pl-4{padding-left:1rem}.xl\:pt-5{padding-top:1.25rem}.xl\:pr-5{padding-right:1.25rem}.xl\:pb-5{padding-bottom:1.25rem}.xl\:pl-5{padding-left:1.25rem}.xl\:pt-6{padding-top:1.5rem}.xl\:pr-6{padding-right:1.5rem}.xl\:pb-6{padding-bottom:1.5rem}.xl\:pl-6{padding-left:1.5rem}.xl\:pt-7{padding-top:1.75rem}.xl\:pr-7{padding-right:1.75rem}.xl\:pb-7{padding-bottom:1.75rem}.xl\:pl-7{padding-left:1.75rem}.xl\:pt-8{padding-top:2rem}.xl\:pr-8{padding-right:2rem}.xl\:pb-8{padding-bottom:2rem}.xl\:pl-8{padding-left:2rem}.xl\:pt-9{padding-top:2.25rem}.xl\:pr-9{padding-right:2.25rem}.xl\:pb-9{padding-bottom:2.25rem}.xl\:pl-9{padding-left:2.25rem}.xl\:pt-10{padding-top:2.5rem}.xl\:pr-10{padding-right:2.5rem}.xl\:pb-10{padding-bottom:2.5rem}.xl\:pl-10{padding-left:2.5rem}.xl\:pt-11{padding-top:2.75rem}.xl\:pr-11{padding-right:2.75rem}.xl\:pb-11{padding-bottom:2.75rem}.xl\:pl-11{padding-left:2.75rem}.xl\:pt-12{padding-top:3rem}.xl\:pr-12{padding-right:3rem}.xl\:pb-12{padding-bottom:3rem}.xl\:pl-12{padding-left:3rem}.xl\:pt-15{padding-top:3.75rem}.xl\:pr-15{padding-right:3.75rem}.xl\:pb-15{padding-bottom:3.75rem}.xl\:pl-15{padding-left:3.75rem}.xl\:pt-16{padding-top:4rem}.xl\:pr-16{padding-right:4rem}.xl\:pb-16{padding-bottom:4rem}.xl\:pl-16{padding-left:4rem}.xl\:pt-20{padding-top:5rem}.xl\:pr-20{padding-right:5rem}.xl\:pb-20{padding-bottom:5rem}.xl\:pl-20{padding-left:5rem}.xl\:pt-22{padding-top:5.5rem}.xl\:pr-22{padding-right:5.5rem}.xl\:pb-22{padding-bottom:5.5rem}.xl\:pl-22{padding-left:5.5rem}.xl\:pt-24{padding-top:6rem}.xl\:pr-24{padding-right:6rem}.xl\:pb-24{padding-bottom:6rem}.xl\:pl-24{padding-left:6rem}.xl\:pt-25{padding-top:6.25rem}.xl\:pr-25{padding-right:6.25rem}.xl\:pb-25{padding-bottom:6.25rem}.xl\:pl-25{padding-left:6.25rem}.xl\:pt-26{padding-top:6.5rem}.xl\:pr-26{padding-right:6.5rem}.xl\:pb-26{padding-bottom:6.5rem}.xl\:pl-26{padding-left:6.5rem}.xl\:pt-28{padding-top:8rem}.xl\:pr-28{padding-right:8rem}.xl\:pb-28{padding-bottom:8rem}.xl\:pl-28{padding-left:8rem}.xl\:pt-30{padding-top:8.5rem}.xl\:pr-30{padding-right:8.5rem}.xl\:pb-30{padding-bottom:8.5rem}.xl\:pl-30{padding-left:8.5rem}.xl\:pt-32{padding-top:9rem}.xl\:pr-32{padding-right:9rem}.xl\:pb-32{padding-bottom:9rem}.xl\:pl-32{padding-left:9rem}.xl\:pt-40{padding-top:10rem}.xl\:pr-40{padding-right:10rem}.xl\:pb-40{padding-bottom:10rem}.xl\:pl-40{padding-left:10rem}.xl\:pt-48{padding-top:12rem}.xl\:pr-48{padding-right:12rem}.xl\:pb-48{padding-bottom:12rem}.xl\:pl-48{padding-left:12rem}.xl\:pt-52{padding-top:13rem}.xl\:pr-52{padding-right:13rem}.xl\:pb-52{padding-bottom:13rem}.xl\:pl-52{padding-left:13rem}.xl\:pt-56{padding-top:14rem}.xl\:pr-56{padding-right:14rem}.xl\:pb-56{padding-bottom:14rem}.xl\:pl-56{padding-left:14rem}.xl\:pt-60{padding-top:15rem}.xl\:pr-60{padding-right:15rem}.xl\:pb-60{padding-bottom:15rem}.xl\:pl-60{padding-left:15rem}.xl\:pt-64{padding-top:16rem}.xl\:pr-64{padding-right:16rem}.xl\:pb-64{padding-bottom:16rem}.xl\:pl-64{padding-left:16rem}.xl\:pt-68{padding-top:17rem}.xl\:pr-68{padding-right:17rem}.xl\:pb-68{padding-bottom:17rem}.xl\:pl-68{padding-left:17rem}.xl\:pt-px{padding-top:1px}.xl\:pr-px{padding-right:1px}.xl\:pb-px{padding-bottom:1px}.xl\:pl-px{padding-left:1px}.xl\:pt-0\.5{padding-top:.125rem}.xl\:pr-0\.5{padding-right:.125rem}.xl\:pb-0\.5{padding-bottom:.125rem}.xl\:pl-0\.5{padding-left:.125rem}.xl\:pt-1\.5{padding-top:.375rem}.xl\:pr-1\.5{padding-right:.375rem}.xl\:pb-1\.5{padding-bottom:.375rem}.xl\:pl-1\.5{padding-left:.375rem}.xl\:pt-2\.5{padding-top:.625rem}.xl\:pr-2\.5{padding-right:.625rem}.xl\:pb-2\.5{padding-bottom:.625rem}.xl\:pl-2\.5{padding-left:.625rem}.xl\:pt-7\.5{padding-top:1.875rem}.xl\:pr-7\.5{padding-right:1.875rem}.xl\:pb-7\.5{padding-bottom:1.875rem}.xl\:pl-7\.5{padding-left:1.875rem}.xl\:placeholder-transparent::-moz-placeholder{color:transparent}.xl\:placeholder-transparent:-ms-input-placeholder{color:transparent}.xl\:placeholder-transparent::placeholder{color:transparent}.xl\:placeholder-current::-moz-placeholder{color:currentColor}.xl\:placeholder-current:-ms-input-placeholder{color:currentColor}.xl\:placeholder-current::placeholder{color:currentColor}.xl\:placeholder-black::-moz-placeholder{color:#000}.xl\:placeholder-black:-ms-input-placeholder{color:#000}.xl\:placeholder-black::placeholder{color:#000}.xl\:placeholder-white::-moz-placeholder{color:#fff}.xl\:placeholder-white:-ms-input-placeholder{color:#fff}.xl\:placeholder-white::placeholder{color:#fff}.xl\:placeholder-gray-100::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:placeholder-gray-200::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:placeholder-gray-300::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:placeholder-gray-400::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:placeholder-gray-500::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:placeholder-gray-600::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-700::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:placeholder-gray-800::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:placeholder-gray-900::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:placeholder-gray-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-DEFAULT::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-red::-moz-placeholder{color:#d64343}.xl\:placeholder-red:-ms-input-placeholder{color:#d64343}.xl\:placeholder-red::placeholder{color:#d64343}.xl\:placeholder-orange::-moz-placeholder{color:#eb6437}.xl\:placeholder-orange:-ms-input-placeholder{color:#eb6437}.xl\:placeholder-orange::placeholder{color:#eb6437}.xl\:placeholder-yellow::-moz-placeholder{color:#f8da30}.xl\:placeholder-yellow:-ms-input-placeholder{color:#f8da30}.xl\:placeholder-yellow::placeholder{color:#f8da30}.xl\:placeholder-green-100::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:placeholder-green-200::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:placeholder-green-300::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:placeholder-green-400::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:placeholder-green-500::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:placeholder-green-600::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-700::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:placeholder-green-800::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:placeholder-green-900::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:placeholder-green-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-DEFAULT::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-teal-100::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:placeholder-teal-200::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:placeholder-teal-300::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:placeholder-teal-400::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:placeholder-teal-500::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:placeholder-teal-600::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-700::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:placeholder-teal-800::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:placeholder-teal-900::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:placeholder-teal-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-DEFAULT::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-blue-50::-moz-placeholder{color:#d1eaff}.xl\:placeholder-blue-50:-ms-input-placeholder{color:#d1eaff}.xl\:placeholder-blue-50::placeholder{color:#d1eaff}.xl\:placeholder-blue-100::-moz-placeholder{color:#a8d7ff}.xl\:placeholder-blue-100:-ms-input-placeholder{color:#a8d7ff}.xl\:placeholder-blue-100::placeholder{color:#a8d7ff}.xl\:placeholder-blue-200::-moz-placeholder{color:#80c4ff}.xl\:placeholder-blue-200:-ms-input-placeholder{color:#80c4ff}.xl\:placeholder-blue-200::placeholder{color:#80c4ff}.xl\:placeholder-blue-300::-moz-placeholder{color:#57b0ff}.xl\:placeholder-blue-300:-ms-input-placeholder{color:#57b0ff}.xl\:placeholder-blue-300::placeholder{color:#57b0ff}.xl\:placeholder-blue-400::-moz-placeholder{color:#2e9dff}.xl\:placeholder-blue-400:-ms-input-placeholder{color:#2e9dff}.xl\:placeholder-blue-400::placeholder{color:#2e9dff}.xl\:placeholder-blue-500::-moz-placeholder{color:#058aff}.xl\:placeholder-blue-500:-ms-input-placeholder{color:#058aff}.xl\:placeholder-blue-500::placeholder{color:#058aff}.xl\:placeholder-blue-600::-moz-placeholder{color:#0075db}.xl\:placeholder-blue-600:-ms-input-placeholder{color:#0075db}.xl\:placeholder-blue-600::placeholder{color:#0075db}.xl\:placeholder-blue-700::-moz-placeholder{color:#005fb3}.xl\:placeholder-blue-700:-ms-input-placeholder{color:#005fb3}.xl\:placeholder-blue-700::placeholder{color:#005fb3}.xl\:placeholder-blue-800::-moz-placeholder{color:#00498a}.xl\:placeholder-blue-800:-ms-input-placeholder{color:#00498a}.xl\:placeholder-blue-800::placeholder{color:#00498a}.xl\:placeholder-blue-900::-moz-placeholder{color:#003461}.xl\:placeholder-blue-900:-ms-input-placeholder{color:#003461}.xl\:placeholder-blue-900::placeholder{color:#003461}.xl\:placeholder-blue-DEFAULT::-moz-placeholder{color:#0075db}.xl\:placeholder-blue-DEFAULT:-ms-input-placeholder{color:#0075db}.xl\:placeholder-blue-DEFAULT::placeholder{color:#0075db}.xl\:placeholder-blue::-moz-placeholder{color:#0075db}.xl\:placeholder-blue:-ms-input-placeholder{color:#0075db}.xl\:placeholder-blue::placeholder{color:#0075db}.xl\:placeholder-indigo-100::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:placeholder-indigo-200::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:placeholder-indigo-300::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:placeholder-indigo-400::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:placeholder-indigo-500::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:placeholder-indigo-600::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-700::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:placeholder-indigo-800::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:placeholder-indigo-900::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:placeholder-indigo-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-DEFAULT::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-purple-100::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:placeholder-purple-200::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:placeholder-purple-300::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:placeholder-purple-400::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:placeholder-purple-500::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:placeholder-purple-600::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-700::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:placeholder-purple-800::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:placeholder-purple-900::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:placeholder-purple-DEFAULT::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-DEFAULT:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-DEFAULT::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-pink::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.xl\:placeholder-pink:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.xl\:placeholder-pink::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.xl\:placeholder-inherit::-moz-placeholder{color:inherit}.xl\:placeholder-inherit:-ms-input-placeholder{color:inherit}.xl\:placeholder-inherit::placeholder{color:inherit}.xl\:placeholder-amber::-moz-placeholder{color:#d78737}.xl\:placeholder-amber:-ms-input-placeholder{color:#d78737}.xl\:placeholder-amber::placeholder{color:#d78737}.xl\:placeholder-amber-active::-moz-placeholder{color:#e3872b}.xl\:placeholder-amber-active:-ms-input-placeholder{color:#e3872b}.xl\:placeholder-amber-active::placeholder{color:#e3872b}.xl\:placeholder-ardoise::-moz-placeholder{color:#596a82}.xl\:placeholder-ardoise:-ms-input-placeholder{color:#596a82}.xl\:placeholder-ardoise::placeholder{color:#596a82}.xl\:placeholder-ardoise-active::-moz-placeholder{color:#476794}.xl\:placeholder-ardoise-active:-ms-input-placeholder{color:#476794}.xl\:placeholder-ardoise-active::placeholder{color:#476794}.xl\:placeholder-blue-active::-moz-placeholder{color:#14a5c2}.xl\:placeholder-blue-active:-ms-input-placeholder{color:#14a5c2}.xl\:placeholder-blue-active::placeholder{color:#14a5c2}.xl\:placeholder-lightBlue::-moz-placeholder{color:rgba(0,85,138,.1)}.xl\:placeholder-lightBlue:-ms-input-placeholder{color:rgba(0,85,138,.1)}.xl\:placeholder-lightBlue::placeholder{color:rgba(0,85,138,.1)}.xl\:placeholder-lightBlue-active::-moz-placeholder{color:rgba(0,85,138,.1)}.xl\:placeholder-lightBlue-active:-ms-input-placeholder{color:rgba(0,85,138,.1)}.xl\:placeholder-lightBlue-active::placeholder{color:rgba(0,85,138,.1)}.xl\:placeholder-deepBlue::-moz-placeholder{color:#0e346c}.xl\:placeholder-deepBlue:-ms-input-placeholder{color:#0e346c}.xl\:placeholder-deepBlue::placeholder{color:#0e346c}.xl\:placeholder-deepBlue-active::-moz-placeholder{color:#0a3f8f}.xl\:placeholder-deepBlue-active:-ms-input-placeholder{color:#0a3f8f}.xl\:placeholder-deepBlue-active::placeholder{color:#0a3f8f}.xl\:placeholder-gold::-moz-placeholder{color:#bd9e56}.xl\:placeholder-gold:-ms-input-placeholder{color:#bd9e56}.xl\:placeholder-gold::placeholder{color:#bd9e56}.xl\:placeholder-gold-active::-moz-placeholder{color:#c9a34a}.xl\:placeholder-gold-active:-ms-input-placeholder{color:#c9a34a}.xl\:placeholder-gold-active::placeholder{color:#c9a34a}.xl\:placeholder-grenadine::-moz-placeholder{color:#c35078}.xl\:placeholder-grenadine:-ms-input-placeholder{color:#c35078}.xl\:placeholder-grenadine::placeholder{color:#c35078}.xl\:placeholder-grenadine-active::-moz-placeholder{color:#cf4475}.xl\:placeholder-grenadine-active:-ms-input-placeholder{color:#cf4475}.xl\:placeholder-grenadine-active::placeholder{color:#cf4475}.xl\:placeholder-kiwi::-moz-placeholder{color:#9a9f1e}.xl\:placeholder-kiwi:-ms-input-placeholder{color:#9a9f1e}.xl\:placeholder-kiwi::placeholder{color:#9a9f1e}.xl\:placeholder-kiwi-active::-moz-placeholder{color:#a3a815}.xl\:placeholder-kiwi-active:-ms-input-placeholder{color:#a3a815}.xl\:placeholder-kiwi-active::placeholder{color:#a3a815}.xl\:placeholder-lilas::-moz-placeholder{color:#7ea1d3}.xl\:placeholder-lilas:-ms-input-placeholder{color:#7ea1d3}.xl\:placeholder-lilas::placeholder{color:#7ea1d3}.xl\:placeholder-lilas-active::-moz-placeholder{color:#75a0db}.xl\:placeholder-lilas-active:-ms-input-placeholder{color:#75a0db}.xl\:placeholder-lilas-active::placeholder{color:#75a0db}.xl\:placeholder-mahogany::-moz-placeholder{color:#57142e}.xl\:placeholder-mahogany:-ms-input-placeholder{color:#57142e}.xl\:placeholder-mahogany::placeholder{color:#57142e}.xl\:placeholder-mahogany-active::-moz-placeholder{color:#610a2b}.xl\:placeholder-mahogany-active:-ms-input-placeholder{color:#610a2b}.xl\:placeholder-mahogany-active::placeholder{color:#610a2b}.xl\:placeholder-ocher::-moz-placeholder{color:#c29614}.xl\:placeholder-ocher:-ms-input-placeholder{color:#c29614}.xl\:placeholder-ocher::placeholder{color:#c29614}.xl\:placeholder-ocher-active::-moz-placeholder{color:#cd9c0a}.xl\:placeholder-ocher-active:-ms-input-placeholder{color:#cd9c0a}.xl\:placeholder-ocher-active::placeholder{color:#cd9c0a}.xl\:placeholder-pine::-moz-placeholder{color:#144d52}.xl\:placeholder-pine:-ms-input-placeholder{color:#144d52}.xl\:placeholder-pine::placeholder{color:#144d52}.xl\:placeholder-pine-active::-moz-placeholder{color:#0a555c}.xl\:placeholder-pine-active:-ms-input-placeholder{color:#0a555c}.xl\:placeholder-pine-active::placeholder{color:#0a555c}.xl\:placeholder-platinum::-moz-placeholder{color:#000}.xl\:placeholder-platinum:-ms-input-placeholder{color:#000}.xl\:placeholder-platinum::placeholder{color:#000}.xl\:placeholder-platinum-active::-moz-placeholder{color:#000}.xl\:placeholder-platinum-active:-ms-input-placeholder{color:#000}.xl\:placeholder-platinum-active::placeholder{color:#000}.xl\:placeholder-prune::-moz-placeholder{color:#661456}.xl\:placeholder-prune:-ms-input-placeholder{color:#661456}.xl\:placeholder-prune::placeholder{color:#661456}.xl\:placeholder-prune-active::-moz-placeholder{color:#72085d}.xl\:placeholder-prune-active:-ms-input-placeholder{color:#72085d}.xl\:placeholder-prune-active::placeholder{color:#72085d}.xl\:placeholder-sand::-moz-placeholder{color:#d7be88}.xl\:placeholder-sand:-ms-input-placeholder{color:#d7be88}.xl\:placeholder-sand::placeholder{color:#d7be88}.xl\:placeholder-sand-active::-moz-placeholder{color:#dfc181}.xl\:placeholder-sand-active:-ms-input-placeholder{color:#dfc181}.xl\:placeholder-sand-active::placeholder{color:#dfc181}.xl\:placeholder-sandPearl::-moz-placeholder{color:#f0e5d6}.xl\:placeholder-sandPearl:-ms-input-placeholder{color:#f0e5d6}.xl\:placeholder-sandPearl::placeholder{color:#f0e5d6}.xl\:placeholder-sandPearl-active::-moz-placeholder{color:#f2e6d4}.xl\:placeholder-sandPearl-active:-ms-input-placeholder{color:#f2e6d4}.xl\:placeholder-sandPearl-active::placeholder{color:#f2e6d4}.xl\:placeholder-silver::-moz-placeholder{color:#b1b2b4}.xl\:placeholder-silver:-ms-input-placeholder{color:#b1b2b4}.xl\:placeholder-silver::placeholder{color:#b1b2b4}.xl\:placeholder-silver-active::-moz-placeholder{color:#a9afbc}.xl\:placeholder-silver-active:-ms-input-placeholder{color:#a9afbc}.xl\:placeholder-silver-active::placeholder{color:#a9afbc}.xl\:placeholder-skyBlue::-moz-placeholder{color:#98d2d7}.xl\:placeholder-skyBlue:-ms-input-placeholder{color:#98d2d7}.xl\:placeholder-skyBlue::placeholder{color:#98d2d7}.xl\:placeholder-skyBlue-active::-moz-placeholder{color:#91d8de}.xl\:placeholder-skyBlue-active:-ms-input-placeholder{color:#91d8de}.xl\:placeholder-skyBlue-active::placeholder{color:#91d8de}.xl\:placeholder-southSea::-moz-placeholder{color:#9dc9cd}.xl\:placeholder-southSea:-ms-input-placeholder{color:#9dc9cd}.xl\:placeholder-southSea::placeholder{color:#9dc9cd}.xl\:placeholder-southSea-active::-moz-placeholder{color:#95ced5}.xl\:placeholder-southSea-active:-ms-input-placeholder{color:#95ced5}.xl\:placeholder-southSea-active::placeholder{color:#95ced5}.xl\:placeholder-turquoise::-moz-placeholder{color:#14a5c2}.xl\:placeholder-turquoise:-ms-input-placeholder{color:#14a5c2}.xl\:placeholder-turquoise::placeholder{color:#14a5c2}.xl\:placeholder-turquoise-active::-moz-placeholder{color:#0aaccd}.xl\:placeholder-turquoise-active:-ms-input-placeholder{color:#0aaccd}.xl\:placeholder-turquoise-active::placeholder{color:#0aaccd}.xl\:placeholder-waterGreen::-moz-placeholder{color:#007571}.xl\:placeholder-waterGreen:-ms-input-placeholder{color:#007571}.xl\:placeholder-waterGreen::placeholder{color:#007571}.xl\:placeholder-waterGreen-active::-moz-placeholder{color:#00a8a3}.xl\:placeholder-waterGreen-active:-ms-input-placeholder{color:#00a8a3}.xl\:placeholder-waterGreen-active::placeholder{color:#00a8a3}.xl\:placeholder-deepRed::-moz-placeholder{color:#c32222}.xl\:placeholder-deepRed:-ms-input-placeholder{color:#c32222}.xl\:placeholder-deepRed::placeholder{color:#c32222}.xl\:placeholder-deepRed-active::-moz-placeholder{color:#cf1717}.xl\:placeholder-deepRed-active:-ms-input-placeholder{color:#cf1717}.xl\:placeholder-deepRed-active::placeholder{color:#cf1717}.xl\:placeholder-emerald::-moz-placeholder{color:#14a33a}.xl\:placeholder-emerald:-ms-input-placeholder{color:#14a33a}.xl\:placeholder-emerald::placeholder{color:#14a33a}.xl\:placeholder-emerald-active::-moz-placeholder{color:#0bad36}.xl\:placeholder-emerald-active:-ms-input-placeholder{color:#0bad36}.xl\:placeholder-emerald-active::placeholder{color:#0bad36}.xl\:placeholder-greenLight::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.xl\:placeholder-greenLight:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.xl\:placeholder-greenLight::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.xl\:placeholder-orange-active::-moz-placeholder{color:#f65f2c}.xl\:placeholder-orange-active:-ms-input-placeholder{color:#f65f2c}.xl\:placeholder-orange-active::placeholder{color:#f65f2c}.xl\:placeholder-red-active::-moz-placeholder{color:#e13737}.xl\:placeholder-red-active:-ms-input-placeholder{color:#e13737}.xl\:placeholder-red-active::placeholder{color:#e13737}.xl\:placeholder-white-active::-moz-placeholder{color:#14a5c2}.xl\:placeholder-white-active:-ms-input-placeholder{color:#14a5c2}.xl\:placeholder-white-active::placeholder{color:#14a5c2}.xl\:placeholder-white-button::-moz-placeholder{color:#fff}.xl\:placeholder-white-button:-ms-input-placeholder{color:#fff}.xl\:placeholder-white-button::placeholder{color:#fff}.xl\:placeholder-white-button-active::-moz-placeholder{color:#fff}.xl\:placeholder-white-button-active:-ms-input-placeholder{color:#fff}.xl\:placeholder-white-button-active::placeholder{color:#fff}.xl\:placeholder-code::-moz-placeholder{color:#3f3d57}.xl\:placeholder-code:-ms-input-placeholder{color:#3f3d57}.xl\:placeholder-code::placeholder{color:#3f3d57}.xl\:placeholder-code-active::-moz-placeholder{color:#37354b}.xl\:placeholder-code-active:-ms-input-placeholder{color:#37354b}.xl\:placeholder-code-active::placeholder{color:#37354b}.xl\:placeholder-gray-lighter::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.xl\:placeholder-gray-lighter:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.xl\:placeholder-gray-lighter::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.xl\:placeholder-gray-lighter-active::-moz-placeholder{color:#ebebeb}.xl\:placeholder-gray-lighter-active:-ms-input-placeholder{color:#ebebeb}.xl\:placeholder-gray-lighter-active::placeholder{color:#ebebeb}.xl\:placeholder-gray-light::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.xl\:placeholder-gray-light:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.xl\:placeholder-gray-light::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.xl\:placeholder-gray-medium::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.xl\:placeholder-gray-medium:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.xl\:placeholder-gray-medium::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.xl\:placeholder-gray-darker::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.xl\:placeholder-gray-darker:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.xl\:placeholder-gray-darker::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.xl\:placeholder-gray-darker-active::-moz-placeholder{color:#14a5c2}.xl\:placeholder-gray-darker-active:-ms-input-placeholder{color:#14a5c2}.xl\:placeholder-gray-darker-active::placeholder{color:#14a5c2}.xl\:placeholder-api-default::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.xl\:placeholder-api-default:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.xl\:placeholder-api-default::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.xl\:placeholder-gray-xxl::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.xl\:placeholder-gray-xxl:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.xl\:placeholder-gray-xxl::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.xl\:placeholder-line-even::-moz-placeholder{color:#f3f6f7}.xl\:placeholder-line-even:-ms-input-placeholder{color:#f3f6f7}.xl\:placeholder-line-even::placeholder{color:#f3f6f7}.xl\:focus\:placeholder-transparent:focus::-moz-placeholder{color:transparent}.xl\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.xl\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.xl\:focus\:placeholder-current:focus::-moz-placeholder{color:currentColor}.xl\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.xl\:focus\:placeholder-current:focus::placeholder{color:currentColor}.xl\:focus\:placeholder-black:focus::-moz-placeholder{color:#000}.xl\:focus\:placeholder-black:focus:-ms-input-placeholder{color:#000}.xl\:focus\:placeholder-black:focus::placeholder{color:#000}.xl\:focus\:placeholder-white:focus::-moz-placeholder{color:#fff}.xl\:focus\:placeholder-white:focus:-ms-input-placeholder{color:#fff}.xl\:focus\:placeholder-white:focus::placeholder{color:#fff}.xl\:focus\:placeholder-gray-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray:focus::-moz-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-red:focus::-moz-placeholder{color:#d64343}.xl\:focus\:placeholder-red:focus:-ms-input-placeholder{color:#d64343}.xl\:focus\:placeholder-red:focus::placeholder{color:#d64343}.xl\:focus\:placeholder-orange:focus::-moz-placeholder{color:#eb6437}.xl\:focus\:placeholder-orange:focus:-ms-input-placeholder{color:#eb6437}.xl\:focus\:placeholder-orange:focus::placeholder{color:#eb6437}.xl\:focus\:placeholder-yellow:focus::-moz-placeholder{color:#f8da30}.xl\:focus\:placeholder-yellow:focus:-ms-input-placeholder{color:#f8da30}.xl\:focus\:placeholder-yellow:focus::placeholder{color:#f8da30}.xl\:focus\:placeholder-green-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green:focus::-moz-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal:focus::-moz-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-50:focus::-moz-placeholder{color:#d1eaff}.xl\:focus\:placeholder-blue-50:focus:-ms-input-placeholder{color:#d1eaff}.xl\:focus\:placeholder-blue-50:focus::placeholder{color:#d1eaff}.xl\:focus\:placeholder-blue-100:focus::-moz-placeholder{color:#a8d7ff}.xl\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{color:#a8d7ff}.xl\:focus\:placeholder-blue-100:focus::placeholder{color:#a8d7ff}.xl\:focus\:placeholder-blue-200:focus::-moz-placeholder{color:#80c4ff}.xl\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{color:#80c4ff}.xl\:focus\:placeholder-blue-200:focus::placeholder{color:#80c4ff}.xl\:focus\:placeholder-blue-300:focus::-moz-placeholder{color:#57b0ff}.xl\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{color:#57b0ff}.xl\:focus\:placeholder-blue-300:focus::placeholder{color:#57b0ff}.xl\:focus\:placeholder-blue-400:focus::-moz-placeholder{color:#2e9dff}.xl\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{color:#2e9dff}.xl\:focus\:placeholder-blue-400:focus::placeholder{color:#2e9dff}.xl\:focus\:placeholder-blue-500:focus::-moz-placeholder{color:#058aff}.xl\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{color:#058aff}.xl\:focus\:placeholder-blue-500:focus::placeholder{color:#058aff}.xl\:focus\:placeholder-blue-600:focus::-moz-placeholder{color:#0075db}.xl\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{color:#0075db}.xl\:focus\:placeholder-blue-600:focus::placeholder{color:#0075db}.xl\:focus\:placeholder-blue-700:focus::-moz-placeholder{color:#005fb3}.xl\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{color:#005fb3}.xl\:focus\:placeholder-blue-700:focus::placeholder{color:#005fb3}.xl\:focus\:placeholder-blue-800:focus::-moz-placeholder{color:#00498a}.xl\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{color:#00498a}.xl\:focus\:placeholder-blue-800:focus::placeholder{color:#00498a}.xl\:focus\:placeholder-blue-900:focus::-moz-placeholder{color:#003461}.xl\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{color:#003461}.xl\:focus\:placeholder-blue-900:focus::placeholder{color:#003461}.xl\:focus\:placeholder-blue-DEFAULT:focus::-moz-placeholder{color:#0075db}.xl\:focus\:placeholder-blue-DEFAULT:focus:-ms-input-placeholder{color:#0075db}.xl\:focus\:placeholder-blue-DEFAULT:focus::placeholder{color:#0075db}.xl\:focus\:placeholder-blue:focus::-moz-placeholder{color:#0075db}.xl\:focus\:placeholder-blue:focus:-ms-input-placeholder{color:#0075db}.xl\:focus\:placeholder-blue:focus::placeholder{color:#0075db}.xl\:focus\:placeholder-indigo-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo:focus::-moz-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-100:focus::-moz-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-200:focus::-moz-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-300:focus::-moz-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-400:focus::-moz-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-500:focus::-moz-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-600:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-700:focus::-moz-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-800:focus::-moz-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-900:focus::-moz-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-DEFAULT:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-DEFAULT:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-DEFAULT:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple:focus::-moz-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink:focus::-moz-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink:focus::placeholder{--placeholder-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--placeholder-opacity))}.xl\:focus\:placeholder-inherit:focus::-moz-placeholder{color:inherit}.xl\:focus\:placeholder-inherit:focus:-ms-input-placeholder{color:inherit}.xl\:focus\:placeholder-inherit:focus::placeholder{color:inherit}.xl\:focus\:placeholder-amber:focus::-moz-placeholder{color:#d78737}.xl\:focus\:placeholder-amber:focus:-ms-input-placeholder{color:#d78737}.xl\:focus\:placeholder-amber:focus::placeholder{color:#d78737}.xl\:focus\:placeholder-amber-active:focus::-moz-placeholder{color:#e3872b}.xl\:focus\:placeholder-amber-active:focus:-ms-input-placeholder{color:#e3872b}.xl\:focus\:placeholder-amber-active:focus::placeholder{color:#e3872b}.xl\:focus\:placeholder-ardoise:focus::-moz-placeholder{color:#596a82}.xl\:focus\:placeholder-ardoise:focus:-ms-input-placeholder{color:#596a82}.xl\:focus\:placeholder-ardoise:focus::placeholder{color:#596a82}.xl\:focus\:placeholder-ardoise-active:focus::-moz-placeholder{color:#476794}.xl\:focus\:placeholder-ardoise-active:focus:-ms-input-placeholder{color:#476794}.xl\:focus\:placeholder-ardoise-active:focus::placeholder{color:#476794}.xl\:focus\:placeholder-blue-active:focus::-moz-placeholder{color:#14a5c2}.xl\:focus\:placeholder-blue-active:focus:-ms-input-placeholder{color:#14a5c2}.xl\:focus\:placeholder-blue-active:focus::placeholder{color:#14a5c2}.xl\:focus\:placeholder-lightBlue:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.xl\:focus\:placeholder-lightBlue:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.xl\:focus\:placeholder-lightBlue:focus::placeholder{color:rgba(0,85,138,.1)}.xl\:focus\:placeholder-lightBlue-active:focus::-moz-placeholder{color:rgba(0,85,138,.1)}.xl\:focus\:placeholder-lightBlue-active:focus:-ms-input-placeholder{color:rgba(0,85,138,.1)}.xl\:focus\:placeholder-lightBlue-active:focus::placeholder{color:rgba(0,85,138,.1)}.xl\:focus\:placeholder-deepBlue:focus::-moz-placeholder{color:#0e346c}.xl\:focus\:placeholder-deepBlue:focus:-ms-input-placeholder{color:#0e346c}.xl\:focus\:placeholder-deepBlue:focus::placeholder{color:#0e346c}.xl\:focus\:placeholder-deepBlue-active:focus::-moz-placeholder{color:#0a3f8f}.xl\:focus\:placeholder-deepBlue-active:focus:-ms-input-placeholder{color:#0a3f8f}.xl\:focus\:placeholder-deepBlue-active:focus::placeholder{color:#0a3f8f}.xl\:focus\:placeholder-gold:focus::-moz-placeholder{color:#bd9e56}.xl\:focus\:placeholder-gold:focus:-ms-input-placeholder{color:#bd9e56}.xl\:focus\:placeholder-gold:focus::placeholder{color:#bd9e56}.xl\:focus\:placeholder-gold-active:focus::-moz-placeholder{color:#c9a34a}.xl\:focus\:placeholder-gold-active:focus:-ms-input-placeholder{color:#c9a34a}.xl\:focus\:placeholder-gold-active:focus::placeholder{color:#c9a34a}.xl\:focus\:placeholder-grenadine:focus::-moz-placeholder{color:#c35078}.xl\:focus\:placeholder-grenadine:focus:-ms-input-placeholder{color:#c35078}.xl\:focus\:placeholder-grenadine:focus::placeholder{color:#c35078}.xl\:focus\:placeholder-grenadine-active:focus::-moz-placeholder{color:#cf4475}.xl\:focus\:placeholder-grenadine-active:focus:-ms-input-placeholder{color:#cf4475}.xl\:focus\:placeholder-grenadine-active:focus::placeholder{color:#cf4475}.xl\:focus\:placeholder-kiwi:focus::-moz-placeholder{color:#9a9f1e}.xl\:focus\:placeholder-kiwi:focus:-ms-input-placeholder{color:#9a9f1e}.xl\:focus\:placeholder-kiwi:focus::placeholder{color:#9a9f1e}.xl\:focus\:placeholder-kiwi-active:focus::-moz-placeholder{color:#a3a815}.xl\:focus\:placeholder-kiwi-active:focus:-ms-input-placeholder{color:#a3a815}.xl\:focus\:placeholder-kiwi-active:focus::placeholder{color:#a3a815}.xl\:focus\:placeholder-lilas:focus::-moz-placeholder{color:#7ea1d3}.xl\:focus\:placeholder-lilas:focus:-ms-input-placeholder{color:#7ea1d3}.xl\:focus\:placeholder-lilas:focus::placeholder{color:#7ea1d3}.xl\:focus\:placeholder-lilas-active:focus::-moz-placeholder{color:#75a0db}.xl\:focus\:placeholder-lilas-active:focus:-ms-input-placeholder{color:#75a0db}.xl\:focus\:placeholder-lilas-active:focus::placeholder{color:#75a0db}.xl\:focus\:placeholder-mahogany:focus::-moz-placeholder{color:#57142e}.xl\:focus\:placeholder-mahogany:focus:-ms-input-placeholder{color:#57142e}.xl\:focus\:placeholder-mahogany:focus::placeholder{color:#57142e}.xl\:focus\:placeholder-mahogany-active:focus::-moz-placeholder{color:#610a2b}.xl\:focus\:placeholder-mahogany-active:focus:-ms-input-placeholder{color:#610a2b}.xl\:focus\:placeholder-mahogany-active:focus::placeholder{color:#610a2b}.xl\:focus\:placeholder-ocher:focus::-moz-placeholder{color:#c29614}.xl\:focus\:placeholder-ocher:focus:-ms-input-placeholder{color:#c29614}.xl\:focus\:placeholder-ocher:focus::placeholder{color:#c29614}.xl\:focus\:placeholder-ocher-active:focus::-moz-placeholder{color:#cd9c0a}.xl\:focus\:placeholder-ocher-active:focus:-ms-input-placeholder{color:#cd9c0a}.xl\:focus\:placeholder-ocher-active:focus::placeholder{color:#cd9c0a}.xl\:focus\:placeholder-pine:focus::-moz-placeholder{color:#144d52}.xl\:focus\:placeholder-pine:focus:-ms-input-placeholder{color:#144d52}.xl\:focus\:placeholder-pine:focus::placeholder{color:#144d52}.xl\:focus\:placeholder-pine-active:focus::-moz-placeholder{color:#0a555c}.xl\:focus\:placeholder-pine-active:focus:-ms-input-placeholder{color:#0a555c}.xl\:focus\:placeholder-pine-active:focus::placeholder{color:#0a555c}.xl\:focus\:placeholder-platinum:focus::-moz-placeholder{color:#000}.xl\:focus\:placeholder-platinum:focus:-ms-input-placeholder{color:#000}.xl\:focus\:placeholder-platinum:focus::placeholder{color:#000}.xl\:focus\:placeholder-platinum-active:focus::-moz-placeholder{color:#000}.xl\:focus\:placeholder-platinum-active:focus:-ms-input-placeholder{color:#000}.xl\:focus\:placeholder-platinum-active:focus::placeholder{color:#000}.xl\:focus\:placeholder-prune:focus::-moz-placeholder{color:#661456}.xl\:focus\:placeholder-prune:focus:-ms-input-placeholder{color:#661456}.xl\:focus\:placeholder-prune:focus::placeholder{color:#661456}.xl\:focus\:placeholder-prune-active:focus::-moz-placeholder{color:#72085d}.xl\:focus\:placeholder-prune-active:focus:-ms-input-placeholder{color:#72085d}.xl\:focus\:placeholder-prune-active:focus::placeholder{color:#72085d}.xl\:focus\:placeholder-sand:focus::-moz-placeholder{color:#d7be88}.xl\:focus\:placeholder-sand:focus:-ms-input-placeholder{color:#d7be88}.xl\:focus\:placeholder-sand:focus::placeholder{color:#d7be88}.xl\:focus\:placeholder-sand-active:focus::-moz-placeholder{color:#dfc181}.xl\:focus\:placeholder-sand-active:focus:-ms-input-placeholder{color:#dfc181}.xl\:focus\:placeholder-sand-active:focus::placeholder{color:#dfc181}.xl\:focus\:placeholder-sandPearl:focus::-moz-placeholder{color:#f0e5d6}.xl\:focus\:placeholder-sandPearl:focus:-ms-input-placeholder{color:#f0e5d6}.xl\:focus\:placeholder-sandPearl:focus::placeholder{color:#f0e5d6}.xl\:focus\:placeholder-sandPearl-active:focus::-moz-placeholder{color:#f2e6d4}.xl\:focus\:placeholder-sandPearl-active:focus:-ms-input-placeholder{color:#f2e6d4}.xl\:focus\:placeholder-sandPearl-active:focus::placeholder{color:#f2e6d4}.xl\:focus\:placeholder-silver:focus::-moz-placeholder{color:#b1b2b4}.xl\:focus\:placeholder-silver:focus:-ms-input-placeholder{color:#b1b2b4}.xl\:focus\:placeholder-silver:focus::placeholder{color:#b1b2b4}.xl\:focus\:placeholder-silver-active:focus::-moz-placeholder{color:#a9afbc}.xl\:focus\:placeholder-silver-active:focus:-ms-input-placeholder{color:#a9afbc}.xl\:focus\:placeholder-silver-active:focus::placeholder{color:#a9afbc}.xl\:focus\:placeholder-skyBlue:focus::-moz-placeholder{color:#98d2d7}.xl\:focus\:placeholder-skyBlue:focus:-ms-input-placeholder{color:#98d2d7}.xl\:focus\:placeholder-skyBlue:focus::placeholder{color:#98d2d7}.xl\:focus\:placeholder-skyBlue-active:focus::-moz-placeholder{color:#91d8de}.xl\:focus\:placeholder-skyBlue-active:focus:-ms-input-placeholder{color:#91d8de}.xl\:focus\:placeholder-skyBlue-active:focus::placeholder{color:#91d8de}.xl\:focus\:placeholder-southSea:focus::-moz-placeholder{color:#9dc9cd}.xl\:focus\:placeholder-southSea:focus:-ms-input-placeholder{color:#9dc9cd}.xl\:focus\:placeholder-southSea:focus::placeholder{color:#9dc9cd}.xl\:focus\:placeholder-southSea-active:focus::-moz-placeholder{color:#95ced5}.xl\:focus\:placeholder-southSea-active:focus:-ms-input-placeholder{color:#95ced5}.xl\:focus\:placeholder-southSea-active:focus::placeholder{color:#95ced5}.xl\:focus\:placeholder-turquoise:focus::-moz-placeholder{color:#14a5c2}.xl\:focus\:placeholder-turquoise:focus:-ms-input-placeholder{color:#14a5c2}.xl\:focus\:placeholder-turquoise:focus::placeholder{color:#14a5c2}.xl\:focus\:placeholder-turquoise-active:focus::-moz-placeholder{color:#0aaccd}.xl\:focus\:placeholder-turquoise-active:focus:-ms-input-placeholder{color:#0aaccd}.xl\:focus\:placeholder-turquoise-active:focus::placeholder{color:#0aaccd}.xl\:focus\:placeholder-waterGreen:focus::-moz-placeholder{color:#007571}.xl\:focus\:placeholder-waterGreen:focus:-ms-input-placeholder{color:#007571}.xl\:focus\:placeholder-waterGreen:focus::placeholder{color:#007571}.xl\:focus\:placeholder-waterGreen-active:focus::-moz-placeholder{color:#00a8a3}.xl\:focus\:placeholder-waterGreen-active:focus:-ms-input-placeholder{color:#00a8a3}.xl\:focus\:placeholder-waterGreen-active:focus::placeholder{color:#00a8a3}.xl\:focus\:placeholder-deepRed:focus::-moz-placeholder{color:#c32222}.xl\:focus\:placeholder-deepRed:focus:-ms-input-placeholder{color:#c32222}.xl\:focus\:placeholder-deepRed:focus::placeholder{color:#c32222}.xl\:focus\:placeholder-deepRed-active:focus::-moz-placeholder{color:#cf1717}.xl\:focus\:placeholder-deepRed-active:focus:-ms-input-placeholder{color:#cf1717}.xl\:focus\:placeholder-deepRed-active:focus::placeholder{color:#cf1717}.xl\:focus\:placeholder-emerald:focus::-moz-placeholder{color:#14a33a}.xl\:focus\:placeholder-emerald:focus:-ms-input-placeholder{color:#14a33a}.xl\:focus\:placeholder-emerald:focus::placeholder{color:#14a33a}.xl\:focus\:placeholder-emerald-active:focus::-moz-placeholder{color:#0bad36}.xl\:focus\:placeholder-emerald-active:focus:-ms-input-placeholder{color:#0bad36}.xl\:focus\:placeholder-emerald-active:focus::placeholder{color:#0bad36}.xl\:focus\:placeholder-greenLight:focus::-moz-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.xl\:focus\:placeholder-greenLight:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.xl\:focus\:placeholder-greenLight:focus::placeholder{--placeholder-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-active:focus::-moz-placeholder{color:#f65f2c}.xl\:focus\:placeholder-orange-active:focus:-ms-input-placeholder{color:#f65f2c}.xl\:focus\:placeholder-orange-active:focus::placeholder{color:#f65f2c}.xl\:focus\:placeholder-red-active:focus::-moz-placeholder{color:#e13737}.xl\:focus\:placeholder-red-active:focus:-ms-input-placeholder{color:#e13737}.xl\:focus\:placeholder-red-active:focus::placeholder{color:#e13737}.xl\:focus\:placeholder-white-active:focus::-moz-placeholder{color:#14a5c2}.xl\:focus\:placeholder-white-active:focus:-ms-input-placeholder{color:#14a5c2}.xl\:focus\:placeholder-white-active:focus::placeholder{color:#14a5c2}.xl\:focus\:placeholder-white-button:focus::-moz-placeholder{color:#fff}.xl\:focus\:placeholder-white-button:focus:-ms-input-placeholder{color:#fff}.xl\:focus\:placeholder-white-button:focus::placeholder{color:#fff}.xl\:focus\:placeholder-white-button-active:focus::-moz-placeholder{color:#fff}.xl\:focus\:placeholder-white-button-active:focus:-ms-input-placeholder{color:#fff}.xl\:focus\:placeholder-white-button-active:focus::placeholder{color:#fff}.xl\:focus\:placeholder-code:focus::-moz-placeholder{color:#3f3d57}.xl\:focus\:placeholder-code:focus:-ms-input-placeholder{color:#3f3d57}.xl\:focus\:placeholder-code:focus::placeholder{color:#3f3d57}.xl\:focus\:placeholder-code-active:focus::-moz-placeholder{color:#37354b}.xl\:focus\:placeholder-code-active:focus:-ms-input-placeholder{color:#37354b}.xl\:focus\:placeholder-code-active:focus::placeholder{color:#37354b}.xl\:focus\:placeholder-gray-lighter:focus::-moz-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-lighter:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-lighter:focus::placeholder{--placeholder-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-lighter-active:focus::-moz-placeholder{color:#ebebeb}.xl\:focus\:placeholder-gray-lighter-active:focus:-ms-input-placeholder{color:#ebebeb}.xl\:focus\:placeholder-gray-lighter-active:focus::placeholder{color:#ebebeb}.xl\:focus\:placeholder-gray-light:focus::-moz-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-light:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-light:focus::placeholder{--placeholder-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-medium:focus::-moz-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-medium:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-medium:focus::placeholder{--placeholder-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-darker:focus::-moz-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-darker:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-darker:focus::placeholder{--placeholder-opacity:1;color:#504747;color:rgba(80,71,71,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-darker-active:focus::-moz-placeholder{color:#14a5c2}.xl\:focus\:placeholder-gray-darker-active:focus:-ms-input-placeholder{color:#14a5c2}.xl\:focus\:placeholder-gray-darker-active:focus::placeholder{color:#14a5c2}.xl\:focus\:placeholder-api-default:focus::-moz-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.xl\:focus\:placeholder-api-default:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.xl\:focus\:placeholder-api-default:focus::placeholder{--placeholder-opacity:1;color:#507192;color:rgba(80,113,146,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-xxl:focus::-moz-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-xxl:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-xxl:focus::placeholder{--placeholder-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--placeholder-opacity))}.xl\:focus\:placeholder-line-even:focus::-moz-placeholder{color:#f3f6f7}.xl\:focus\:placeholder-line-even:focus:-ms-input-placeholder{color:#f3f6f7}.xl\:focus\:placeholder-line-even:focus::placeholder{color:#f3f6f7}.xl\:placeholder-opacity-0::-moz-placeholder{--placeholder-opacity:0}.xl\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.xl\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.xl\:placeholder-opacity-25::-moz-placeholder{--placeholder-opacity:0.25}.xl\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.xl\:placeholder-opacity-50::-moz-placeholder{--placeholder-opacity:0.5}.xl\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.xl\:placeholder-opacity-75::-moz-placeholder{--placeholder-opacity:0.75}.xl\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.xl\:placeholder-opacity-100::-moz-placeholder{--placeholder-opacity:1}.xl\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.xl\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.xl\:focus\:placeholder-opacity-0:focus::-moz-placeholder{--placeholder-opacity:0}.xl\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.xl\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.xl\:focus\:placeholder-opacity-25:focus::-moz-placeholder{--placeholder-opacity:0.25}.xl\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.xl\:focus\:placeholder-opacity-50:focus::-moz-placeholder{--placeholder-opacity:0.5}.xl\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.xl\:focus\:placeholder-opacity-75:focus::-moz-placeholder{--placeholder-opacity:0.75}.xl\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.xl\:focus\:placeholder-opacity-100:focus::-moz-placeholder{--placeholder-opacity:1}.xl\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.xl\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.xl\:pointer-events-none{pointer-events:none}.xl\:pointer-events-auto{pointer-events:auto}.xl\:static{position:static}.xl\:fixed{position:fixed}.xl\:absolute{position:absolute}.xl\:relative{position:relative}.xl\:sticky{position:-webkit-sticky;position:sticky}.xl\:inset-0{top:0;right:0;bottom:0;left:0}.xl\:inset-1{top:.25rem;right:.25rem;bottom:.25rem;left:.25rem}.xl\:inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.xl\:inset-3{top:.75rem;right:.75rem;bottom:.75rem;left:.75rem}.xl\:inset-4{top:1rem;right:1rem;bottom:1rem;left:1rem}.xl\:inset-5{top:1.25rem;right:1.25rem;bottom:1.25rem;left:1.25rem}.xl\:inset-6{top:1.5rem;right:1.5rem;bottom:1.5rem;left:1.5rem}.xl\:inset-7{top:1.75rem;right:1.75rem;bottom:1.75rem;left:1.75rem}.xl\:inset-8{top:2rem;right:2rem;bottom:2rem;left:2rem}.xl\:inset-9{top:2.25rem;right:2.25rem;bottom:2.25rem;left:2.25rem}.xl\:inset-10{top:2.5rem;right:2.5rem;bottom:2.5rem;left:2.5rem}.xl\:inset-11{top:2.75rem;right:2.75rem;bottom:2.75rem;left:2.75rem}.xl\:inset-12{top:3rem;right:3rem;bottom:3rem;left:3rem}.xl\:inset-15{top:3.75rem;right:3.75rem;bottom:3.75rem;left:3.75rem}.xl\:inset-16{top:4rem;right:4rem;bottom:4rem;left:4rem}.xl\:inset-20{top:5rem;right:5rem;bottom:5rem;left:5rem}.xl\:inset-22{top:5.5rem;right:5.5rem;bottom:5.5rem;left:5.5rem}.xl\:inset-24{top:6rem;right:6rem;bottom:6rem;left:6rem}.xl\:inset-25{top:6.25rem;right:6.25rem;bottom:6.25rem;left:6.25rem}.xl\:inset-26{top:6.5rem;right:6.5rem;bottom:6.5rem;left:6.5rem}.xl\:inset-28{top:8rem;right:8rem;bottom:8rem;left:8rem}.xl\:inset-30{top:8.5rem;right:8.5rem;bottom:8.5rem;left:8.5rem}.xl\:inset-32{top:9rem;right:9rem;bottom:9rem;left:9rem}.xl\:inset-40{top:10rem;right:10rem;bottom:10rem;left:10rem}.xl\:inset-48{top:12rem;right:12rem;bottom:12rem;left:12rem}.xl\:inset-52{top:13rem;right:13rem;bottom:13rem;left:13rem}.xl\:inset-56{top:14rem;right:14rem;bottom:14rem;left:14rem}.xl\:inset-60{top:15rem;right:15rem;bottom:15rem;left:15rem}.xl\:inset-64{top:16rem;right:16rem;bottom:16rem;left:16rem}.xl\:inset-68{top:17rem;right:17rem;bottom:17rem;left:17rem}.xl\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.xl\:inset-px{top:1px;right:1px;bottom:1px;left:1px}.xl\:inset-0\.5{top:.125rem;right:.125rem;bottom:.125rem;left:.125rem}.xl\:inset-1\.5{top:.375rem;right:.375rem;bottom:.375rem;left:.375rem}.xl\:inset-2\.5{top:.625rem;right:.625rem;bottom:.625rem;left:.625rem}.xl\:inset-7\.5{top:1.875rem;right:1.875rem;bottom:1.875rem;left:1.875rem}.xl\:inset-y-0{top:0;bottom:0}.xl\:inset-x-0{right:0;left:0}.xl\:inset-y-1{top:.25rem;bottom:.25rem}.xl\:inset-x-1{right:.25rem;left:.25rem}.xl\:inset-y-2{top:.5rem;bottom:.5rem}.xl\:inset-x-2{right:.5rem;left:.5rem}.xl\:inset-y-3{top:.75rem;bottom:.75rem}.xl\:inset-x-3{right:.75rem;left:.75rem}.xl\:inset-y-4{top:1rem;bottom:1rem}.xl\:inset-x-4{right:1rem;left:1rem}.xl\:inset-y-5{top:1.25rem;bottom:1.25rem}.xl\:inset-x-5{right:1.25rem;left:1.25rem}.xl\:inset-y-6{top:1.5rem;bottom:1.5rem}.xl\:inset-x-6{right:1.5rem;left:1.5rem}.xl\:inset-y-7{top:1.75rem;bottom:1.75rem}.xl\:inset-x-7{right:1.75rem;left:1.75rem}.xl\:inset-y-8{top:2rem;bottom:2rem}.xl\:inset-x-8{right:2rem;left:2rem}.xl\:inset-y-9{top:2.25rem;bottom:2.25rem}.xl\:inset-x-9{right:2.25rem;left:2.25rem}.xl\:inset-y-10{top:2.5rem;bottom:2.5rem}.xl\:inset-x-10{right:2.5rem;left:2.5rem}.xl\:inset-y-11{top:2.75rem;bottom:2.75rem}.xl\:inset-x-11{right:2.75rem;left:2.75rem}.xl\:inset-y-12{top:3rem;bottom:3rem}.xl\:inset-x-12{right:3rem;left:3rem}.xl\:inset-y-15{top:3.75rem;bottom:3.75rem}.xl\:inset-x-15{right:3.75rem;left:3.75rem}.xl\:inset-y-16{top:4rem;bottom:4rem}.xl\:inset-x-16{right:4rem;left:4rem}.xl\:inset-y-20{top:5rem;bottom:5rem}.xl\:inset-x-20{right:5rem;left:5rem}.xl\:inset-y-22{top:5.5rem;bottom:5.5rem}.xl\:inset-x-22{right:5.5rem;left:5.5rem}.xl\:inset-y-24{top:6rem;bottom:6rem}.xl\:inset-x-24{right:6rem;left:6rem}.xl\:inset-y-25{top:6.25rem;bottom:6.25rem}.xl\:inset-x-25{right:6.25rem;left:6.25rem}.xl\:inset-y-26{top:6.5rem;bottom:6.5rem}.xl\:inset-x-26{right:6.5rem;left:6.5rem}.xl\:inset-y-28{top:8rem;bottom:8rem}.xl\:inset-x-28{right:8rem;left:8rem}.xl\:inset-y-30{top:8.5rem;bottom:8.5rem}.xl\:inset-x-30{right:8.5rem;left:8.5rem}.xl\:inset-y-32{top:9rem;bottom:9rem}.xl\:inset-x-32{right:9rem;left:9rem}.xl\:inset-y-40{top:10rem;bottom:10rem}.xl\:inset-x-40{right:10rem;left:10rem}.xl\:inset-y-48{top:12rem;bottom:12rem}.xl\:inset-x-48{right:12rem;left:12rem}.xl\:inset-y-52{top:13rem;bottom:13rem}.xl\:inset-x-52{right:13rem;left:13rem}.xl\:inset-y-56{top:14rem;bottom:14rem}.xl\:inset-x-56{right:14rem;left:14rem}.xl\:inset-y-60{top:15rem;bottom:15rem}.xl\:inset-x-60{right:15rem;left:15rem}.xl\:inset-y-64{top:16rem;bottom:16rem}.xl\:inset-x-64{right:16rem;left:16rem}.xl\:inset-y-68{top:17rem;bottom:17rem}.xl\:inset-x-68{right:17rem;left:17rem}.xl\:inset-y-auto{top:auto;bottom:auto}.xl\:inset-x-auto{right:auto;left:auto}.xl\:inset-y-px{top:1px;bottom:1px}.xl\:inset-x-px{right:1px;left:1px}.xl\:inset-y-0\.5{top:.125rem;bottom:.125rem}.xl\:inset-x-0\.5{right:.125rem;left:.125rem}.xl\:inset-y-1\.5{top:.375rem;bottom:.375rem}.xl\:inset-x-1\.5{right:.375rem;left:.375rem}.xl\:inset-y-2\.5{top:.625rem;bottom:.625rem}.xl\:inset-x-2\.5{right:.625rem;left:.625rem}.xl\:inset-y-7\.5{top:1.875rem;bottom:1.875rem}.xl\:inset-x-7\.5{right:1.875rem;left:1.875rem}.xl\:top-0{top:0}.xl\:right-0{right:0}.xl\:bottom-0{bottom:0}.xl\:left-0{left:0}.xl\:top-1{top:.25rem}.xl\:right-1{right:.25rem}.xl\:bottom-1{bottom:.25rem}.xl\:left-1{left:.25rem}.xl\:top-2{top:.5rem}.xl\:right-2{right:.5rem}.xl\:bottom-2{bottom:.5rem}.xl\:left-2{left:.5rem}.xl\:top-3{top:.75rem}.xl\:right-3{right:.75rem}.xl\:bottom-3{bottom:.75rem}.xl\:left-3{left:.75rem}.xl\:top-4{top:1rem}.xl\:right-4{right:1rem}.xl\:bottom-4{bottom:1rem}.xl\:left-4{left:1rem}.xl\:top-5{top:1.25rem}.xl\:right-5{right:1.25rem}.xl\:bottom-5{bottom:1.25rem}.xl\:left-5{left:1.25rem}.xl\:top-6{top:1.5rem}.xl\:right-6{right:1.5rem}.xl\:bottom-6{bottom:1.5rem}.xl\:left-6{left:1.5rem}.xl\:top-7{top:1.75rem}.xl\:right-7{right:1.75rem}.xl\:bottom-7{bottom:1.75rem}.xl\:left-7{left:1.75rem}.xl\:top-8{top:2rem}.xl\:right-8{right:2rem}.xl\:bottom-8{bottom:2rem}.xl\:left-8{left:2rem}.xl\:top-9{top:2.25rem}.xl\:right-9{right:2.25rem}.xl\:bottom-9{bottom:2.25rem}.xl\:left-9{left:2.25rem}.xl\:top-10{top:2.5rem}.xl\:right-10{right:2.5rem}.xl\:bottom-10{bottom:2.5rem}.xl\:left-10{left:2.5rem}.xl\:top-11{top:2.75rem}.xl\:right-11{right:2.75rem}.xl\:bottom-11{bottom:2.75rem}.xl\:left-11{left:2.75rem}.xl\:top-12{top:3rem}.xl\:right-12{right:3rem}.xl\:bottom-12{bottom:3rem}.xl\:left-12{left:3rem}.xl\:top-15{top:3.75rem}.xl\:right-15{right:3.75rem}.xl\:bottom-15{bottom:3.75rem}.xl\:left-15{left:3.75rem}.xl\:top-16{top:4rem}.xl\:right-16{right:4rem}.xl\:bottom-16{bottom:4rem}.xl\:left-16{left:4rem}.xl\:top-20{top:5rem}.xl\:right-20{right:5rem}.xl\:bottom-20{bottom:5rem}.xl\:left-20{left:5rem}.xl\:top-22{top:5.5rem}.xl\:right-22{right:5.5rem}.xl\:bottom-22{bottom:5.5rem}.xl\:left-22{left:5.5rem}.xl\:top-24{top:6rem}.xl\:right-24{right:6rem}.xl\:bottom-24{bottom:6rem}.xl\:left-24{left:6rem}.xl\:top-25{top:6.25rem}.xl\:right-25{right:6.25rem}.xl\:bottom-25{bottom:6.25rem}.xl\:left-25{left:6.25rem}.xl\:top-26{top:6.5rem}.xl\:right-26{right:6.5rem}.xl\:bottom-26{bottom:6.5rem}.xl\:left-26{left:6.5rem}.xl\:top-28{top:8rem}.xl\:right-28{right:8rem}.xl\:bottom-28{bottom:8rem}.xl\:left-28{left:8rem}.xl\:top-30{top:8.5rem}.xl\:right-30{right:8.5rem}.xl\:bottom-30{bottom:8.5rem}.xl\:left-30{left:8.5rem}.xl\:top-32{top:9rem}.xl\:right-32{right:9rem}.xl\:bottom-32{bottom:9rem}.xl\:left-32{left:9rem}.xl\:top-40{top:10rem}.xl\:right-40{right:10rem}.xl\:bottom-40{bottom:10rem}.xl\:left-40{left:10rem}.xl\:top-48{top:12rem}.xl\:right-48{right:12rem}.xl\:bottom-48{bottom:12rem}.xl\:left-48{left:12rem}.xl\:top-52{top:13rem}.xl\:right-52{right:13rem}.xl\:bottom-52{bottom:13rem}.xl\:left-52{left:13rem}.xl\:top-56{top:14rem}.xl\:right-56{right:14rem}.xl\:bottom-56{bottom:14rem}.xl\:left-56{left:14rem}.xl\:top-60{top:15rem}.xl\:right-60{right:15rem}.xl\:bottom-60{bottom:15rem}.xl\:left-60{left:15rem}.xl\:top-64{top:16rem}.xl\:right-64{right:16rem}.xl\:bottom-64{bottom:16rem}.xl\:left-64{left:16rem}.xl\:top-68{top:17rem}.xl\:right-68{right:17rem}.xl\:bottom-68{bottom:17rem}.xl\:left-68{left:17rem}.xl\:top-auto{top:auto}.xl\:right-auto{right:auto}.xl\:bottom-auto{bottom:auto}.xl\:left-auto{left:auto}.xl\:top-px{top:1px}.xl\:right-px{right:1px}.xl\:bottom-px{bottom:1px}.xl\:left-px{left:1px}.xl\:top-0\.5{top:.125rem}.xl\:right-0\.5{right:.125rem}.xl\:bottom-0\.5{bottom:.125rem}.xl\:left-0\.5{left:.125rem}.xl\:top-1\.5{top:.375rem}.xl\:right-1\.5{right:.375rem}.xl\:bottom-1\.5{bottom:.375rem}.xl\:left-1\.5{left:.375rem}.xl\:top-2\.5{top:.625rem}.xl\:right-2\.5{right:.625rem}.xl\:bottom-2\.5{bottom:.625rem}.xl\:left-2\.5{left:.625rem}.xl\:top-7\.5{top:1.875rem}.xl\:right-7\.5{right:1.875rem}.xl\:bottom-7\.5{bottom:1.875rem}.xl\:left-7\.5{left:1.875rem}.xl\:resize-none{resize:none}.xl\:resize-y{resize:vertical}.xl\:resize-x{resize:horizontal}.xl\:resize{resize:both}.xl\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.xl\:shadow-sm{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.xl\:shadow{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.xl\:shadow-md{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.xl\:shadow-lg{box-shadow:0 0 20px rgba(0,0,0,.15)}.xl\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:shadow-inner{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.xl\:shadow-outline{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.xl\:shadow-none{box-shadow:none}.xl\:shadow-strong{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.xl\:shadow-top{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.xl\:shadow-symbol{box-shadow:0 1px 2px rgba(10,16,20,.24)}.xl\:shadow-sidebar{box-shadow:0 0 25px rgba(0,0,0,.1)}.xl\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.xl\:hover\:shadow-sm:hover{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.xl\:hover\:shadow:hover{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.xl\:hover\:shadow-md:hover{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.xl\:hover\:shadow-lg:hover{box-shadow:0 0 20px rgba(0,0,0,.15)}.xl\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:hover\:shadow-inner:hover{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.xl\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.xl\:hover\:shadow-none:hover{box-shadow:none}.xl\:hover\:shadow-strong:hover{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.xl\:hover\:shadow-top:hover{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.xl\:hover\:shadow-symbol:hover{box-shadow:0 1px 2px rgba(10,16,20,.24)}.xl\:hover\:shadow-sidebar:hover{box-shadow:0 0 25px rgba(0,0,0,.1)}.xl\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.xl\:focus\:shadow-sm:focus{box-shadow:0 1px 5px 0 rgba(0,0,0,.15)}.xl\:focus\:shadow:focus{box-shadow:0 10px 20px 0 rgba(0,0,0,.05)}.xl\:focus\:shadow-md:focus{box-shadow:0 0 10px 0 rgba(0,0,0,.25)}.xl\:focus\:shadow-lg:focus{box-shadow:0 0 20px rgba(0,0,0,.15)}.xl\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:focus\:shadow-inner:focus{box-shadow:inset 0 0 20px rgba(0,0,0,.15)}.xl\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(52,144,220,.5)}.xl\:focus\:shadow-none:focus{box-shadow:none}.xl\:focus\:shadow-strong:focus{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.xl\:focus\:shadow-top:focus{box-shadow:0 -2px 4px 0 rgba(0,0,0,.1)}.xl\:focus\:shadow-symbol:focus{box-shadow:0 1px 2px rgba(10,16,20,.24)}.xl\:focus\:shadow-sidebar:focus{box-shadow:0 0 25px rgba(0,0,0,.1)}.xl\:fill-current{fill:currentColor}.xl\:fill-transparent{fill:transparent}.xl\:stroke-current{stroke:currentColor}.xl\:stroke-0{stroke-width:0}.xl\:stroke-1{stroke-width:1}.xl\:stroke-2{stroke-width:2}.xl\:table-auto{table-layout:auto}.xl\:table-fixed{table-layout:fixed}.xl\:text-left{text-align:left}.xl\:text-center{text-align:center}.xl\:text-right{text-align:right}.xl\:text-justify{text-align:justify}.xl\:text-transparent{color:transparent}.xl\:text-current{color:currentColor}.xl\:text-black{color:#000}.xl\:text-white{color:#fff}.xl\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.xl\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.xl\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.xl\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.xl\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.xl\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.xl\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.xl\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.xl\:text-gray,.xl\:text-gray-DEFAULT{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:text-red{color:#d64343}.xl\:text-orange{color:#eb6437}.xl\:text-yellow{color:#f8da30}.xl\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.xl\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.xl\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.xl\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.xl\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.xl\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.xl\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.xl\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.xl\:text-green,.xl\:text-green-DEFAULT{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.xl\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.xl\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.xl\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.xl\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.xl\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.xl\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.xl\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.xl\:text-teal,.xl\:text-teal-DEFAULT{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:text-blue-50{color:#d1eaff}.xl\:text-blue-100{color:#a8d7ff}.xl\:text-blue-200{color:#80c4ff}.xl\:text-blue-300{color:#57b0ff}.xl\:text-blue-400{color:#2e9dff}.xl\:text-blue-500{color:#058aff}.xl\:text-blue-600{color:#0075db}.xl\:text-blue-700{color:#005fb3}.xl\:text-blue-800{color:#00498a}.xl\:text-blue-900{color:#003461}.xl\:text-blue,.xl\:text-blue-DEFAULT{color:#0075db}.xl\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.xl\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.xl\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.xl\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.xl\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.xl\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.xl\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.xl\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.xl\:text-indigo,.xl\:text-indigo-DEFAULT{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.xl\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.xl\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.xl\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.xl\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.xl\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.xl\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.xl\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.xl\:text-purple,.xl\:text-purple-DEFAULT{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:text-pink{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.xl\:text-inherit{color:inherit}.xl\:text-amber{color:#d78737}.xl\:text-amber-active{color:#e3872b}.xl\:text-ardoise{color:#596a82}.xl\:text-ardoise-active{color:#476794}.xl\:text-blue-active{color:#14a5c2}.xl\:text-lightBlue,.xl\:text-lightBlue-active{color:rgba(0,85,138,.1)}.xl\:text-deepBlue{color:#0e346c}.xl\:text-deepBlue-active{color:#0a3f8f}.xl\:text-gold{color:#bd9e56}.xl\:text-gold-active{color:#c9a34a}.xl\:text-grenadine{color:#c35078}.xl\:text-grenadine-active{color:#cf4475}.xl\:text-kiwi{color:#9a9f1e}.xl\:text-kiwi-active{color:#a3a815}.xl\:text-lilas{color:#7ea1d3}.xl\:text-lilas-active{color:#75a0db}.xl\:text-mahogany{color:#57142e}.xl\:text-mahogany-active{color:#610a2b}.xl\:text-ocher{color:#c29614}.xl\:text-ocher-active{color:#cd9c0a}.xl\:text-pine{color:#144d52}.xl\:text-pine-active{color:#0a555c}.xl\:text-platinum,.xl\:text-platinum-active{color:#000}.xl\:text-prune{color:#661456}.xl\:text-prune-active{color:#72085d}.xl\:text-sand{color:#d7be88}.xl\:text-sand-active{color:#dfc181}.xl\:text-sandPearl{color:#f0e5d6}.xl\:text-sandPearl-active{color:#f2e6d4}.xl\:text-silver{color:#b1b2b4}.xl\:text-silver-active{color:#a9afbc}.xl\:text-skyBlue{color:#98d2d7}.xl\:text-skyBlue-active{color:#91d8de}.xl\:text-southSea{color:#9dc9cd}.xl\:text-southSea-active{color:#95ced5}.xl\:text-turquoise{color:#14a5c2}.xl\:text-turquoise-active{color:#0aaccd}.xl\:text-waterGreen{color:#007571}.xl\:text-waterGreen-active{color:#00a8a3}.xl\:text-deepRed{color:#c32222}.xl\:text-deepRed-active{color:#cf1717}.xl\:text-emerald{color:#14a33a}.xl\:text-emerald-active{color:#0bad36}.xl\:text-greenLight{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.xl\:text-orange-active{color:#f65f2c}.xl\:text-red-active{color:#e13737}.xl\:text-white-active{color:#14a5c2}.xl\:text-white-button,.xl\:text-white-button-active{color:#fff}.xl\:text-code{color:#3f3d57}.xl\:text-code-active{color:#37354b}.xl\:text-gray-lighter{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.xl\:text-gray-lighter-active{color:#ebebeb}.xl\:text-gray-light{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.xl\:text-gray-medium{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.xl\:text-gray-darker{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.xl\:text-gray-darker-active{color:#14a5c2}.xl\:text-api-default{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.xl\:text-gray-xxl{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.xl\:text-line-even{color:#f3f6f7}.xl\:hover\:text-transparent:hover{color:transparent}.xl\:hover\:text-current:hover{color:currentColor}.xl\:hover\:text-black:hover{color:#000}.xl\:hover\:text-white:hover{color:#fff}.xl\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.xl\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.xl\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.xl\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.xl\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.xl\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.xl\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.xl\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.xl\:hover\:text-gray-DEFAULT:hover,.xl\:hover\:text-gray:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:hover\:text-red:hover{color:#d64343}.xl\:hover\:text-orange:hover{color:#eb6437}.xl\:hover\:text-yellow:hover{color:#f8da30}.xl\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.xl\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.xl\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.xl\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.xl\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.xl\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.xl\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.xl\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.xl\:hover\:text-green-DEFAULT:hover,.xl\:hover\:text-green:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.xl\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.xl\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.xl\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.xl\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.xl\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.xl\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.xl\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.xl\:hover\:text-teal-DEFAULT:hover,.xl\:hover\:text-teal:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:hover\:text-blue-50:hover{color:#d1eaff}.xl\:hover\:text-blue-100:hover{color:#a8d7ff}.xl\:hover\:text-blue-200:hover{color:#80c4ff}.xl\:hover\:text-blue-300:hover{color:#57b0ff}.xl\:hover\:text-blue-400:hover{color:#2e9dff}.xl\:hover\:text-blue-500:hover{color:#058aff}.xl\:hover\:text-blue-600:hover{color:#0075db}.xl\:hover\:text-blue-700:hover{color:#005fb3}.xl\:hover\:text-blue-800:hover{color:#00498a}.xl\:hover\:text-blue-900:hover{color:#003461}.xl\:hover\:text-blue-DEFAULT:hover,.xl\:hover\:text-blue:hover{color:#0075db}.xl\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.xl\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.xl\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.xl\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.xl\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.xl\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.xl\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.xl\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.xl\:hover\:text-indigo-DEFAULT:hover,.xl\:hover\:text-indigo:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.xl\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.xl\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.xl\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.xl\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.xl\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.xl\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.xl\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.xl\:hover\:text-purple-DEFAULT:hover,.xl\:hover\:text-purple:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:hover\:text-pink:hover{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.xl\:hover\:text-inherit:hover{color:inherit}.xl\:hover\:text-amber:hover{color:#d78737}.xl\:hover\:text-amber-active:hover{color:#e3872b}.xl\:hover\:text-ardoise:hover{color:#596a82}.xl\:hover\:text-ardoise-active:hover{color:#476794}.xl\:hover\:text-blue-active:hover{color:#14a5c2}.xl\:hover\:text-lightBlue-active:hover,.xl\:hover\:text-lightBlue:hover{color:rgba(0,85,138,.1)}.xl\:hover\:text-deepBlue:hover{color:#0e346c}.xl\:hover\:text-deepBlue-active:hover{color:#0a3f8f}.xl\:hover\:text-gold:hover{color:#bd9e56}.xl\:hover\:text-gold-active:hover{color:#c9a34a}.xl\:hover\:text-grenadine:hover{color:#c35078}.xl\:hover\:text-grenadine-active:hover{color:#cf4475}.xl\:hover\:text-kiwi:hover{color:#9a9f1e}.xl\:hover\:text-kiwi-active:hover{color:#a3a815}.xl\:hover\:text-lilas:hover{color:#7ea1d3}.xl\:hover\:text-lilas-active:hover{color:#75a0db}.xl\:hover\:text-mahogany:hover{color:#57142e}.xl\:hover\:text-mahogany-active:hover{color:#610a2b}.xl\:hover\:text-ocher:hover{color:#c29614}.xl\:hover\:text-ocher-active:hover{color:#cd9c0a}.xl\:hover\:text-pine:hover{color:#144d52}.xl\:hover\:text-pine-active:hover{color:#0a555c}.xl\:hover\:text-platinum-active:hover,.xl\:hover\:text-platinum:hover{color:#000}.xl\:hover\:text-prune:hover{color:#661456}.xl\:hover\:text-prune-active:hover{color:#72085d}.xl\:hover\:text-sand:hover{color:#d7be88}.xl\:hover\:text-sand-active:hover{color:#dfc181}.xl\:hover\:text-sandPearl:hover{color:#f0e5d6}.xl\:hover\:text-sandPearl-active:hover{color:#f2e6d4}.xl\:hover\:text-silver:hover{color:#b1b2b4}.xl\:hover\:text-silver-active:hover{color:#a9afbc}.xl\:hover\:text-skyBlue:hover{color:#98d2d7}.xl\:hover\:text-skyBlue-active:hover{color:#91d8de}.xl\:hover\:text-southSea:hover{color:#9dc9cd}.xl\:hover\:text-southSea-active:hover{color:#95ced5}.xl\:hover\:text-turquoise:hover{color:#14a5c2}.xl\:hover\:text-turquoise-active:hover{color:#0aaccd}.xl\:hover\:text-waterGreen:hover{color:#007571}.xl\:hover\:text-waterGreen-active:hover{color:#00a8a3}.xl\:hover\:text-deepRed:hover{color:#c32222}.xl\:hover\:text-deepRed-active:hover{color:#cf1717}.xl\:hover\:text-emerald:hover{color:#14a33a}.xl\:hover\:text-emerald-active:hover{color:#0bad36}.xl\:hover\:text-greenLight:hover{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.xl\:hover\:text-orange-active:hover{color:#f65f2c}.xl\:hover\:text-red-active:hover{color:#e13737}.xl\:hover\:text-white-active:hover{color:#14a5c2}.xl\:hover\:text-white-button-active:hover,.xl\:hover\:text-white-button:hover{color:#fff}.xl\:hover\:text-code:hover{color:#3f3d57}.xl\:hover\:text-code-active:hover{color:#37354b}.xl\:hover\:text-gray-lighter:hover{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.xl\:hover\:text-gray-lighter-active:hover{color:#ebebeb}.xl\:hover\:text-gray-light:hover{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.xl\:hover\:text-gray-medium:hover{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.xl\:hover\:text-gray-darker:hover{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.xl\:hover\:text-gray-darker-active:hover{color:#14a5c2}.xl\:hover\:text-api-default:hover{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.xl\:hover\:text-gray-xxl:hover{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.xl\:hover\:text-line-even:hover{color:#f3f6f7}.xl\:focus\:text-transparent:focus{color:transparent}.xl\:focus\:text-current:focus{color:currentColor}.xl\:focus\:text-black:focus{color:#000}.xl\:focus\:text-white:focus{color:#fff}.xl\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.xl\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.xl\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.xl\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.xl\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.xl\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.xl\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.xl\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.xl\:focus\:text-gray-DEFAULT:focus,.xl\:focus\:text-gray:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:focus\:text-red:focus{color:#d64343}.xl\:focus\:text-orange:focus{color:#eb6437}.xl\:focus\:text-yellow:focus{color:#f8da30}.xl\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.xl\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.xl\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.xl\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.xl\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.xl\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.xl\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.xl\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.xl\:focus\:text-green-DEFAULT:focus,.xl\:focus\:text-green:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.xl\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.xl\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.xl\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.xl\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.xl\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.xl\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.xl\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.xl\:focus\:text-teal-DEFAULT:focus,.xl\:focus\:text-teal:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:focus\:text-blue-50:focus{color:#d1eaff}.xl\:focus\:text-blue-100:focus{color:#a8d7ff}.xl\:focus\:text-blue-200:focus{color:#80c4ff}.xl\:focus\:text-blue-300:focus{color:#57b0ff}.xl\:focus\:text-blue-400:focus{color:#2e9dff}.xl\:focus\:text-blue-500:focus{color:#058aff}.xl\:focus\:text-blue-600:focus{color:#0075db}.xl\:focus\:text-blue-700:focus{color:#005fb3}.xl\:focus\:text-blue-800:focus{color:#00498a}.xl\:focus\:text-blue-900:focus{color:#003461}.xl\:focus\:text-blue-DEFAULT:focus,.xl\:focus\:text-blue:focus{color:#0075db}.xl\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.xl\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.xl\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.xl\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.xl\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.xl\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.xl\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.xl\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.xl\:focus\:text-indigo-DEFAULT:focus,.xl\:focus\:text-indigo:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.xl\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.xl\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.xl\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.xl\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.xl\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.xl\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.xl\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.xl\:focus\:text-purple-DEFAULT:focus,.xl\:focus\:text-purple:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:focus\:text-pink:focus{--text-opacity:1;color:#d81b60;color:rgba(216,27,96,var(--text-opacity))}.xl\:focus\:text-inherit:focus{color:inherit}.xl\:focus\:text-amber:focus{color:#d78737}.xl\:focus\:text-amber-active:focus{color:#e3872b}.xl\:focus\:text-ardoise:focus{color:#596a82}.xl\:focus\:text-ardoise-active:focus{color:#476794}.xl\:focus\:text-blue-active:focus{color:#14a5c2}.xl\:focus\:text-lightBlue-active:focus,.xl\:focus\:text-lightBlue:focus{color:rgba(0,85,138,.1)}.xl\:focus\:text-deepBlue:focus{color:#0e346c}.xl\:focus\:text-deepBlue-active:focus{color:#0a3f8f}.xl\:focus\:text-gold:focus{color:#bd9e56}.xl\:focus\:text-gold-active:focus{color:#c9a34a}.xl\:focus\:text-grenadine:focus{color:#c35078}.xl\:focus\:text-grenadine-active:focus{color:#cf4475}.xl\:focus\:text-kiwi:focus{color:#9a9f1e}.xl\:focus\:text-kiwi-active:focus{color:#a3a815}.xl\:focus\:text-lilas:focus{color:#7ea1d3}.xl\:focus\:text-lilas-active:focus{color:#75a0db}.xl\:focus\:text-mahogany:focus{color:#57142e}.xl\:focus\:text-mahogany-active:focus{color:#610a2b}.xl\:focus\:text-ocher:focus{color:#c29614}.xl\:focus\:text-ocher-active:focus{color:#cd9c0a}.xl\:focus\:text-pine:focus{color:#144d52}.xl\:focus\:text-pine-active:focus{color:#0a555c}.xl\:focus\:text-platinum-active:focus,.xl\:focus\:text-platinum:focus{color:#000}.xl\:focus\:text-prune:focus{color:#661456}.xl\:focus\:text-prune-active:focus{color:#72085d}.xl\:focus\:text-sand:focus{color:#d7be88}.xl\:focus\:text-sand-active:focus{color:#dfc181}.xl\:focus\:text-sandPearl:focus{color:#f0e5d6}.xl\:focus\:text-sandPearl-active:focus{color:#f2e6d4}.xl\:focus\:text-silver:focus{color:#b1b2b4}.xl\:focus\:text-silver-active:focus{color:#a9afbc}.xl\:focus\:text-skyBlue:focus{color:#98d2d7}.xl\:focus\:text-skyBlue-active:focus{color:#91d8de}.xl\:focus\:text-southSea:focus{color:#9dc9cd}.xl\:focus\:text-southSea-active:focus{color:#95ced5}.xl\:focus\:text-turquoise:focus{color:#14a5c2}.xl\:focus\:text-turquoise-active:focus{color:#0aaccd}.xl\:focus\:text-waterGreen:focus{color:#007571}.xl\:focus\:text-waterGreen-active:focus{color:#00a8a3}.xl\:focus\:text-deepRed:focus{color:#c32222}.xl\:focus\:text-deepRed-active:focus{color:#cf1717}.xl\:focus\:text-emerald:focus{color:#14a33a}.xl\:focus\:text-emerald-active:focus{color:#0bad36}.xl\:focus\:text-greenLight:focus{--text-opacity:1;color:#7cb342;color:rgba(124,179,66,var(--text-opacity))}.xl\:focus\:text-orange-active:focus{color:#f65f2c}.xl\:focus\:text-red-active:focus{color:#e13737}.xl\:focus\:text-white-active:focus{color:#14a5c2}.xl\:focus\:text-white-button-active:focus,.xl\:focus\:text-white-button:focus{color:#fff}.xl\:focus\:text-code:focus{color:#3f3d57}.xl\:focus\:text-code-active:focus{color:#37354b}.xl\:focus\:text-gray-lighter:focus{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.xl\:focus\:text-gray-lighter-active:focus{color:#ebebeb}.xl\:focus\:text-gray-light:focus{--text-opacity:1;color:#d4d1d1;color:rgba(212,209,209,var(--text-opacity))}.xl\:focus\:text-gray-medium:focus{--text-opacity:1;color:#a8a0a0;color:rgba(168,160,160,var(--text-opacity))}.xl\:focus\:text-gray-darker:focus{--text-opacity:1;color:#504747;color:rgba(80,71,71,var(--text-opacity))}.xl\:focus\:text-gray-darker-active:focus{color:#14a5c2}.xl\:focus\:text-api-default:focus{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity))}.xl\:focus\:text-gray-xxl:focus{--text-opacity:1;color:#2c3e50;color:rgba(44,62,80,var(--text-opacity))}.xl\:focus\:text-line-even:focus{color:#f3f6f7}.xl\:text-opacity-0{--text-opacity:0}.xl\:text-opacity-25{--text-opacity:0.25}.xl\:text-opacity-50{--text-opacity:0.5}.xl\:text-opacity-75{--text-opacity:0.75}.xl\:text-opacity-100{--text-opacity:1}.xl\:hover\:text-opacity-0:hover{--text-opacity:0}.xl\:hover\:text-opacity-25:hover{--text-opacity:0.25}.xl\:hover\:text-opacity-50:hover{--text-opacity:0.5}.xl\:hover\:text-opacity-75:hover{--text-opacity:0.75}.xl\:hover\:text-opacity-100:hover{--text-opacity:1}.xl\:focus\:text-opacity-0:focus{--text-opacity:0}.xl\:focus\:text-opacity-25:focus{--text-opacity:0.25}.xl\:focus\:text-opacity-50:focus{--text-opacity:0.5}.xl\:focus\:text-opacity-75:focus{--text-opacity:0.75}.xl\:focus\:text-opacity-100:focus{--text-opacity:1}.xl\:italic{font-style:italic}.xl\:not-italic{font-style:normal}.xl\:uppercase{text-transform:uppercase}.xl\:lowercase{text-transform:lowercase}.xl\:capitalize{text-transform:capitalize}.xl\:normal-case{text-transform:none}.xl\:underline{text-decoration:underline}.xl\:line-through{text-decoration:line-through}.xl\:no-underline{text-decoration:none}.xl\:hover\:underline:hover{text-decoration:underline}.xl\:hover\:line-through:hover{text-decoration:line-through}.xl\:hover\:no-underline:hover{text-decoration:none}.xl\:focus\:underline:focus{text-decoration:underline}.xl\:focus\:line-through:focus{text-decoration:line-through}.xl\:focus\:no-underline:focus{text-decoration:none}.xl\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.xl\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.xl\:diagonal-fractions,.xl\:lining-nums,.xl\:oldstyle-nums,.xl\:ordinal,.xl\:proportional-nums,.xl\:slashed-zero,.xl\:stacked-fractions,.xl\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/);--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/);font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.xl\:normal-nums{font-variant-numeric:normal}.xl\:ordinal{--font-variant-numeric-ordinal:ordinal}.xl\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.xl\:lining-nums{--font-variant-numeric-figure:lining-nums}.xl\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.xl\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.xl\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.xl\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.xl\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.xl\:tracking-tighter{letter-spacing:-.05em}.xl\:tracking-tight{letter-spacing:-.025em}.xl\:tracking-normal{letter-spacing:0}.xl\:tracking-wide{letter-spacing:.025em}.xl\:tracking-wider{letter-spacing:.05em}.xl\:tracking-widest{letter-spacing:.1em}.xl\:select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.xl\:select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.xl\:select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.xl\:select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.xl\:align-baseline{vertical-align:baseline}.xl\:align-top{vertical-align:top}.xl\:align-middle{vertical-align:middle}.xl\:align-bottom{vertical-align:bottom}.xl\:align-text-top{vertical-align:text-top}.xl\:align-text-bottom{vertical-align:text-bottom}.xl\:visible{visibility:visible}.xl\:invisible{visibility:hidden}.xl\:whitespace-normal{white-space:normal}.xl\:whitespace-no-wrap{white-space:nowrap}.xl\:whitespace-pre{white-space:pre}.xl\:whitespace-pre-line{white-space:pre-line}.xl\:whitespace-pre-wrap{white-space:pre-wrap}.xl\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.xl\:break-words{word-wrap:break-word;overflow-wrap:break-word}.xl\:break-all{word-break:break-all}.xl\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xl\:w-0{width:0}.xl\:w-1{width:.25rem}.xl\:w-2{width:.5rem}.xl\:w-3{width:.75rem}.xl\:w-4{width:1rem}.xl\:w-5{width:1.25rem}.xl\:w-6{width:1.5rem}.xl\:w-7{width:1.75rem}.xl\:w-8{width:2rem}.xl\:w-9{width:2.25rem}.xl\:w-10{width:2.5rem}.xl\:w-11{width:2.75rem}.xl\:w-12{width:3rem}.xl\:w-15{width:3.75rem}.xl\:w-16{width:4rem}.xl\:w-20{width:5rem}.xl\:w-22{width:5.5rem}.xl\:w-24{width:6rem}.xl\:w-25{width:6.25rem}.xl\:w-26{width:6.5rem}.xl\:w-28{width:8rem}.xl\:w-30{width:8.5rem}.xl\:w-32{width:9rem}.xl\:w-40{width:10rem}.xl\:w-48{width:12rem}.xl\:w-52{width:13rem}.xl\:w-56{width:14rem}.xl\:w-60{width:15rem}.xl\:w-64{width:16rem}.xl\:w-68{width:17rem}.xl\:w-auto{width:auto}.xl\:w-px{width:1px}.xl\:w-0\.5{width:.125rem}.xl\:w-1\.5{width:.375rem}.xl\:w-2\.5{width:.625rem}.xl\:w-7\.5{width:1.875rem}.xl\:w-1\/2{width:50%}.xl\:w-1\/3{width:33.333333%}.xl\:w-2\/3{width:66.666667%}.xl\:w-1\/4{width:25%}.xl\:w-2\/4{width:50%}.xl\:w-3\/4{width:75%}.xl\:w-1\/5{width:20%}.xl\:w-2\/5{width:40%}.xl\:w-3\/5{width:60%}.xl\:w-4\/5{width:80%}.xl\:w-1\/6{width:16.666667%}.xl\:w-2\/6{width:33.333333%}.xl\:w-3\/6{width:50%}.xl\:w-4\/6{width:66.666667%}.xl\:w-5\/6{width:83.333333%}.xl\:w-1\/12{width:8.333333%}.xl\:w-2\/12{width:16.666667%}.xl\:w-3\/12{width:25%}.xl\:w-4\/12{width:33.333333%}.xl\:w-5\/12{width:41.666667%}.xl\:w-6\/12{width:50%}.xl\:w-7\/12{width:58.333333%}.xl\:w-8\/12{width:66.666667%}.xl\:w-9\/12{width:75%}.xl\:w-10\/12{width:83.333333%}.xl\:w-11\/12{width:91.666667%}.xl\:w-full{width:100%}.xl\:w-screen{width:100vw}.xl\:w-3\/10{width:30%}.xl\:w-7\/10{width:70%}.xl\:w-9\/10{width:90%}.xl\:w-12\/25{width:48%}.xl\:z-0{z-index:0}.xl\:z-1{z-index:1}.xl\:z-2{z-index:2}.xl\:z-3{z-index:3}.xl\:z-4{z-index:4}.xl\:z-5{z-index:5}.xl\:z-6{z-index:6}.xl\:z-10{z-index:10}.xl\:z-20{z-index:20}.xl\:z-30{z-index:30}.xl\:z-40{z-index:40}.xl\:z-50{z-index:50}.xl\:z-auto{z-index:auto}.xl\:gap-0{grid-gap:0;gap:0}.xl\:gap-1{grid-gap:.25rem;gap:.25rem}.xl\:gap-2{grid-gap:.5rem;gap:.5rem}.xl\:gap-3{grid-gap:.75rem;gap:.75rem}.xl\:gap-4{grid-gap:1rem;gap:1rem}.xl\:gap-5{grid-gap:1.25rem;gap:1.25rem}.xl\:gap-6{grid-gap:1.5rem;gap:1.5rem}.xl\:gap-7{grid-gap:1.75rem;gap:1.75rem}.xl\:gap-8{grid-gap:2rem;gap:2rem}.xl\:gap-9{grid-gap:2.25rem;gap:2.25rem}.xl\:gap-10{grid-gap:2.5rem;gap:2.5rem}.xl\:gap-11{grid-gap:2.75rem;gap:2.75rem}.xl\:gap-12{grid-gap:3rem;gap:3rem}.xl\:gap-15{grid-gap:3.75rem;gap:3.75rem}.xl\:gap-16{grid-gap:4rem;gap:4rem}.xl\:gap-20{grid-gap:5rem;gap:5rem}.xl\:gap-22{grid-gap:5.5rem;gap:5.5rem}.xl\:gap-24{grid-gap:6rem;gap:6rem}.xl\:gap-25{grid-gap:6.25rem;gap:6.25rem}.xl\:gap-26{grid-gap:6.5rem;gap:6.5rem}.xl\:gap-28{grid-gap:8rem;gap:8rem}.xl\:gap-30{grid-gap:8.5rem;gap:8.5rem}.xl\:gap-32{grid-gap:9rem;gap:9rem}.xl\:gap-40{grid-gap:10rem;gap:10rem}.xl\:gap-48{grid-gap:12rem;gap:12rem}.xl\:gap-52{grid-gap:13rem;gap:13rem}.xl\:gap-56{grid-gap:14rem;gap:14rem}.xl\:gap-60{grid-gap:15rem;gap:15rem}.xl\:gap-64{grid-gap:16rem;gap:16rem}.xl\:gap-68{grid-gap:17rem;gap:17rem}.xl\:gap-px{grid-gap:1px;gap:1px}.xl\:gap-0\.5{grid-gap:.125rem;gap:.125rem}.xl\:gap-1\.5{grid-gap:.375rem;gap:.375rem}.xl\:gap-2\.5{grid-gap:.625rem;gap:.625rem}.xl\:gap-7\.5{grid-gap:1.875rem;gap:1.875rem}.xl\:col-gap-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.xl\:col-gap-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.xl\:col-gap-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.xl\:col-gap-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.xl\:col-gap-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.xl\:col-gap-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.xl\:col-gap-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.xl\:col-gap-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.xl\:col-gap-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.xl\:col-gap-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.xl\:col-gap-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.xl\:col-gap-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.xl\:col-gap-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.xl\:col-gap-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.xl\:col-gap-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.xl\:col-gap-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.xl\:col-gap-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.xl\:col-gap-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.xl\:col-gap-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.xl\:col-gap-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.xl\:col-gap-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.xl\:col-gap-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.xl\:col-gap-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.xl\:col-gap-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.xl\:col-gap-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.xl\:col-gap-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.xl\:col-gap-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.xl\:col-gap-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.xl\:col-gap-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.xl\:col-gap-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.xl\:col-gap-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.xl\:col-gap-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.xl\:col-gap-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.xl\:col-gap-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.xl\:col-gap-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.xl\:gap-x-0{grid-column-gap:0;-moz-column-gap:0;column-gap:0}.xl\:gap-x-1{grid-column-gap:.25rem;-moz-column-gap:.25rem;column-gap:.25rem}.xl\:gap-x-2{grid-column-gap:.5rem;-moz-column-gap:.5rem;column-gap:.5rem}.xl\:gap-x-3{grid-column-gap:.75rem;-moz-column-gap:.75rem;column-gap:.75rem}.xl\:gap-x-4{grid-column-gap:1rem;-moz-column-gap:1rem;column-gap:1rem}.xl\:gap-x-5{grid-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.xl\:gap-x-6{grid-column-gap:1.5rem;-moz-column-gap:1.5rem;column-gap:1.5rem}.xl\:gap-x-7{grid-column-gap:1.75rem;-moz-column-gap:1.75rem;column-gap:1.75rem}.xl\:gap-x-8{grid-column-gap:2rem;-moz-column-gap:2rem;column-gap:2rem}.xl\:gap-x-9{grid-column-gap:2.25rem;-moz-column-gap:2.25rem;column-gap:2.25rem}.xl\:gap-x-10{grid-column-gap:2.5rem;-moz-column-gap:2.5rem;column-gap:2.5rem}.xl\:gap-x-11{grid-column-gap:2.75rem;-moz-column-gap:2.75rem;column-gap:2.75rem}.xl\:gap-x-12{grid-column-gap:3rem;-moz-column-gap:3rem;column-gap:3rem}.xl\:gap-x-15{grid-column-gap:3.75rem;-moz-column-gap:3.75rem;column-gap:3.75rem}.xl\:gap-x-16{grid-column-gap:4rem;-moz-column-gap:4rem;column-gap:4rem}.xl\:gap-x-20{grid-column-gap:5rem;-moz-column-gap:5rem;column-gap:5rem}.xl\:gap-x-22{grid-column-gap:5.5rem;-moz-column-gap:5.5rem;column-gap:5.5rem}.xl\:gap-x-24{grid-column-gap:6rem;-moz-column-gap:6rem;column-gap:6rem}.xl\:gap-x-25{grid-column-gap:6.25rem;-moz-column-gap:6.25rem;column-gap:6.25rem}.xl\:gap-x-26{grid-column-gap:6.5rem;-moz-column-gap:6.5rem;column-gap:6.5rem}.xl\:gap-x-28{grid-column-gap:8rem;-moz-column-gap:8rem;column-gap:8rem}.xl\:gap-x-30{grid-column-gap:8.5rem;-moz-column-gap:8.5rem;column-gap:8.5rem}.xl\:gap-x-32{grid-column-gap:9rem;-moz-column-gap:9rem;column-gap:9rem}.xl\:gap-x-40{grid-column-gap:10rem;-moz-column-gap:10rem;column-gap:10rem}.xl\:gap-x-48{grid-column-gap:12rem;-moz-column-gap:12rem;column-gap:12rem}.xl\:gap-x-52{grid-column-gap:13rem;-moz-column-gap:13rem;column-gap:13rem}.xl\:gap-x-56{grid-column-gap:14rem;-moz-column-gap:14rem;column-gap:14rem}.xl\:gap-x-60{grid-column-gap:15rem;-moz-column-gap:15rem;column-gap:15rem}.xl\:gap-x-64{grid-column-gap:16rem;-moz-column-gap:16rem;column-gap:16rem}.xl\:gap-x-68{grid-column-gap:17rem;-moz-column-gap:17rem;column-gap:17rem}.xl\:gap-x-px{grid-column-gap:1px;-moz-column-gap:1px;column-gap:1px}.xl\:gap-x-0\.5{grid-column-gap:.125rem;-moz-column-gap:.125rem;column-gap:.125rem}.xl\:gap-x-1\.5{grid-column-gap:.375rem;-moz-column-gap:.375rem;column-gap:.375rem}.xl\:gap-x-2\.5{grid-column-gap:.625rem;-moz-column-gap:.625rem;column-gap:.625rem}.xl\:gap-x-7\.5{grid-column-gap:1.875rem;-moz-column-gap:1.875rem;column-gap:1.875rem}.xl\:row-gap-0{grid-row-gap:0;row-gap:0}.xl\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.xl\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.xl\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.xl\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.xl\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.xl\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.xl\:row-gap-7{grid-row-gap:1.75rem;row-gap:1.75rem}.xl\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.xl\:row-gap-9{grid-row-gap:2.25rem;row-gap:2.25rem}.xl\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.xl\:row-gap-11{grid-row-gap:2.75rem;row-gap:2.75rem}.xl\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.xl\:row-gap-15{grid-row-gap:3.75rem;row-gap:3.75rem}.xl\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.xl\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.xl\:row-gap-22{grid-row-gap:5.5rem;row-gap:5.5rem}.xl\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.xl\:row-gap-25{grid-row-gap:6.25rem;row-gap:6.25rem}.xl\:row-gap-26{grid-row-gap:6.5rem;row-gap:6.5rem}.xl\:row-gap-28{grid-row-gap:8rem;row-gap:8rem}.xl\:row-gap-30{grid-row-gap:8.5rem;row-gap:8.5rem}.xl\:row-gap-32{grid-row-gap:9rem;row-gap:9rem}.xl\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.xl\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.xl\:row-gap-52{grid-row-gap:13rem;row-gap:13rem}.xl\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.xl\:row-gap-60{grid-row-gap:15rem;row-gap:15rem}.xl\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.xl\:row-gap-68{grid-row-gap:17rem;row-gap:17rem}.xl\:row-gap-px{grid-row-gap:1px;row-gap:1px}.xl\:row-gap-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.xl\:row-gap-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.xl\:row-gap-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.xl\:row-gap-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.xl\:gap-y-0{grid-row-gap:0;row-gap:0}.xl\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.xl\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.xl\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.xl\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.xl\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.xl\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.xl\:gap-y-7{grid-row-gap:1.75rem;row-gap:1.75rem}.xl\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.xl\:gap-y-9{grid-row-gap:2.25rem;row-gap:2.25rem}.xl\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.xl\:gap-y-11{grid-row-gap:2.75rem;row-gap:2.75rem}.xl\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.xl\:gap-y-15{grid-row-gap:3.75rem;row-gap:3.75rem}.xl\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.xl\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.xl\:gap-y-22{grid-row-gap:5.5rem;row-gap:5.5rem}.xl\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.xl\:gap-y-25{grid-row-gap:6.25rem;row-gap:6.25rem}.xl\:gap-y-26{grid-row-gap:6.5rem;row-gap:6.5rem}.xl\:gap-y-28{grid-row-gap:8rem;row-gap:8rem}.xl\:gap-y-30{grid-row-gap:8.5rem;row-gap:8.5rem}.xl\:gap-y-32{grid-row-gap:9rem;row-gap:9rem}.xl\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.xl\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.xl\:gap-y-52{grid-row-gap:13rem;row-gap:13rem}.xl\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.xl\:gap-y-60{grid-row-gap:15rem;row-gap:15rem}.xl\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.xl\:gap-y-68{grid-row-gap:17rem;row-gap:17rem}.xl\:gap-y-px{grid-row-gap:1px;row-gap:1px}.xl\:gap-y-0\.5{grid-row-gap:.125rem;row-gap:.125rem}.xl\:gap-y-1\.5{grid-row-gap:.375rem;row-gap:.375rem}.xl\:gap-y-2\.5{grid-row-gap:.625rem;row-gap:.625rem}.xl\:gap-y-7\.5{grid-row-gap:1.875rem;row-gap:1.875rem}.xl\:grid-flow-row{grid-auto-flow:row}.xl\:grid-flow-col{grid-auto-flow:column}.xl\:grid-flow-row-dense{grid-auto-flow:row dense}.xl\:grid-flow-col-dense{grid-auto-flow:column dense}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-none{grid-template-columns:none}.xl\:auto-cols-auto{grid-auto-columns:auto}.xl\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.xl\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.xl\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.xl\:col-auto{grid-column:auto}.xl\:col-span-1{grid-column:span 1/span 1}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-6{grid-column:span 6/span 6}.xl\:col-span-7{grid-column:span 7/span 7}.xl\:col-span-8{grid-column:span 8/span 8}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:col-span-10{grid-column:span 10/span 10}.xl\:col-span-11{grid-column:span 11/span 11}.xl\:col-span-12{grid-column:span 12/span 12}.xl\:col-span-full{grid-column:1/-1}.xl\:col-start-1{grid-column-start:1}.xl\:col-start-2{grid-column-start:2}.xl\:col-start-3{grid-column-start:3}.xl\:col-start-4{grid-column-start:4}.xl\:col-start-5{grid-column-start:5}.xl\:col-start-6{grid-column-start:6}.xl\:col-start-7{grid-column-start:7}.xl\:col-start-8{grid-column-start:8}.xl\:col-start-9{grid-column-start:9}.xl\:col-start-10{grid-column-start:10}.xl\:col-start-11{grid-column-start:11}.xl\:col-start-12{grid-column-start:12}.xl\:col-start-13{grid-column-start:13}.xl\:col-start-auto{grid-column-start:auto}.xl\:col-end-1{grid-column-end:1}.xl\:col-end-2{grid-column-end:2}.xl\:col-end-3{grid-column-end:3}.xl\:col-end-4{grid-column-end:4}.xl\:col-end-5{grid-column-end:5}.xl\:col-end-6{grid-column-end:6}.xl\:col-end-7{grid-column-end:7}.xl\:col-end-8{grid-column-end:8}.xl\:col-end-9{grid-column-end:9}.xl\:col-end-10{grid-column-end:10}.xl\:col-end-11{grid-column-end:11}.xl\:col-end-12{grid-column-end:12}.xl\:col-end-13{grid-column-end:13}.xl\:col-end-auto{grid-column-end:auto}.xl\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.xl\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.xl\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.xl\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.xl\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.xl\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.xl\:grid-rows-none{grid-template-rows:none}.xl\:auto-rows-auto{grid-auto-rows:auto}.xl\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.xl\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.xl\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.xl\:row-auto{grid-row:auto}.xl\:row-span-1{grid-row:span 1/span 1}.xl\:row-span-2{grid-row:span 2/span 2}.xl\:row-span-3{grid-row:span 3/span 3}.xl\:row-span-4{grid-row:span 4/span 4}.xl\:row-span-5{grid-row:span 5/span 5}.xl\:row-span-6{grid-row:span 6/span 6}.xl\:row-span-full{grid-row:1/-1}.xl\:row-start-1{grid-row-start:1}.xl\:row-start-2{grid-row-start:2}.xl\:row-start-3{grid-row-start:3}.xl\:row-start-4{grid-row-start:4}.xl\:row-start-5{grid-row-start:5}.xl\:row-start-6{grid-row-start:6}.xl\:row-start-7{grid-row-start:7}.xl\:row-start-auto{grid-row-start:auto}.xl\:row-end-1{grid-row-end:1}.xl\:row-end-2{grid-row-end:2}.xl\:row-end-3{grid-row-end:3}.xl\:row-end-4{grid-row-end:4}.xl\:row-end-5{grid-row-end:5}.xl\:row-end-6{grid-row-end:6}.xl\:row-end-7{grid-row-end:7}.xl\:row-end-auto{grid-row-end:auto}.xl\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.xl\:origin-center{transform-origin:center}.xl\:origin-top{transform-origin:top}.xl\:origin-top-right{transform-origin:top right}.xl\:origin-right{transform-origin:right}.xl\:origin-bottom-right{transform-origin:bottom right}.xl\:origin-bottom{transform-origin:bottom}.xl\:origin-bottom-left{transform-origin:bottom left}.xl\:origin-left{transform-origin:left}.xl\:origin-top-left{transform-origin:top left}.xl\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.xl\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.xl\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.xl\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.xl\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.xl\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.xl\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.xl\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.xl\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.xl\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.xl\:scale-x-0{--transform-scale-x:0}.xl\:scale-x-50{--transform-scale-x:.5}.xl\:scale-x-75{--transform-scale-x:.75}.xl\:scale-x-90{--transform-scale-x:.9}.xl\:scale-x-95{--transform-scale-x:.95}.xl\:scale-x-100{--transform-scale-x:1}.xl\:scale-x-105{--transform-scale-x:1.05}.xl\:scale-x-110{--transform-scale-x:1.1}.xl\:scale-x-125{--transform-scale-x:1.25}.xl\:scale-x-150{--transform-scale-x:1.5}.xl\:scale-y-0{--transform-scale-y:0}.xl\:scale-y-50{--transform-scale-y:.5}.xl\:scale-y-75{--transform-scale-y:.75}.xl\:scale-y-90{--transform-scale-y:.9}.xl\:scale-y-95{--transform-scale-y:.95}.xl\:scale-y-100{--transform-scale-y:1}.xl\:scale-y-105{--transform-scale-y:1.05}.xl\:scale-y-110{--transform-scale-y:1.1}.xl\:scale-y-125{--transform-scale-y:1.25}.xl\:scale-y-150{--transform-scale-y:1.5}.xl\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.xl\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.xl\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.xl\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.xl\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.xl\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.xl\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.xl\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.xl\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.xl\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.xl\:hover\:scale-x-0:hover{--transform-scale-x:0}.xl\:hover\:scale-x-50:hover{--transform-scale-x:.5}.xl\:hover\:scale-x-75:hover{--transform-scale-x:.75}.xl\:hover\:scale-x-90:hover{--transform-scale-x:.9}.xl\:hover\:scale-x-95:hover{--transform-scale-x:.95}.xl\:hover\:scale-x-100:hover{--transform-scale-x:1}.xl\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.xl\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.xl\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.xl\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.xl\:hover\:scale-y-0:hover{--transform-scale-y:0}.xl\:hover\:scale-y-50:hover{--transform-scale-y:.5}.xl\:hover\:scale-y-75:hover{--transform-scale-y:.75}.xl\:hover\:scale-y-90:hover{--transform-scale-y:.9}.xl\:hover\:scale-y-95:hover{--transform-scale-y:.95}.xl\:hover\:scale-y-100:hover{--transform-scale-y:1}.xl\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.xl\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.xl\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.xl\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.xl\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.xl\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.xl\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.xl\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.xl\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.xl\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.xl\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.xl\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.xl\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.xl\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.xl\:focus\:scale-x-0:focus{--transform-scale-x:0}.xl\:focus\:scale-x-50:focus{--transform-scale-x:.5}.xl\:focus\:scale-x-75:focus{--transform-scale-x:.75}.xl\:focus\:scale-x-90:focus{--transform-scale-x:.9}.xl\:focus\:scale-x-95:focus{--transform-scale-x:.95}.xl\:focus\:scale-x-100:focus{--transform-scale-x:1}.xl\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.xl\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.xl\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.xl\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.xl\:focus\:scale-y-0:focus{--transform-scale-y:0}.xl\:focus\:scale-y-50:focus{--transform-scale-y:.5}.xl\:focus\:scale-y-75:focus{--transform-scale-y:.75}.xl\:focus\:scale-y-90:focus{--transform-scale-y:.9}.xl\:focus\:scale-y-95:focus{--transform-scale-y:.95}.xl\:focus\:scale-y-100:focus{--transform-scale-y:1}.xl\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.xl\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.xl\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.xl\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.xl\:rotate-0{--transform-rotate:0}.xl\:rotate-90{--transform-rotate:90deg}.xl\:rotate-135{--transform-rotate:135deg}.xl\:rotate-180{--transform-rotate:180deg}.xl\:-rotate-180{--transform-rotate:-180deg}.xl\:-rotate-135{--transform-rotate:-135deg}.xl\:-rotate-90{--transform-rotate:-90deg}.xl\:hover\:rotate-0:hover{--transform-rotate:0}.xl\:hover\:rotate-90:hover{--transform-rotate:90deg}.xl\:hover\:rotate-135:hover{--transform-rotate:135deg}.xl\:hover\:rotate-180:hover{--transform-rotate:180deg}.xl\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.xl\:hover\:-rotate-135:hover{--transform-rotate:-135deg}.xl\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.xl\:focus\:rotate-0:focus{--transform-rotate:0}.xl\:focus\:rotate-90:focus{--transform-rotate:90deg}.xl\:focus\:rotate-135:focus{--transform-rotate:135deg}.xl\:focus\:rotate-180:focus{--transform-rotate:180deg}.xl\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.xl\:focus\:-rotate-135:focus{--transform-rotate:-135deg}.xl\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.xl\:translate-x-0{--transform-translate-x:0}.xl\:translate-x-1{--transform-translate-x:.25rem}.xl\:translate-x-2{--transform-translate-x:.5rem}.xl\:translate-x-3{--transform-translate-x:.75rem}.xl\:translate-x-4{--transform-translate-x:1rem}.xl\:translate-x-5{--transform-translate-x:1.25rem}.xl\:translate-x-6{--transform-translate-x:1.5rem}.xl\:translate-x-7{--transform-translate-x:1.75rem}.xl\:translate-x-8{--transform-translate-x:2rem}.xl\:translate-x-9{--transform-translate-x:2.25rem}.xl\:translate-x-10{--transform-translate-x:2.5rem}.xl\:translate-x-11{--transform-translate-x:2.75rem}.xl\:translate-x-12{--transform-translate-x:3rem}.xl\:translate-x-15{--transform-translate-x:3.75rem}.xl\:translate-x-16{--transform-translate-x:4rem}.xl\:translate-x-20{--transform-translate-x:5rem}.xl\:translate-x-22{--transform-translate-x:5.5rem}.xl\:translate-x-24{--transform-translate-x:6rem}.xl\:translate-x-25{--transform-translate-x:6.25rem}.xl\:translate-x-26{--transform-translate-x:6.5rem}.xl\:translate-x-28{--transform-translate-x:8rem}.xl\:translate-x-30{--transform-translate-x:8.5rem}.xl\:translate-x-32{--transform-translate-x:9rem}.xl\:translate-x-40{--transform-translate-x:10rem}.xl\:translate-x-48{--transform-translate-x:12rem}.xl\:translate-x-52{--transform-translate-x:13rem}.xl\:translate-x-56{--transform-translate-x:14rem}.xl\:translate-x-60{--transform-translate-x:15rem}.xl\:translate-x-64{--transform-translate-x:16rem}.xl\:translate-x-68{--transform-translate-x:17rem}.xl\:translate-x-px{--transform-translate-x:1px}.xl\:translate-x-0\.5{--transform-translate-x:.125rem}.xl\:translate-x-1\.5{--transform-translate-x:.375rem}.xl\:translate-x-2\.5{--transform-translate-x:.625rem}.xl\:translate-x-7\.5{--transform-translate-x:1.875rem}.xl\:-translate-x-1{--transform-translate-x:-0.25rem}.xl\:-translate-x-2{--transform-translate-x:-0.5rem}.xl\:-translate-x-3{--transform-translate-x:-0.75rem}.xl\:-translate-x-4{--transform-translate-x:-1rem}.xl\:-translate-x-5{--transform-translate-x:-1.25rem}.xl\:-translate-x-6{--transform-translate-x:-1.5rem}.xl\:-translate-x-7{--transform-translate-x:-1.75rem}.xl\:-translate-x-8{--transform-translate-x:-2rem}.xl\:-translate-x-9{--transform-translate-x:-2.25rem}.xl\:-translate-x-10{--transform-translate-x:-2.5rem}.xl\:-translate-x-11{--transform-translate-x:-2.75rem}.xl\:-translate-x-12{--transform-translate-x:-3rem}.xl\:-translate-x-15{--transform-translate-x:-3.75rem}.xl\:-translate-x-16{--transform-translate-x:-4rem}.xl\:-translate-x-20{--transform-translate-x:-5rem}.xl\:-translate-x-22{--transform-translate-x:-5.5rem}.xl\:-translate-x-24{--transform-translate-x:-6rem}.xl\:-translate-x-25{--transform-translate-x:-6.25rem}.xl\:-translate-x-26{--transform-translate-x:-6.5rem}.xl\:-translate-x-28{--transform-translate-x:-8rem}.xl\:-translate-x-30{--transform-translate-x:-8.5rem}.xl\:-translate-x-32{--transform-translate-x:-9rem}.xl\:-translate-x-40{--transform-translate-x:-10rem}.xl\:-translate-x-48{--transform-translate-x:-12rem}.xl\:-translate-x-52{--transform-translate-x:-13rem}.xl\:-translate-x-56{--transform-translate-x:-14rem}.xl\:-translate-x-60{--transform-translate-x:-15rem}.xl\:-translate-x-64{--transform-translate-x:-16rem}.xl\:-translate-x-68{--transform-translate-x:-17rem}.xl\:-translate-x-px{--transform-translate-x:-1px}.xl\:-translate-x-0\.5{--transform-translate-x:-0.125rem}.xl\:-translate-x-1\.5{--transform-translate-x:-0.375rem}.xl\:-translate-x-2\.5{--transform-translate-x:-0.625rem}.xl\:-translate-x-7\.5{--transform-translate-x:-1.875rem}.xl\:-translate-x-full{--transform-translate-x:-100%}.xl\:-translate-x-1\/2{--transform-translate-x:-50%}.xl\:translate-x-1\/2{--transform-translate-x:50%}.xl\:translate-x-full{--transform-translate-x:100%}.xl\:translate-y-0{--transform-translate-y:0}.xl\:translate-y-1{--transform-translate-y:.25rem}.xl\:translate-y-2{--transform-translate-y:.5rem}.xl\:translate-y-3{--transform-translate-y:.75rem}.xl\:translate-y-4{--transform-translate-y:1rem}.xl\:translate-y-5{--transform-translate-y:1.25rem}.xl\:translate-y-6{--transform-translate-y:1.5rem}.xl\:translate-y-7{--transform-translate-y:1.75rem}.xl\:translate-y-8{--transform-translate-y:2rem}.xl\:translate-y-9{--transform-translate-y:2.25rem}.xl\:translate-y-10{--transform-translate-y:2.5rem}.xl\:translate-y-11{--transform-translate-y:2.75rem}.xl\:translate-y-12{--transform-translate-y:3rem}.xl\:translate-y-15{--transform-translate-y:3.75rem}.xl\:translate-y-16{--transform-translate-y:4rem}.xl\:translate-y-20{--transform-translate-y:5rem}.xl\:translate-y-22{--transform-translate-y:5.5rem}.xl\:translate-y-24{--transform-translate-y:6rem}.xl\:translate-y-25{--transform-translate-y:6.25rem}.xl\:translate-y-26{--transform-translate-y:6.5rem}.xl\:translate-y-28{--transform-translate-y:8rem}.xl\:translate-y-30{--transform-translate-y:8.5rem}.xl\:translate-y-32{--transform-translate-y:9rem}.xl\:translate-y-40{--transform-translate-y:10rem}.xl\:translate-y-48{--transform-translate-y:12rem}.xl\:translate-y-52{--transform-translate-y:13rem}.xl\:translate-y-56{--transform-translate-y:14rem}.xl\:translate-y-60{--transform-translate-y:15rem}.xl\:translate-y-64{--transform-translate-y:16rem}.xl\:translate-y-68{--transform-translate-y:17rem}.xl\:translate-y-px{--transform-translate-y:1px}.xl\:translate-y-0\.5{--transform-translate-y:.125rem}.xl\:translate-y-1\.5{--transform-translate-y:.375rem}.xl\:translate-y-2\.5{--transform-translate-y:.625rem}.xl\:translate-y-7\.5{--transform-translate-y:1.875rem}.xl\:-translate-y-1{--transform-translate-y:-0.25rem}.xl\:-translate-y-2{--transform-translate-y:-0.5rem}.xl\:-translate-y-3{--transform-translate-y:-0.75rem}.xl\:-translate-y-4{--transform-translate-y:-1rem}.xl\:-translate-y-5{--transform-translate-y:-1.25rem}.xl\:-translate-y-6{--transform-translate-y:-1.5rem}.xl\:-translate-y-7{--transform-translate-y:-1.75rem}.xl\:-translate-y-8{--transform-translate-y:-2rem}.xl\:-translate-y-9{--transform-translate-y:-2.25rem}.xl\:-translate-y-10{--transform-translate-y:-2.5rem}.xl\:-translate-y-11{--transform-translate-y:-2.75rem}.xl\:-translate-y-12{--transform-translate-y:-3rem}.xl\:-translate-y-15{--transform-translate-y:-3.75rem}.xl\:-translate-y-16{--transform-translate-y:-4rem}.xl\:-translate-y-20{--transform-translate-y:-5rem}.xl\:-translate-y-22{--transform-translate-y:-5.5rem}.xl\:-translate-y-24{--transform-translate-y:-6rem}.xl\:-translate-y-25{--transform-translate-y:-6.25rem}.xl\:-translate-y-26{--transform-translate-y:-6.5rem}.xl\:-translate-y-28{--transform-translate-y:-8rem}.xl\:-translate-y-30{--transform-translate-y:-8.5rem}.xl\:-translate-y-32{--transform-translate-y:-9rem}.xl\:-translate-y-40{--transform-translate-y:-10rem}.xl\:-translate-y-48{--transform-translate-y:-12rem}.xl\:-translate-y-52{--transform-translate-y:-13rem}.xl\:-translate-y-56{--transform-translate-y:-14rem}.xl\:-translate-y-60{--transform-translate-y:-15rem}.xl\:-translate-y-64{--transform-translate-y:-16rem}.xl\:-translate-y-68{--transform-translate-y:-17rem}.xl\:-translate-y-px{--transform-translate-y:-1px}.xl\:-translate-y-0\.5{--transform-translate-y:-0.125rem}.xl\:-translate-y-1\.5{--transform-translate-y:-0.375rem}.xl\:-translate-y-2\.5{--transform-translate-y:-0.625rem}.xl\:-translate-y-7\.5{--transform-translate-y:-1.875rem}.xl\:-translate-y-full{--transform-translate-y:-100%}.xl\:-translate-y-1\/2{--transform-translate-y:-50%}.xl\:translate-y-1\/2{--transform-translate-y:50%}.xl\:translate-y-full{--transform-translate-y:100%}.xl\:hover\:translate-x-0:hover{--transform-translate-x:0}.xl\:hover\:translate-x-1:hover{--transform-translate-x:.25rem}.xl\:hover\:translate-x-2:hover{--transform-translate-x:.5rem}.xl\:hover\:translate-x-3:hover{--transform-translate-x:.75rem}.xl\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.xl\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.xl\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.xl\:hover\:translate-x-7:hover{--transform-translate-x:1.75rem}.xl\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.xl\:hover\:translate-x-9:hover{--transform-translate-x:2.25rem}.xl\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.xl\:hover\:translate-x-11:hover{--transform-translate-x:2.75rem}.xl\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.xl\:hover\:translate-x-15:hover{--transform-translate-x:3.75rem}.xl\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.xl\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.xl\:hover\:translate-x-22:hover{--transform-translate-x:5.5rem}.xl\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.xl\:hover\:translate-x-25:hover{--transform-translate-x:6.25rem}.xl\:hover\:translate-x-26:hover{--transform-translate-x:6.5rem}.xl\:hover\:translate-x-28:hover{--transform-translate-x:8rem}.xl\:hover\:translate-x-30:hover{--transform-translate-x:8.5rem}.xl\:hover\:translate-x-32:hover{--transform-translate-x:9rem}.xl\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.xl\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.xl\:hover\:translate-x-52:hover{--transform-translate-x:13rem}.xl\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.xl\:hover\:translate-x-60:hover{--transform-translate-x:15rem}.xl\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.xl\:hover\:translate-x-68:hover{--transform-translate-x:17rem}.xl\:hover\:translate-x-px:hover{--transform-translate-x:1px}.xl\:hover\:translate-x-0\.5:hover{--transform-translate-x:.125rem}.xl\:hover\:translate-x-1\.5:hover{--transform-translate-x:.375rem}.xl\:hover\:translate-x-2\.5:hover{--transform-translate-x:.625rem}.xl\:hover\:translate-x-7\.5:hover{--transform-translate-x:1.875rem}.xl\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.xl\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.xl\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.xl\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.xl\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.xl\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.xl\:hover\:-translate-x-7:hover{--transform-translate-x:-1.75rem}.xl\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.xl\:hover\:-translate-x-9:hover{--transform-translate-x:-2.25rem}.xl\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.xl\:hover\:-translate-x-11:hover{--transform-translate-x:-2.75rem}.xl\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.xl\:hover\:-translate-x-15:hover{--transform-translate-x:-3.75rem}.xl\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.xl\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.xl\:hover\:-translate-x-22:hover{--transform-translate-x:-5.5rem}.xl\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.xl\:hover\:-translate-x-25:hover{--transform-translate-x:-6.25rem}.xl\:hover\:-translate-x-26:hover{--transform-translate-x:-6.5rem}.xl\:hover\:-translate-x-28:hover{--transform-translate-x:-8rem}.xl\:hover\:-translate-x-30:hover{--transform-translate-x:-8.5rem}.xl\:hover\:-translate-x-32:hover{--transform-translate-x:-9rem}.xl\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.xl\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.xl\:hover\:-translate-x-52:hover{--transform-translate-x:-13rem}.xl\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.xl\:hover\:-translate-x-60:hover{--transform-translate-x:-15rem}.xl\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.xl\:hover\:-translate-x-68:hover{--transform-translate-x:-17rem}.xl\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.xl\:hover\:-translate-x-0\.5:hover{--transform-translate-x:-0.125rem}.xl\:hover\:-translate-x-1\.5:hover{--transform-translate-x:-0.375rem}.xl\:hover\:-translate-x-2\.5:hover{--transform-translate-x:-0.625rem}.xl\:hover\:-translate-x-7\.5:hover{--transform-translate-x:-1.875rem}.xl\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.xl\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.xl\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.xl\:hover\:translate-x-full:hover{--transform-translate-x:100%}.xl\:hover\:translate-y-0:hover{--transform-translate-y:0}.xl\:hover\:translate-y-1:hover{--transform-translate-y:.25rem}.xl\:hover\:translate-y-2:hover{--transform-translate-y:.5rem}.xl\:hover\:translate-y-3:hover{--transform-translate-y:.75rem}.xl\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.xl\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.xl\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.xl\:hover\:translate-y-7:hover{--transform-translate-y:1.75rem}.xl\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.xl\:hover\:translate-y-9:hover{--transform-translate-y:2.25rem}.xl\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.xl\:hover\:translate-y-11:hover{--transform-translate-y:2.75rem}.xl\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.xl\:hover\:translate-y-15:hover{--transform-translate-y:3.75rem}.xl\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.xl\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.xl\:hover\:translate-y-22:hover{--transform-translate-y:5.5rem}.xl\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.xl\:hover\:translate-y-25:hover{--transform-translate-y:6.25rem}.xl\:hover\:translate-y-26:hover{--transform-translate-y:6.5rem}.xl\:hover\:translate-y-28:hover{--transform-translate-y:8rem}.xl\:hover\:translate-y-30:hover{--transform-translate-y:8.5rem}.xl\:hover\:translate-y-32:hover{--transform-translate-y:9rem}.xl\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.xl\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.xl\:hover\:translate-y-52:hover{--transform-translate-y:13rem}.xl\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.xl\:hover\:translate-y-60:hover{--transform-translate-y:15rem}.xl\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.xl\:hover\:translate-y-68:hover{--transform-translate-y:17rem}.xl\:hover\:translate-y-px:hover{--transform-translate-y:1px}.xl\:hover\:translate-y-0\.5:hover{--transform-translate-y:.125rem}.xl\:hover\:translate-y-1\.5:hover{--transform-translate-y:.375rem}.xl\:hover\:translate-y-2\.5:hover{--transform-translate-y:.625rem}.xl\:hover\:translate-y-7\.5:hover{--transform-translate-y:1.875rem}.xl\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.xl\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.xl\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.xl\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.xl\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.xl\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.xl\:hover\:-translate-y-7:hover{--transform-translate-y:-1.75rem}.xl\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.xl\:hover\:-translate-y-9:hover{--transform-translate-y:-2.25rem}.xl\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.xl\:hover\:-translate-y-11:hover{--transform-translate-y:-2.75rem}.xl\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.xl\:hover\:-translate-y-15:hover{--transform-translate-y:-3.75rem}.xl\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.xl\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.xl\:hover\:-translate-y-22:hover{--transform-translate-y:-5.5rem}.xl\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.xl\:hover\:-translate-y-25:hover{--transform-translate-y:-6.25rem}.xl\:hover\:-translate-y-26:hover{--transform-translate-y:-6.5rem}.xl\:hover\:-translate-y-28:hover{--transform-translate-y:-8rem}.xl\:hover\:-translate-y-30:hover{--transform-translate-y:-8.5rem}.xl\:hover\:-translate-y-32:hover{--transform-translate-y:-9rem}.xl\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.xl\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.xl\:hover\:-translate-y-52:hover{--transform-translate-y:-13rem}.xl\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.xl\:hover\:-translate-y-60:hover{--transform-translate-y:-15rem}.xl\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.xl\:hover\:-translate-y-68:hover{--transform-translate-y:-17rem}.xl\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.xl\:hover\:-translate-y-0\.5:hover{--transform-translate-y:-0.125rem}.xl\:hover\:-translate-y-1\.5:hover{--transform-translate-y:-0.375rem}.xl\:hover\:-translate-y-2\.5:hover{--transform-translate-y:-0.625rem}.xl\:hover\:-translate-y-7\.5:hover{--transform-translate-y:-1.875rem}.xl\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.xl\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.xl\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.xl\:hover\:translate-y-full:hover{--transform-translate-y:100%}.xl\:focus\:translate-x-0:focus{--transform-translate-x:0}.xl\:focus\:translate-x-1:focus{--transform-translate-x:.25rem}.xl\:focus\:translate-x-2:focus{--transform-translate-x:.5rem}.xl\:focus\:translate-x-3:focus{--transform-translate-x:.75rem}.xl\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.xl\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.xl\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.xl\:focus\:translate-x-7:focus{--transform-translate-x:1.75rem}.xl\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.xl\:focus\:translate-x-9:focus{--transform-translate-x:2.25rem}.xl\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.xl\:focus\:translate-x-11:focus{--transform-translate-x:2.75rem}.xl\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.xl\:focus\:translate-x-15:focus{--transform-translate-x:3.75rem}.xl\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.xl\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.xl\:focus\:translate-x-22:focus{--transform-translate-x:5.5rem}.xl\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.xl\:focus\:translate-x-25:focus{--transform-translate-x:6.25rem}.xl\:focus\:translate-x-26:focus{--transform-translate-x:6.5rem}.xl\:focus\:translate-x-28:focus{--transform-translate-x:8rem}.xl\:focus\:translate-x-30:focus{--transform-translate-x:8.5rem}.xl\:focus\:translate-x-32:focus{--transform-translate-x:9rem}.xl\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.xl\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.xl\:focus\:translate-x-52:focus{--transform-translate-x:13rem}.xl\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.xl\:focus\:translate-x-60:focus{--transform-translate-x:15rem}.xl\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.xl\:focus\:translate-x-68:focus{--transform-translate-x:17rem}.xl\:focus\:translate-x-px:focus{--transform-translate-x:1px}.xl\:focus\:translate-x-0\.5:focus{--transform-translate-x:.125rem}.xl\:focus\:translate-x-1\.5:focus{--transform-translate-x:.375rem}.xl\:focus\:translate-x-2\.5:focus{--transform-translate-x:.625rem}.xl\:focus\:translate-x-7\.5:focus{--transform-translate-x:1.875rem}.xl\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.xl\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.xl\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.xl\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.xl\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.xl\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.xl\:focus\:-translate-x-7:focus{--transform-translate-x:-1.75rem}.xl\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.xl\:focus\:-translate-x-9:focus{--transform-translate-x:-2.25rem}.xl\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.xl\:focus\:-translate-x-11:focus{--transform-translate-x:-2.75rem}.xl\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.xl\:focus\:-translate-x-15:focus{--transform-translate-x:-3.75rem}.xl\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.xl\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.xl\:focus\:-translate-x-22:focus{--transform-translate-x:-5.5rem}.xl\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.xl\:focus\:-translate-x-25:focus{--transform-translate-x:-6.25rem}.xl\:focus\:-translate-x-26:focus{--transform-translate-x:-6.5rem}.xl\:focus\:-translate-x-28:focus{--transform-translate-x:-8rem}.xl\:focus\:-translate-x-30:focus{--transform-translate-x:-8.5rem}.xl\:focus\:-translate-x-32:focus{--transform-translate-x:-9rem}.xl\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.xl\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.xl\:focus\:-translate-x-52:focus{--transform-translate-x:-13rem}.xl\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.xl\:focus\:-translate-x-60:focus{--transform-translate-x:-15rem}.xl\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.xl\:focus\:-translate-x-68:focus{--transform-translate-x:-17rem}.xl\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.xl\:focus\:-translate-x-0\.5:focus{--transform-translate-x:-0.125rem}.xl\:focus\:-translate-x-1\.5:focus{--transform-translate-x:-0.375rem}.xl\:focus\:-translate-x-2\.5:focus{--transform-translate-x:-0.625rem}.xl\:focus\:-translate-x-7\.5:focus{--transform-translate-x:-1.875rem}.xl\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.xl\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.xl\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.xl\:focus\:translate-x-full:focus{--transform-translate-x:100%}.xl\:focus\:translate-y-0:focus{--transform-translate-y:0}.xl\:focus\:translate-y-1:focus{--transform-translate-y:.25rem}.xl\:focus\:translate-y-2:focus{--transform-translate-y:.5rem}.xl\:focus\:translate-y-3:focus{--transform-translate-y:.75rem}.xl\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.xl\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.xl\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.xl\:focus\:translate-y-7:focus{--transform-translate-y:1.75rem}.xl\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.xl\:focus\:translate-y-9:focus{--transform-translate-y:2.25rem}.xl\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.xl\:focus\:translate-y-11:focus{--transform-translate-y:2.75rem}.xl\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.xl\:focus\:translate-y-15:focus{--transform-translate-y:3.75rem}.xl\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.xl\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.xl\:focus\:translate-y-22:focus{--transform-translate-y:5.5rem}.xl\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.xl\:focus\:translate-y-25:focus{--transform-translate-y:6.25rem}.xl\:focus\:translate-y-26:focus{--transform-translate-y:6.5rem}.xl\:focus\:translate-y-28:focus{--transform-translate-y:8rem}.xl\:focus\:translate-y-30:focus{--transform-translate-y:8.5rem}.xl\:focus\:translate-y-32:focus{--transform-translate-y:9rem}.xl\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.xl\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.xl\:focus\:translate-y-52:focus{--transform-translate-y:13rem}.xl\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.xl\:focus\:translate-y-60:focus{--transform-translate-y:15rem}.xl\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.xl\:focus\:translate-y-68:focus{--transform-translate-y:17rem}.xl\:focus\:translate-y-px:focus{--transform-translate-y:1px}.xl\:focus\:translate-y-0\.5:focus{--transform-translate-y:.125rem}.xl\:focus\:translate-y-1\.5:focus{--transform-translate-y:.375rem}.xl\:focus\:translate-y-2\.5:focus{--transform-translate-y:.625rem}.xl\:focus\:translate-y-7\.5:focus{--transform-translate-y:1.875rem}.xl\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.xl\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.xl\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.xl\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.xl\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.xl\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.xl\:focus\:-translate-y-7:focus{--transform-translate-y:-1.75rem}.xl\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.xl\:focus\:-translate-y-9:focus{--transform-translate-y:-2.25rem}.xl\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.xl\:focus\:-translate-y-11:focus{--transform-translate-y:-2.75rem}.xl\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.xl\:focus\:-translate-y-15:focus{--transform-translate-y:-3.75rem}.xl\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.xl\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.xl\:focus\:-translate-y-22:focus{--transform-translate-y:-5.5rem}.xl\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.xl\:focus\:-translate-y-25:focus{--transform-translate-y:-6.25rem}.xl\:focus\:-translate-y-26:focus{--transform-translate-y:-6.5rem}.xl\:focus\:-translate-y-28:focus{--transform-translate-y:-8rem}.xl\:focus\:-translate-y-30:focus{--transform-translate-y:-8.5rem}.xl\:focus\:-translate-y-32:focus{--transform-translate-y:-9rem}.xl\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.xl\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.xl\:focus\:-translate-y-52:focus{--transform-translate-y:-13rem}.xl\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.xl\:focus\:-translate-y-60:focus{--transform-translate-y:-15rem}.xl\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.xl\:focus\:-translate-y-68:focus{--transform-translate-y:-17rem}.xl\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.xl\:focus\:-translate-y-0\.5:focus{--transform-translate-y:-0.125rem}.xl\:focus\:-translate-y-1\.5:focus{--transform-translate-y:-0.375rem}.xl\:focus\:-translate-y-2\.5:focus{--transform-translate-y:-0.625rem}.xl\:focus\:-translate-y-7\.5:focus{--transform-translate-y:-1.875rem}.xl\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.xl\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.xl\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.xl\:focus\:translate-y-full:focus{--transform-translate-y:100%}.xl\:skew-x-0{--transform-skew-x:0}.xl\:skew-x-1{--transform-skew-x:1deg}.xl\:skew-x-2{--transform-skew-x:2deg}.xl\:skew-x-3{--transform-skew-x:3deg}.xl\:skew-x-6{--transform-skew-x:6deg}.xl\:skew-x-12{--transform-skew-x:12deg}.xl\:-skew-x-12{--transform-skew-x:-12deg}.xl\:-skew-x-6{--transform-skew-x:-6deg}.xl\:-skew-x-3{--transform-skew-x:-3deg}.xl\:-skew-x-2{--transform-skew-x:-2deg}.xl\:-skew-x-1{--transform-skew-x:-1deg}.xl\:skew-y-0{--transform-skew-y:0}.xl\:skew-y-1{--transform-skew-y:1deg}.xl\:skew-y-2{--transform-skew-y:2deg}.xl\:skew-y-3{--transform-skew-y:3deg}.xl\:skew-y-6{--transform-skew-y:6deg}.xl\:skew-y-12{--transform-skew-y:12deg}.xl\:-skew-y-12{--transform-skew-y:-12deg}.xl\:-skew-y-6{--transform-skew-y:-6deg}.xl\:-skew-y-3{--transform-skew-y:-3deg}.xl\:-skew-y-2{--transform-skew-y:-2deg}.xl\:-skew-y-1{--transform-skew-y:-1deg}.xl\:hover\:skew-x-0:hover{--transform-skew-x:0}.xl\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.xl\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.xl\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.xl\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.xl\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.xl\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.xl\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.xl\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.xl\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.xl\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.xl\:hover\:skew-y-0:hover{--transform-skew-y:0}.xl\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.xl\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.xl\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.xl\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.xl\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.xl\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.xl\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.xl\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.xl\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.xl\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.xl\:focus\:skew-x-0:focus{--transform-skew-x:0}.xl\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.xl\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.xl\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.xl\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.xl\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.xl\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.xl\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.xl\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.xl\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.xl\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.xl\:focus\:skew-y-0:focus{--transform-skew-y:0}.xl\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.xl\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.xl\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.xl\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.xl\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.xl\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.xl\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.xl\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.xl\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.xl\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.xl\:transition-none{transition-property:none}.xl\:transition-all{transition-property:all}.xl\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.xl\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.xl\:transition-opacity{transition-property:opacity}.xl\:transition-shadow{transition-property:box-shadow}.xl\:transition-transform{transition-property:transform}.xl\:ease-linear{transition-timing-function:linear}.xl\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.xl\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.xl\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.xl\:duration-75{transition-duration:75ms}.xl\:duration-100{transition-duration:.1s}.xl\:duration-150{transition-duration:.15s}.xl\:duration-200{transition-duration:.2s}.xl\:duration-300{transition-duration:.3s}.xl\:duration-500{transition-duration:.5s}.xl\:duration-700{transition-duration:.7s}.xl\:duration-1000{transition-duration:1s}.xl\:delay-75{transition-delay:75ms}.xl\:delay-100{transition-delay:.1s}.xl\:delay-150{transition-delay:.15s}.xl\:delay-200{transition-delay:.2s}.xl\:delay-300{transition-delay:.3s}.xl\:delay-500{transition-delay:.5s}.xl\:delay-700{transition-delay:.7s}.xl\:delay-1000{transition-delay:1s}.xl\:animate-none{-webkit-animation:none;animation:none}.xl\:animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.xl\:animate-ping{-webkit-animation:ping 1s cubic-bezier(0,0,.2,1) infinite;animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.xl\:animate-pulse{-webkit-animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.xl\:animate-bounce{-webkit-animation:bounce 1s infinite;animation:bounce 1s infinite}.xl\:transform-none{transform:none}.xl\:transform-center{transform-origin:center}.xl\:transform-top{transform-origin:top}.xl\:transform-top-right{transform-origin:top right}.xl\:transform-right{transform-origin:right}.xl\:transform-bottom-right{transform-origin:bottom right}.xl\:transform-bottom{transform-origin:bottom}.xl\:transform-bottom-left{transform-origin:bottom left}.xl\:transform-left{transform-origin:left}.xl\:transform-top-left{transform-origin:top left}.xl\:translate-x-0{transform:translateX(0)}.xl\:translate-y-0{transform:translateY(0)}.xl\:translate-x-1{transform:translateX(.25rem)}.xl\:translate-y-1{transform:translateY(.25rem)}.xl\:translate-x-2{transform:translateX(.5rem)}.xl\:translate-y-2{transform:translateY(.5rem)}.xl\:translate-x-3{transform:translateX(.75rem)}.xl\:translate-y-3{transform:translateY(.75rem)}.xl\:translate-x-4{transform:translateX(1rem)}.xl\:translate-y-4{transform:translateY(1rem)}.xl\:translate-x-5{transform:translateX(1.25rem)}.xl\:translate-y-5{transform:translateY(1.25rem)}.xl\:translate-x-6{transform:translateX(1.5rem)}.xl\:translate-y-6{transform:translateY(1.5rem)}.xl\:translate-x-7{transform:translateX(1.75rem)}.xl\:translate-y-7{transform:translateY(1.75rem)}.xl\:translate-x-8{transform:translateX(2rem)}.xl\:translate-y-8{transform:translateY(2rem)}.xl\:translate-x-9{transform:translateX(2.25rem)}.xl\:translate-y-9{transform:translateY(2.25rem)}.xl\:translate-x-10{transform:translateX(2.5rem)}.xl\:translate-y-10{transform:translateY(2.5rem)}.xl\:translate-x-11{transform:translateX(2.75rem)}.xl\:translate-y-11{transform:translateY(2.75rem)}.xl\:translate-x-12{transform:translateX(3rem)}.xl\:translate-y-12{transform:translateY(3rem)}.xl\:translate-x-15{transform:translateX(3.75rem)}.xl\:translate-y-15{transform:translateY(3.75rem)}.xl\:translate-x-16{transform:translateX(4rem)}.xl\:translate-y-16{transform:translateY(4rem)}.xl\:translate-x-20{transform:translateX(5rem)}.xl\:translate-y-20{transform:translateY(5rem)}.xl\:translate-x-22{transform:translateX(5.5rem)}.xl\:translate-y-22{transform:translateY(5.5rem)}.xl\:translate-x-24{transform:translateX(6rem)}.xl\:translate-y-24{transform:translateY(6rem)}.xl\:translate-x-25{transform:translateX(6.25rem)}.xl\:translate-y-25{transform:translateY(6.25rem)}.xl\:translate-x-26{transform:translateX(6.5rem)}.xl\:translate-y-26{transform:translateY(6.5rem)}.xl\:translate-x-28{transform:translateX(8rem)}.xl\:translate-y-28{transform:translateY(8rem)}.xl\:translate-x-30{transform:translateX(8.5rem)}.xl\:translate-y-30{transform:translateY(8.5rem)}.xl\:translate-x-32{transform:translateX(9rem)}.xl\:translate-y-32{transform:translateY(9rem)}.xl\:translate-x-40{transform:translateX(10rem)}.xl\:translate-y-40{transform:translateY(10rem)}.xl\:translate-x-48{transform:translateX(12rem)}.xl\:translate-y-48{transform:translateY(12rem)}.xl\:translate-x-52{transform:translateX(13rem)}.xl\:translate-y-52{transform:translateY(13rem)}.xl\:translate-x-56{transform:translateX(14rem)}.xl\:translate-y-56{transform:translateY(14rem)}.xl\:translate-x-60{transform:translateX(15rem)}.xl\:translate-y-60{transform:translateY(15rem)}.xl\:translate-x-64{transform:translateX(16rem)}.xl\:translate-y-64{transform:translateY(16rem)}.xl\:translate-x-68{transform:translateX(17rem)}.xl\:translate-y-68{transform:translateY(17rem)}.xl\:translate-x-px{transform:translateX(1px)}.xl\:translate-y-px{transform:translateY(1px)}.xl\:translate-x-0\.5{transform:translateX(.125rem)}.xl\:translate-y-0\.5{transform:translateY(.125rem)}.xl\:translate-x-1\.5{transform:translateX(.375rem)}.xl\:translate-y-1\.5{transform:translateY(.375rem)}.xl\:translate-x-2\.5{transform:translateX(.625rem)}.xl\:translate-y-2\.5{transform:translateY(.625rem)}.xl\:translate-x-7\.5{transform:translateX(1.875rem)}.xl\:translate-y-7\.5{transform:translateY(1.875rem)}.xl\:-translate-x-1{transform:translateX(-.25rem)}.xl\:-translate-y-1{transform:translateY(-.25rem)}.xl\:-translate-x-2{transform:translateX(-.5rem)}.xl\:-translate-y-2{transform:translateY(-.5rem)}.xl\:-translate-x-3{transform:translateX(-.75rem)}.xl\:-translate-y-3{transform:translateY(-.75rem)}.xl\:-translate-x-4{transform:translateX(-1rem)}.xl\:-translate-y-4{transform:translateY(-1rem)}.xl\:-translate-x-5{transform:translateX(-1.25rem)}.xl\:-translate-y-5{transform:translateY(-1.25rem)}.xl\:-translate-x-6{transform:translateX(-1.5rem)}.xl\:-translate-y-6{transform:translateY(-1.5rem)}.xl\:-translate-x-7{transform:translateX(-1.75rem)}.xl\:-translate-y-7{transform:translateY(-1.75rem)}.xl\:-translate-x-8{transform:translateX(-2rem)}.xl\:-translate-y-8{transform:translateY(-2rem)}.xl\:-translate-x-9{transform:translateX(-2.25rem)}.xl\:-translate-y-9{transform:translateY(-2.25rem)}.xl\:-translate-x-10{transform:translateX(-2.5rem)}.xl\:-translate-y-10{transform:translateY(-2.5rem)}.xl\:-translate-x-11{transform:translateX(-2.75rem)}.xl\:-translate-y-11{transform:translateY(-2.75rem)}.xl\:-translate-x-12{transform:translateX(-3rem)}.xl\:-translate-y-12{transform:translateY(-3rem)}.xl\:-translate-x-15{transform:translateX(-3.75rem)}.xl\:-translate-y-15{transform:translateY(-3.75rem)}.xl\:-translate-x-16{transform:translateX(-4rem)}.xl\:-translate-y-16{transform:translateY(-4rem)}.xl\:-translate-x-20{transform:translateX(-5rem)}.xl\:-translate-y-20{transform:translateY(-5rem)}.xl\:-translate-x-22{transform:translateX(-5.5rem)}.xl\:-translate-y-22{transform:translateY(-5.5rem)}.xl\:-translate-x-24{transform:translateX(-6rem)}.xl\:-translate-y-24{transform:translateY(-6rem)}.xl\:-translate-x-25{transform:translateX(-6.25rem)}.xl\:-translate-y-25{transform:translateY(-6.25rem)}.xl\:-translate-x-26{transform:translateX(-6.5rem)}.xl\:-translate-y-26{transform:translateY(-6.5rem)}.xl\:-translate-x-28{transform:translateX(-8rem)}.xl\:-translate-y-28{transform:translateY(-8rem)}.xl\:-translate-x-30{transform:translateX(-8.5rem)}.xl\:-translate-y-30{transform:translateY(-8.5rem)}.xl\:-translate-x-32{transform:translateX(-9rem)}.xl\:-translate-y-32{transform:translateY(-9rem)}.xl\:-translate-x-40{transform:translateX(-10rem)}.xl\:-translate-y-40{transform:translateY(-10rem)}.xl\:-translate-x-48{transform:translateX(-12rem)}.xl\:-translate-y-48{transform:translateY(-12rem)}.xl\:-translate-x-52{transform:translateX(-13rem)}.xl\:-translate-y-52{transform:translateY(-13rem)}.xl\:-translate-x-56{transform:translateX(-14rem)}.xl\:-translate-y-56{transform:translateY(-14rem)}.xl\:-translate-x-60{transform:translateX(-15rem)}.xl\:-translate-y-60{transform:translateY(-15rem)}.xl\:-translate-x-64{transform:translateX(-16rem)}.xl\:-translate-y-64{transform:translateY(-16rem)}.xl\:-translate-x-68{transform:translateX(-17rem)}.xl\:-translate-y-68{transform:translateY(-17rem)}.xl\:-translate-x-px{transform:translateX(-1px)}.xl\:-translate-y-px{transform:translateY(-1px)}.xl\:-translate-x-0\.5{transform:translateX(-.125rem)}.xl\:-translate-y-0\.5{transform:translateY(-.125rem)}.xl\:-translate-x-1\.5{transform:translateX(-.375rem)}.xl\:-translate-y-1\.5{transform:translateY(-.375rem)}.xl\:-translate-x-2\.5{transform:translateX(-.625rem)}.xl\:-translate-y-2\.5{transform:translateY(-.625rem)}.xl\:-translate-x-7\.5{transform:translateX(-1.875rem)}.xl\:-translate-y-7\.5{transform:translateY(-1.875rem)}.xl\:-translate-x-full{transform:translateX(-100%)}.xl\:-translate-y-full{transform:translateY(-100%)}.xl\:-translate-x-1\/2{transform:translateX(-50%)}.xl\:-translate-y-1\/2{transform:translateY(-50%)}.xl\:translate-x-1\/2{transform:translateX(50%)}.xl\:translate-y-1\/2{transform:translateY(50%)}.xl\:translate-x-full{transform:translateX(100%)}.xl\:translate-y-full{transform:translateY(100%)}.xl\:hover\:translate-x-0:hover{transform:translateX(0)}.xl\:hover\:translate-y-0:hover{transform:translateY(0)}.xl\:hover\:translate-x-1:hover{transform:translateX(.25rem)}.xl\:hover\:translate-y-1:hover{transform:translateY(.25rem)}.xl\:hover\:translate-x-2:hover{transform:translateX(.5rem)}.xl\:hover\:translate-y-2:hover{transform:translateY(.5rem)}.xl\:hover\:translate-x-3:hover{transform:translateX(.75rem)}.xl\:hover\:translate-y-3:hover{transform:translateY(.75rem)}.xl\:hover\:translate-x-4:hover{transform:translateX(1rem)}.xl\:hover\:translate-y-4:hover{transform:translateY(1rem)}.xl\:hover\:translate-x-5:hover{transform:translateX(1.25rem)}.xl\:hover\:translate-y-5:hover{transform:translateY(1.25rem)}.xl\:hover\:translate-x-6:hover{transform:translateX(1.5rem)}.xl\:hover\:translate-y-6:hover{transform:translateY(1.5rem)}.xl\:hover\:translate-x-7:hover{transform:translateX(1.75rem)}.xl\:hover\:translate-y-7:hover{transform:translateY(1.75rem)}.xl\:hover\:translate-x-8:hover{transform:translateX(2rem)}.xl\:hover\:translate-y-8:hover{transform:translateY(2rem)}.xl\:hover\:translate-x-9:hover{transform:translateX(2.25rem)}.xl\:hover\:translate-y-9:hover{transform:translateY(2.25rem)}.xl\:hover\:translate-x-10:hover{transform:translateX(2.5rem)}.xl\:hover\:translate-y-10:hover{transform:translateY(2.5rem)}.xl\:hover\:translate-x-11:hover{transform:translateX(2.75rem)}.xl\:hover\:translate-y-11:hover{transform:translateY(2.75rem)}.xl\:hover\:translate-x-12:hover{transform:translateX(3rem)}.xl\:hover\:translate-y-12:hover{transform:translateY(3rem)}.xl\:hover\:translate-x-15:hover{transform:translateX(3.75rem)}.xl\:hover\:translate-y-15:hover{transform:translateY(3.75rem)}.xl\:hover\:translate-x-16:hover{transform:translateX(4rem)}.xl\:hover\:translate-y-16:hover{transform:translateY(4rem)}.xl\:hover\:translate-x-20:hover{transform:translateX(5rem)}.xl\:hover\:translate-y-20:hover{transform:translateY(5rem)}.xl\:hover\:translate-x-22:hover{transform:translateX(5.5rem)}.xl\:hover\:translate-y-22:hover{transform:translateY(5.5rem)}.xl\:hover\:translate-x-24:hover{transform:translateX(6rem)}.xl\:hover\:translate-y-24:hover{transform:translateY(6rem)}.xl\:hover\:translate-x-25:hover{transform:translateX(6.25rem)}.xl\:hover\:translate-y-25:hover{transform:translateY(6.25rem)}.xl\:hover\:translate-x-26:hover{transform:translateX(6.5rem)}.xl\:hover\:translate-y-26:hover{transform:translateY(6.5rem)}.xl\:hover\:translate-x-28:hover{transform:translateX(8rem)}.xl\:hover\:translate-y-28:hover{transform:translateY(8rem)}.xl\:hover\:translate-x-30:hover{transform:translateX(8.5rem)}.xl\:hover\:translate-y-30:hover{transform:translateY(8.5rem)}.xl\:hover\:translate-x-32:hover{transform:translateX(9rem)}.xl\:hover\:translate-y-32:hover{transform:translateY(9rem)}.xl\:hover\:translate-x-40:hover{transform:translateX(10rem)}.xl\:hover\:translate-y-40:hover{transform:translateY(10rem)}.xl\:hover\:translate-x-48:hover{transform:translateX(12rem)}.xl\:hover\:translate-y-48:hover{transform:translateY(12rem)}.xl\:hover\:translate-x-52:hover{transform:translateX(13rem)}.xl\:hover\:translate-y-52:hover{transform:translateY(13rem)}.xl\:hover\:translate-x-56:hover{transform:translateX(14rem)}.xl\:hover\:translate-y-56:hover{transform:translateY(14rem)}.xl\:hover\:translate-x-60:hover{transform:translateX(15rem)}.xl\:hover\:translate-y-60:hover{transform:translateY(15rem)}.xl\:hover\:translate-x-64:hover{transform:translateX(16rem)}.xl\:hover\:translate-y-64:hover{transform:translateY(16rem)}.xl\:hover\:translate-x-68:hover{transform:translateX(17rem)}.xl\:hover\:translate-y-68:hover{transform:translateY(17rem)}.xl\:hover\:translate-x-px:hover{transform:translateX(1px)}.xl\:hover\:translate-y-px:hover{transform:translateY(1px)}.xl\:hover\:translate-x-0\.5:hover{transform:translateX(.125rem)}.xl\:hover\:translate-y-0\.5:hover{transform:translateY(.125rem)}.xl\:hover\:translate-x-1\.5:hover{transform:translateX(.375rem)}.xl\:hover\:translate-y-1\.5:hover{transform:translateY(.375rem)}.xl\:hover\:translate-x-2\.5:hover{transform:translateX(.625rem)}.xl\:hover\:translate-y-2\.5:hover{transform:translateY(.625rem)}.xl\:hover\:translate-x-7\.5:hover{transform:translateX(1.875rem)}.xl\:hover\:translate-y-7\.5:hover{transform:translateY(1.875rem)}.xl\:hover\:-translate-x-1:hover{transform:translateX(-.25rem)}.xl\:hover\:-translate-y-1:hover{transform:translateY(-.25rem)}.xl\:hover\:-translate-x-2:hover{transform:translateX(-.5rem)}.xl\:hover\:-translate-y-2:hover{transform:translateY(-.5rem)}.xl\:hover\:-translate-x-3:hover{transform:translateX(-.75rem)}.xl\:hover\:-translate-y-3:hover{transform:translateY(-.75rem)}.xl\:hover\:-translate-x-4:hover{transform:translateX(-1rem)}.xl\:hover\:-translate-y-4:hover{transform:translateY(-1rem)}.xl\:hover\:-translate-x-5:hover{transform:translateX(-1.25rem)}.xl\:hover\:-translate-y-5:hover{transform:translateY(-1.25rem)}.xl\:hover\:-translate-x-6:hover{transform:translateX(-1.5rem)}.xl\:hover\:-translate-y-6:hover{transform:translateY(-1.5rem)}.xl\:hover\:-translate-x-7:hover{transform:translateX(-1.75rem)}.xl\:hover\:-translate-y-7:hover{transform:translateY(-1.75rem)}.xl\:hover\:-translate-x-8:hover{transform:translateX(-2rem)}.xl\:hover\:-translate-y-8:hover{transform:translateY(-2rem)}.xl\:hover\:-translate-x-9:hover{transform:translateX(-2.25rem)}.xl\:hover\:-translate-y-9:hover{transform:translateY(-2.25rem)}.xl\:hover\:-translate-x-10:hover{transform:translateX(-2.5rem)}.xl\:hover\:-translate-y-10:hover{transform:translateY(-2.5rem)}.xl\:hover\:-translate-x-11:hover{transform:translateX(-2.75rem)}.xl\:hover\:-translate-y-11:hover{transform:translateY(-2.75rem)}.xl\:hover\:-translate-x-12:hover{transform:translateX(-3rem)}.xl\:hover\:-translate-y-12:hover{transform:translateY(-3rem)}.xl\:hover\:-translate-x-15:hover{transform:translateX(-3.75rem)}.xl\:hover\:-translate-y-15:hover{transform:translateY(-3.75rem)}.xl\:hover\:-translate-x-16:hover{transform:translateX(-4rem)}.xl\:hover\:-translate-y-16:hover{transform:translateY(-4rem)}.xl\:hover\:-translate-x-20:hover{transform:translateX(-5rem)}.xl\:hover\:-translate-y-20:hover{transform:translateY(-5rem)}.xl\:hover\:-translate-x-22:hover{transform:translateX(-5.5rem)}.xl\:hover\:-translate-y-22:hover{transform:translateY(-5.5rem)}.xl\:hover\:-translate-x-24:hover{transform:translateX(-6rem)}.xl\:hover\:-translate-y-24:hover{transform:translateY(-6rem)}.xl\:hover\:-translate-x-25:hover{transform:translateX(-6.25rem)}.xl\:hover\:-translate-y-25:hover{transform:translateY(-6.25rem)}.xl\:hover\:-translate-x-26:hover{transform:translateX(-6.5rem)}.xl\:hover\:-translate-y-26:hover{transform:translateY(-6.5rem)}.xl\:hover\:-translate-x-28:hover{transform:translateX(-8rem)}.xl\:hover\:-translate-y-28:hover{transform:translateY(-8rem)}.xl\:hover\:-translate-x-30:hover{transform:translateX(-8.5rem)}.xl\:hover\:-translate-y-30:hover{transform:translateY(-8.5rem)}.xl\:hover\:-translate-x-32:hover{transform:translateX(-9rem)}.xl\:hover\:-translate-y-32:hover{transform:translateY(-9rem)}.xl\:hover\:-translate-x-40:hover{transform:translateX(-10rem)}.xl\:hover\:-translate-y-40:hover{transform:translateY(-10rem)}.xl\:hover\:-translate-x-48:hover{transform:translateX(-12rem)}.xl\:hover\:-translate-y-48:hover{transform:translateY(-12rem)}.xl\:hover\:-translate-x-52:hover{transform:translateX(-13rem)}.xl\:hover\:-translate-y-52:hover{transform:translateY(-13rem)}.xl\:hover\:-translate-x-56:hover{transform:translateX(-14rem)}.xl\:hover\:-translate-y-56:hover{transform:translateY(-14rem)}.xl\:hover\:-translate-x-60:hover{transform:translateX(-15rem)}.xl\:hover\:-translate-y-60:hover{transform:translateY(-15rem)}.xl\:hover\:-translate-x-64:hover{transform:translateX(-16rem)}.xl\:hover\:-translate-y-64:hover{transform:translateY(-16rem)}.xl\:hover\:-translate-x-68:hover{transform:translateX(-17rem)}.xl\:hover\:-translate-y-68:hover{transform:translateY(-17rem)}.xl\:hover\:-translate-x-px:hover{transform:translateX(-1px)}.xl\:hover\:-translate-y-px:hover{transform:translateY(-1px)}.xl\:hover\:-translate-x-0\.5:hover{transform:translateX(-.125rem)}.xl\:hover\:-translate-y-0\.5:hover{transform:translateY(-.125rem)}.xl\:hover\:-translate-x-1\.5:hover{transform:translateX(-.375rem)}.xl\:hover\:-translate-y-1\.5:hover{transform:translateY(-.375rem)}.xl\:hover\:-translate-x-2\.5:hover{transform:translateX(-.625rem)}.xl\:hover\:-translate-y-2\.5:hover{transform:translateY(-.625rem)}.xl\:hover\:-translate-x-7\.5:hover{transform:translateX(-1.875rem)}.xl\:hover\:-translate-y-7\.5:hover{transform:translateY(-1.875rem)}.xl\:hover\:-translate-x-full:hover{transform:translateX(-100%)}.xl\:hover\:-translate-y-full:hover{transform:translateY(-100%)}.xl\:hover\:-translate-x-1\/2:hover{transform:translateX(-50%)}.xl\:hover\:-translate-y-1\/2:hover{transform:translateY(-50%)}.xl\:hover\:translate-x-1\/2:hover{transform:translateX(50%)}.xl\:hover\:translate-y-1\/2:hover{transform:translateY(50%)}.xl\:hover\:translate-x-full:hover{transform:translateX(100%)}.xl\:hover\:translate-y-full:hover{transform:translateY(100%)}.xl\:focus\:translate-x-0:focus{transform:translateX(0)}.xl\:focus\:translate-y-0:focus{transform:translateY(0)}.xl\:focus\:translate-x-1:focus{transform:translateX(.25rem)}.xl\:focus\:translate-y-1:focus{transform:translateY(.25rem)}.xl\:focus\:translate-x-2:focus{transform:translateX(.5rem)}.xl\:focus\:translate-y-2:focus{transform:translateY(.5rem)}.xl\:focus\:translate-x-3:focus{transform:translateX(.75rem)}.xl\:focus\:translate-y-3:focus{transform:translateY(.75rem)}.xl\:focus\:translate-x-4:focus{transform:translateX(1rem)}.xl\:focus\:translate-y-4:focus{transform:translateY(1rem)}.xl\:focus\:translate-x-5:focus{transform:translateX(1.25rem)}.xl\:focus\:translate-y-5:focus{transform:translateY(1.25rem)}.xl\:focus\:translate-x-6:focus{transform:translateX(1.5rem)}.xl\:focus\:translate-y-6:focus{transform:translateY(1.5rem)}.xl\:focus\:translate-x-7:focus{transform:translateX(1.75rem)}.xl\:focus\:translate-y-7:focus{transform:translateY(1.75rem)}.xl\:focus\:translate-x-8:focus{transform:translateX(2rem)}.xl\:focus\:translate-y-8:focus{transform:translateY(2rem)}.xl\:focus\:translate-x-9:focus{transform:translateX(2.25rem)}.xl\:focus\:translate-y-9:focus{transform:translateY(2.25rem)}.xl\:focus\:translate-x-10:focus{transform:translateX(2.5rem)}.xl\:focus\:translate-y-10:focus{transform:translateY(2.5rem)}.xl\:focus\:translate-x-11:focus{transform:translateX(2.75rem)}.xl\:focus\:translate-y-11:focus{transform:translateY(2.75rem)}.xl\:focus\:translate-x-12:focus{transform:translateX(3rem)}.xl\:focus\:translate-y-12:focus{transform:translateY(3rem)}.xl\:focus\:translate-x-15:focus{transform:translateX(3.75rem)}.xl\:focus\:translate-y-15:focus{transform:translateY(3.75rem)}.xl\:focus\:translate-x-16:focus{transform:translateX(4rem)}.xl\:focus\:translate-y-16:focus{transform:translateY(4rem)}.xl\:focus\:translate-x-20:focus{transform:translateX(5rem)}.xl\:focus\:translate-y-20:focus{transform:translateY(5rem)}.xl\:focus\:translate-x-22:focus{transform:translateX(5.5rem)}.xl\:focus\:translate-y-22:focus{transform:translateY(5.5rem)}.xl\:focus\:translate-x-24:focus{transform:translateX(6rem)}.xl\:focus\:translate-y-24:focus{transform:translateY(6rem)}.xl\:focus\:translate-x-25:focus{transform:translateX(6.25rem)}.xl\:focus\:translate-y-25:focus{transform:translateY(6.25rem)}.xl\:focus\:translate-x-26:focus{transform:translateX(6.5rem)}.xl\:focus\:translate-y-26:focus{transform:translateY(6.5rem)}.xl\:focus\:translate-x-28:focus{transform:translateX(8rem)}.xl\:focus\:translate-y-28:focus{transform:translateY(8rem)}.xl\:focus\:translate-x-30:focus{transform:translateX(8.5rem)}.xl\:focus\:translate-y-30:focus{transform:translateY(8.5rem)}.xl\:focus\:translate-x-32:focus{transform:translateX(9rem)}.xl\:focus\:translate-y-32:focus{transform:translateY(9rem)}.xl\:focus\:translate-x-40:focus{transform:translateX(10rem)}.xl\:focus\:translate-y-40:focus{transform:translateY(10rem)}.xl\:focus\:translate-x-48:focus{transform:translateX(12rem)}.xl\:focus\:translate-y-48:focus{transform:translateY(12rem)}.xl\:focus\:translate-x-52:focus{transform:translateX(13rem)}.xl\:focus\:translate-y-52:focus{transform:translateY(13rem)}.xl\:focus\:translate-x-56:focus{transform:translateX(14rem)}.xl\:focus\:translate-y-56:focus{transform:translateY(14rem)}.xl\:focus\:translate-x-60:focus{transform:translateX(15rem)}.xl\:focus\:translate-y-60:focus{transform:translateY(15rem)}.xl\:focus\:translate-x-64:focus{transform:translateX(16rem)}.xl\:focus\:translate-y-64:focus{transform:translateY(16rem)}.xl\:focus\:translate-x-68:focus{transform:translateX(17rem)}.xl\:focus\:translate-y-68:focus{transform:translateY(17rem)}.xl\:focus\:translate-x-px:focus{transform:translateX(1px)}.xl\:focus\:translate-y-px:focus{transform:translateY(1px)}.xl\:focus\:translate-x-0\.5:focus{transform:translateX(.125rem)}.xl\:focus\:translate-y-0\.5:focus{transform:translateY(.125rem)}.xl\:focus\:translate-x-1\.5:focus{transform:translateX(.375rem)}.xl\:focus\:translate-y-1\.5:focus{transform:translateY(.375rem)}.xl\:focus\:translate-x-2\.5:focus{transform:translateX(.625rem)}.xl\:focus\:translate-y-2\.5:focus{transform:translateY(.625rem)}.xl\:focus\:translate-x-7\.5:focus{transform:translateX(1.875rem)}.xl\:focus\:translate-y-7\.5:focus{transform:translateY(1.875rem)}.xl\:focus\:-translate-x-1:focus{transform:translateX(-.25rem)}.xl\:focus\:-translate-y-1:focus{transform:translateY(-.25rem)}.xl\:focus\:-translate-x-2:focus{transform:translateX(-.5rem)}.xl\:focus\:-translate-y-2:focus{transform:translateY(-.5rem)}.xl\:focus\:-translate-x-3:focus{transform:translateX(-.75rem)}.xl\:focus\:-translate-y-3:focus{transform:translateY(-.75rem)}.xl\:focus\:-translate-x-4:focus{transform:translateX(-1rem)}.xl\:focus\:-translate-y-4:focus{transform:translateY(-1rem)}.xl\:focus\:-translate-x-5:focus{transform:translateX(-1.25rem)}.xl\:focus\:-translate-y-5:focus{transform:translateY(-1.25rem)}.xl\:focus\:-translate-x-6:focus{transform:translateX(-1.5rem)}.xl\:focus\:-translate-y-6:focus{transform:translateY(-1.5rem)}.xl\:focus\:-translate-x-7:focus{transform:translateX(-1.75rem)}.xl\:focus\:-translate-y-7:focus{transform:translateY(-1.75rem)}.xl\:focus\:-translate-x-8:focus{transform:translateX(-2rem)}.xl\:focus\:-translate-y-8:focus{transform:translateY(-2rem)}.xl\:focus\:-translate-x-9:focus{transform:translateX(-2.25rem)}.xl\:focus\:-translate-y-9:focus{transform:translateY(-2.25rem)}.xl\:focus\:-translate-x-10:focus{transform:translateX(-2.5rem)}.xl\:focus\:-translate-y-10:focus{transform:translateY(-2.5rem)}.xl\:focus\:-translate-x-11:focus{transform:translateX(-2.75rem)}.xl\:focus\:-translate-y-11:focus{transform:translateY(-2.75rem)}.xl\:focus\:-translate-x-12:focus{transform:translateX(-3rem)}.xl\:focus\:-translate-y-12:focus{transform:translateY(-3rem)}.xl\:focus\:-translate-x-15:focus{transform:translateX(-3.75rem)}.xl\:focus\:-translate-y-15:focus{transform:translateY(-3.75rem)}.xl\:focus\:-translate-x-16:focus{transform:translateX(-4rem)}.xl\:focus\:-translate-y-16:focus{transform:translateY(-4rem)}.xl\:focus\:-translate-x-20:focus{transform:translateX(-5rem)}.xl\:focus\:-translate-y-20:focus{transform:translateY(-5rem)}.xl\:focus\:-translate-x-22:focus{transform:translateX(-5.5rem)}.xl\:focus\:-translate-y-22:focus{transform:translateY(-5.5rem)}.xl\:focus\:-translate-x-24:focus{transform:translateX(-6rem)}.xl\:focus\:-translate-y-24:focus{transform:translateY(-6rem)}.xl\:focus\:-translate-x-25:focus{transform:translateX(-6.25rem)}.xl\:focus\:-translate-y-25:focus{transform:translateY(-6.25rem)}.xl\:focus\:-translate-x-26:focus{transform:translateX(-6.5rem)}.xl\:focus\:-translate-y-26:focus{transform:translateY(-6.5rem)}.xl\:focus\:-translate-x-28:focus{transform:translateX(-8rem)}.xl\:focus\:-translate-y-28:focus{transform:translateY(-8rem)}.xl\:focus\:-translate-x-30:focus{transform:translateX(-8.5rem)}.xl\:focus\:-translate-y-30:focus{transform:translateY(-8.5rem)}.xl\:focus\:-translate-x-32:focus{transform:translateX(-9rem)}.xl\:focus\:-translate-y-32:focus{transform:translateY(-9rem)}.xl\:focus\:-translate-x-40:focus{transform:translateX(-10rem)}.xl\:focus\:-translate-y-40:focus{transform:translateY(-10rem)}.xl\:focus\:-translate-x-48:focus{transform:translateX(-12rem)}.xl\:focus\:-translate-y-48:focus{transform:translateY(-12rem)}.xl\:focus\:-translate-x-52:focus{transform:translateX(-13rem)}.xl\:focus\:-translate-y-52:focus{transform:translateY(-13rem)}.xl\:focus\:-translate-x-56:focus{transform:translateX(-14rem)}.xl\:focus\:-translate-y-56:focus{transform:translateY(-14rem)}.xl\:focus\:-translate-x-60:focus{transform:translateX(-15rem)}.xl\:focus\:-translate-y-60:focus{transform:translateY(-15rem)}.xl\:focus\:-translate-x-64:focus{transform:translateX(-16rem)}.xl\:focus\:-translate-y-64:focus{transform:translateY(-16rem)}.xl\:focus\:-translate-x-68:focus{transform:translateX(-17rem)}.xl\:focus\:-translate-y-68:focus{transform:translateY(-17rem)}.xl\:focus\:-translate-x-px:focus{transform:translateX(-1px)}.xl\:focus\:-translate-y-px:focus{transform:translateY(-1px)}.xl\:focus\:-translate-x-0\.5:focus{transform:translateX(-.125rem)}.xl\:focus\:-translate-y-0\.5:focus{transform:translateY(-.125rem)}.xl\:focus\:-translate-x-1\.5:focus{transform:translateX(-.375rem)}.xl\:focus\:-translate-y-1\.5:focus{transform:translateY(-.375rem)}.xl\:focus\:-translate-x-2\.5:focus{transform:translateX(-.625rem)}.xl\:focus\:-translate-y-2\.5:focus{transform:translateY(-.625rem)}.xl\:focus\:-translate-x-7\.5:focus{transform:translateX(-1.875rem)}.xl\:focus\:-translate-y-7\.5:focus{transform:translateY(-1.875rem)}.xl\:focus\:-translate-x-full:focus{transform:translateX(-100%)}.xl\:focus\:-translate-y-full:focus{transform:translateY(-100%)}.xl\:focus\:-translate-x-1\/2:focus{transform:translateX(-50%)}.xl\:focus\:-translate-y-1\/2:focus{transform:translateY(-50%)}.xl\:focus\:translate-x-1\/2:focus{transform:translateX(50%)}.xl\:focus\:translate-y-1\/2:focus{transform:translateY(50%)}.xl\:focus\:translate-x-full:focus{transform:translateX(100%)}.xl\:focus\:translate-y-full:focus{transform:translateY(100%)}.xl\:scale-0{transform:scale(0)}.xl\:scale-x-0{transform:scaleX(0)}.xl\:scale-y-0{transform:scaleY(0)}.xl\:scale-50{transform:scale(.5)}.xl\:scale-x-50{transform:scaleX(.5)}.xl\:scale-y-50{transform:scaleY(.5)}.xl\:scale-75{transform:scale(.75)}.xl\:scale-x-75{transform:scaleX(.75)}.xl\:scale-y-75{transform:scaleY(.75)}.xl\:scale-90{transform:scale(.9)}.xl\:scale-x-90{transform:scaleX(.9)}.xl\:scale-y-90{transform:scaleY(.9)}.xl\:scale-95{transform:scale(.95)}.xl\:scale-x-95{transform:scaleX(.95)}.xl\:scale-y-95{transform:scaleY(.95)}.xl\:scale-100{transform:scale(1)}.xl\:scale-x-100{transform:scaleX(1)}.xl\:scale-y-100{transform:scaleY(1)}.xl\:scale-105{transform:scale(1.05)}.xl\:scale-x-105{transform:scaleX(1.05)}.xl\:scale-y-105{transform:scaleY(1.05)}.xl\:scale-110{transform:scale(1.1)}.xl\:scale-x-110{transform:scaleX(1.1)}.xl\:scale-y-110{transform:scaleY(1.1)}.xl\:scale-125{transform:scale(1.25)}.xl\:scale-x-125{transform:scaleX(1.25)}.xl\:scale-y-125{transform:scaleY(1.25)}.xl\:scale-150{transform:scale(1.5)}.xl\:scale-x-150{transform:scaleX(1.5)}.xl\:scale-y-150{transform:scaleY(1.5)}.xl\:hover\:scale-0:hover{transform:scale(0)}.xl\:hover\:scale-x-0:hover{transform:scaleX(0)}.xl\:hover\:scale-y-0:hover{transform:scaleY(0)}.xl\:hover\:scale-50:hover{transform:scale(.5)}.xl\:hover\:scale-x-50:hover{transform:scaleX(.5)}.xl\:hover\:scale-y-50:hover{transform:scaleY(.5)}.xl\:hover\:scale-75:hover{transform:scale(.75)}.xl\:hover\:scale-x-75:hover{transform:scaleX(.75)}.xl\:hover\:scale-y-75:hover{transform:scaleY(.75)}.xl\:hover\:scale-90:hover{transform:scale(.9)}.xl\:hover\:scale-x-90:hover{transform:scaleX(.9)}.xl\:hover\:scale-y-90:hover{transform:scaleY(.9)}.xl\:hover\:scale-95:hover{transform:scale(.95)}.xl\:hover\:scale-x-95:hover{transform:scaleX(.95)}.xl\:hover\:scale-y-95:hover{transform:scaleY(.95)}.xl\:hover\:scale-100:hover{transform:scale(1)}.xl\:hover\:scale-x-100:hover{transform:scaleX(1)}.xl\:hover\:scale-y-100:hover{transform:scaleY(1)}.xl\:hover\:scale-105:hover{transform:scale(1.05)}.xl\:hover\:scale-x-105:hover{transform:scaleX(1.05)}.xl\:hover\:scale-y-105:hover{transform:scaleY(1.05)}.xl\:hover\:scale-110:hover{transform:scale(1.1)}.xl\:hover\:scale-x-110:hover{transform:scaleX(1.1)}.xl\:hover\:scale-y-110:hover{transform:scaleY(1.1)}.xl\:hover\:scale-125:hover{transform:scale(1.25)}.xl\:hover\:scale-x-125:hover{transform:scaleX(1.25)}.xl\:hover\:scale-y-125:hover{transform:scaleY(1.25)}.xl\:hover\:scale-150:hover{transform:scale(1.5)}.xl\:hover\:scale-x-150:hover{transform:scaleX(1.5)}.xl\:hover\:scale-y-150:hover{transform:scaleY(1.5)}.xl\:focus\:scale-0:focus{transform:scale(0)}.xl\:focus\:scale-x-0:focus{transform:scaleX(0)}.xl\:focus\:scale-y-0:focus{transform:scaleY(0)}.xl\:focus\:scale-50:focus{transform:scale(.5)}.xl\:focus\:scale-x-50:focus{transform:scaleX(.5)}.xl\:focus\:scale-y-50:focus{transform:scaleY(.5)}.xl\:focus\:scale-75:focus{transform:scale(.75)}.xl\:focus\:scale-x-75:focus{transform:scaleX(.75)}.xl\:focus\:scale-y-75:focus{transform:scaleY(.75)}.xl\:focus\:scale-90:focus{transform:scale(.9)}.xl\:focus\:scale-x-90:focus{transform:scaleX(.9)}.xl\:focus\:scale-y-90:focus{transform:scaleY(.9)}.xl\:focus\:scale-95:focus{transform:scale(.95)}.xl\:focus\:scale-x-95:focus{transform:scaleX(.95)}.xl\:focus\:scale-y-95:focus{transform:scaleY(.95)}.xl\:focus\:scale-100:focus{transform:scale(1)}.xl\:focus\:scale-x-100:focus{transform:scaleX(1)}.xl\:focus\:scale-y-100:focus{transform:scaleY(1)}.xl\:focus\:scale-105:focus{transform:scale(1.05)}.xl\:focus\:scale-x-105:focus{transform:scaleX(1.05)}.xl\:focus\:scale-y-105:focus{transform:scaleY(1.05)}.xl\:focus\:scale-110:focus{transform:scale(1.1)}.xl\:focus\:scale-x-110:focus{transform:scaleX(1.1)}.xl\:focus\:scale-y-110:focus{transform:scaleY(1.1)}.xl\:focus\:scale-125:focus{transform:scale(1.25)}.xl\:focus\:scale-x-125:focus{transform:scaleX(1.25)}.xl\:focus\:scale-y-125:focus{transform:scaleY(1.25)}.xl\:focus\:scale-150:focus{transform:scale(1.5)}.xl\:focus\:scale-x-150:focus{transform:scaleX(1.5)}.xl\:focus\:scale-y-150:focus{transform:scaleY(1.5)}.xl\:rotate-0{transform:rotate(0)}.xl\:rotate-90{transform:rotate(90deg)}.xl\:rotate-135{transform:rotate(135deg)}.xl\:rotate-180{transform:rotate(180deg)}.xl\:-rotate-180{transform:rotate(-180deg)}.xl\:-rotate-135{transform:rotate(-135deg)}.xl\:-rotate-90{transform:rotate(-90deg)}.xl\:hover\:rotate-0:hover{transform:rotate(0)}.xl\:hover\:rotate-90:hover{transform:rotate(90deg)}.xl\:hover\:rotate-135:hover{transform:rotate(135deg)}.xl\:hover\:rotate-180:hover{transform:rotate(180deg)}.xl\:hover\:-rotate-180:hover{transform:rotate(-180deg)}.xl\:hover\:-rotate-135:hover{transform:rotate(-135deg)}.xl\:hover\:-rotate-90:hover{transform:rotate(-90deg)}.xl\:focus\:rotate-0:focus{transform:rotate(0)}.xl\:focus\:rotate-90:focus{transform:rotate(90deg)}.xl\:focus\:rotate-135:focus{transform:rotate(135deg)}.xl\:focus\:rotate-180:focus{transform:rotate(180deg)}.xl\:focus\:-rotate-180:focus{transform:rotate(-180deg)}.xl\:focus\:-rotate-135:focus{transform:rotate(-135deg)}.xl\:focus\:-rotate-90:focus{transform:rotate(-90deg)}.xl\:skew-x-0{transform:skewX(0)}.xl\:skew-y-0{transform:skewY(0)}.xl\:skew-x-1{transform:skewX(1deg)}.xl\:skew-y-1{transform:skewY(1deg)}.xl\:skew-x-2{transform:skewX(2deg)}.xl\:skew-y-2{transform:skewY(2deg)}.xl\:skew-x-3{transform:skewX(3deg)}.xl\:skew-y-3{transform:skewY(3deg)}.xl\:skew-x-6{transform:skewX(6deg)}.xl\:skew-y-6{transform:skewY(6deg)}.xl\:skew-x-12{transform:skewX(12deg)}.xl\:skew-y-12{transform:skewY(12deg)}.xl\:-skew-x-12{transform:skewX(-12deg)}.xl\:-skew-y-12{transform:skewY(-12deg)}.xl\:-skew-x-6{transform:skewX(-6deg)}.xl\:-skew-y-6{transform:skewY(-6deg)}.xl\:-skew-x-3{transform:skewX(-3deg)}.xl\:-skew-y-3{transform:skewY(-3deg)}.xl\:-skew-x-2{transform:skewX(-2deg)}.xl\:-skew-y-2{transform:skewY(-2deg)}.xl\:-skew-x-1{transform:skewX(-1deg)}.xl\:-skew-y-1{transform:skewY(-1deg)}.xl\:hover\:skew-x-0:hover{transform:skewX(0)}.xl\:hover\:skew-y-0:hover{transform:skewY(0)}.xl\:hover\:skew-x-1:hover{transform:skewX(1deg)}.xl\:hover\:skew-y-1:hover{transform:skewY(1deg)}.xl\:hover\:skew-x-2:hover{transform:skewX(2deg)}.xl\:hover\:skew-y-2:hover{transform:skewY(2deg)}.xl\:hover\:skew-x-3:hover{transform:skewX(3deg)}.xl\:hover\:skew-y-3:hover{transform:skewY(3deg)}.xl\:hover\:skew-x-6:hover{transform:skewX(6deg)}.xl\:hover\:skew-y-6:hover{transform:skewY(6deg)}.xl\:hover\:skew-x-12:hover{transform:skewX(12deg)}.xl\:hover\:skew-y-12:hover{transform:skewY(12deg)}.xl\:hover\:-skew-x-12:hover{transform:skewX(-12deg)}.xl\:hover\:-skew-y-12:hover{transform:skewY(-12deg)}.xl\:hover\:-skew-x-6:hover{transform:skewX(-6deg)}.xl\:hover\:-skew-y-6:hover{transform:skewY(-6deg)}.xl\:hover\:-skew-x-3:hover{transform:skewX(-3deg)}.xl\:hover\:-skew-y-3:hover{transform:skewY(-3deg)}.xl\:hover\:-skew-x-2:hover{transform:skewX(-2deg)}.xl\:hover\:-skew-y-2:hover{transform:skewY(-2deg)}.xl\:hover\:-skew-x-1:hover{transform:skewX(-1deg)}.xl\:hover\:-skew-y-1:hover{transform:skewY(-1deg)}.xl\:focus\:skew-x-0:focus{transform:skewX(0)}.xl\:focus\:skew-y-0:focus{transform:skewY(0)}.xl\:focus\:skew-x-1:focus{transform:skewX(1deg)}.xl\:focus\:skew-y-1:focus{transform:skewY(1deg)}.xl\:focus\:skew-x-2:focus{transform:skewX(2deg)}.xl\:focus\:skew-y-2:focus{transform:skewY(2deg)}.xl\:focus\:skew-x-3:focus{transform:skewX(3deg)}.xl\:focus\:skew-y-3:focus{transform:skewY(3deg)}.xl\:focus\:skew-x-6:focus{transform:skewX(6deg)}.xl\:focus\:skew-y-6:focus{transform:skewY(6deg)}.xl\:focus\:skew-x-12:focus{transform:skewX(12deg)}.xl\:focus\:skew-y-12:focus{transform:skewY(12deg)}.xl\:focus\:-skew-x-12:focus{transform:skewX(-12deg)}.xl\:focus\:-skew-y-12:focus{transform:skewY(-12deg)}.xl\:focus\:-skew-x-6:focus{transform:skewX(-6deg)}.xl\:focus\:-skew-y-6:focus{transform:skewY(-6deg)}.xl\:focus\:-skew-x-3:focus{transform:skewX(-3deg)}.xl\:focus\:-skew-y-3:focus{transform:skewY(-3deg)}.xl\:focus\:-skew-x-2:focus{transform:skewX(-2deg)}.xl\:focus\:-skew-y-2:focus{transform:skewY(-2deg)}.xl\:focus\:-skew-x-1:focus{transform:skewX(-1deg)}.xl\:focus\:-skew-y-1:focus{transform:skewY(-1deg)}.xl\:transform-border{transform-box:border-box}.xl\:transform-fill{transform-box:fill-box}.xl\:transform-view{transform-box:view-box}} + +/*! @docsearch/css 3.3.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,0.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,0.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,0.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,0.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,0.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,0.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,0.5),0 -4px 8px 0 rgba(0,0,0,0.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input:-ms-input-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{-webkit-animation:none;animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{-webkit-animation:fade-in .1s ease-in forwards;animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:focus{outline:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:-webkit-sticky;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.DocSearch{--docsearch-primary-color:#0075db;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color)}a.symbol-container{--text-opacity:1;color:#507192;color:rgba(80,113,146,var(--text-opacity));position:relative;text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;padding-left:.5rem;padding-right:.5rem;border-radius:.15rem;margin-right:.25rem;display:inline-flex;align-items:center;transition:all ease-in var(--Global-transition-duration)}a.symbol-container>span{display:flex}a.symbol-container.-list{font-size:.875rem}a.symbol-container.-list:hover{color:#0075db;background-color:#fff}a.symbol-container .symbol{transform:translateY(-1px)}a.symbol-container.-bubble{font-size:.875rem;background:rgba(27,31,35,.05);padding-top:1px;padding-bottom:1px}a.symbol-container.-bubble:hover{color:#14a5c2}a.symbol-container.-bubble .symbol{transform:scale(.9)}ul li a.symbol-container.-bubble{padding-top:0;padding-bottom:0;margin-top:1px;margin-bottom:1px}.symbol{display:none;font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace;border-radius:.15rem;box-shadow:0 1px 2px rgba(10,16,20,.24);color:#fff;font-size:.625rem;text-align:center;margin-right:.5rem;width:1rem;height:1rem;line-height:1.1rem}.symbol.class{background-color:#0e346c;display:inline-block}.symbol.class:before{content:"C"}.symbol.interface{background-color:#007571;display:inline-block}.symbol.interface:before{content:"I"}.symbol.decorator{background-color:#0075db;display:inline-block;line-height:1rem}.symbol.decorator:before{content:"@"}.symbol.type{--bg-opacity:1;background-color:#7cb342;background-color:rgba(124,179,66,var(--bg-opacity));display:inline-block}.symbol.type:before{content:"T"}.symbol.provider,.symbol.service{--bg-opacity:1;background-color:#d81b60;background-color:rgba(216,27,96,var(--bg-opacity));display:inline-block}.symbol.provider:before,.symbol.service:before{content:"S"}.symbol.function{background-color:#14a33a;display:inline-block}.symbol.function:before{content:"F"}.symbol.const{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity));display:inline-block}.symbol.const:before{content:"K"}.symbol.enum{background-color:#d78737;display:inline-block}.symbol.enum:before{content:"E"}.search-box{width:35px;margin-left:.25rem}.search-box.focused{margin:0;position:fixed;background:#fff;top:0;left:0;width:100vw;height:100vh;z-index:10000}.search-box.focused>label{padding-left:1rem;padding-right:1rem}.search-box.focused .search-dropdown{padding-top:1.25rem}@media (min-width:40.01em){.search-box,.search-box.focused{margin-left:.25rem;position:relative;background:transparent;top:auto;left:auto;width:auto;height:auto;z-index:0}.search-box.focused>label,.search-box>label{padding-left:0;padding-right:0}.search-box.focused .search-dropdown,.search-box .search-dropdown{background-color:#fff;opacity:0;left:0;border-radius:1rem;border-top-left-radius:.3125rem;min-width:200px;display:block!important;visibility:hidden;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;bottom:0;transform:translateY(100%);padding:.5rem 0;text-align:left;white-space:nowrap;margin:-10px 0 0;transition:all .25s ease;box-shadow:0 10px 20px -10px rgba(0,0,0,.1)}.search-box.dropdown-wrapper.-click.open .search-dropdown{transform:translateY(calc(100% + 10px))!important;visibility:visible!important;opacity:1!important}}.dropdown-wrapper:after{content:"";position:absolute;bottom:-12px;width:100%;height:20px;background:transparent;display:none}.dropdown-wrapper.-click.open:after,.dropdown-wrapper.-hover:hover:after{display:block}.dropdown-wrapper .nav-dropdown{background-color:#fff;opacity:0;left:0;border-radius:1rem;border-top-left-radius:.3125rem;min-width:200px;display:block!important;visibility:hidden;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;bottom:0;transform:translateY(100%);padding:.5rem 0;text-align:left;white-space:nowrap;margin:-10px 0 0;transition:all .25s ease;box-shadow:0 10px 20px -10px rgba(0,0,0,.1)}.dropdown-wrapper.-click.open .nav-dropdown,.dropdown-wrapper.-hover:hover .nav-dropdown{transform:translateY(calc(100% + 10px))!important;visibility:visible!important;opacity:1!important}.dropdown-wrapper>a .bx-chevron-down{display:block;transition:all .2s ease;transform-origin:center}.dropdown-wrapper>a:hover{opacity:1;color:#14a5c2}.dropdown-wrapper>a:hover .bx-chevron-down{transform:rotate(-180deg)}.navbar{z-index:100}.navbar-box-shadow{box-shadow:0 0 15px 0 rgba(0,0,0,.04)}a.sidebar-link:after{background-color:#0075db;position:absolute;left:0;content:"";top:50%;transform:translateY(-50%);width:5px;height:0;transition:all .25s ease;border-radius:0 5px 5px 0}a.sidebar-link.active:after{height:30px}.share ul{top:0;transform:translateY(5px)}.share:hover ul{opacity:1;visibility:visible;transform:translateY(0)}.share ul li a{display:flex;align-items:center;justify-content:center;border-radius:.3125rem;transition-property:all;padding:.25rem}.page-header-container{transition:all .5s ease;height:100px}.page-header.-fixed>div{left:0;right:0}@media (min-width:50.01em){.page-header-container{height:200px}}.page-header.-fixed:after{content:"";display:block;height:200px}.page-header.-fixed .page-header-container{height:45px}.page-sidebar-sub-headers{position:relative}.page-sidebar-sub-headers:after{position:absolute;left:0;--bg-opacity:1;background-color:#d4d1d1;background-color:rgba(212,209,209,var(--bg-opacity));content:"";top:10px;bottom:10px;width:2px}.page-sidebar-link{position:relative;display:block;padding-top:.25rem;padding-bottom:.25rem;font-size:.875rem;padding-left:1.5rem}.page-sidebar-link,.page-sidebar-link:before{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-duration:.5s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.page-sidebar-link:before{border-radius:50%;background-color:#fff;display:inline-block;position:absolute;z-index:2;--border-opacity:1;border-color:#d4d1d1;border-color:rgba(212,209,209,var(--border-opacity));border-width:2px;--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity));transform:translateY(-50%);content:"";left:-3px;width:8px;height:8px;top:50%}.page-sidebar-link.active{color:#0075db;font-weight:700}.page-sidebar-link.active:before{background-color:#0075db;border-color:#0075db}.page-sidebar{padding-left:2.5rem;right:20px;width:250px}.page-sidebar a:hover:not(.active){color:#14a5c2}.other-topics a{transition:all .5s ease-in-out;text-decoration:none}.fade-tab-enter-active,.fade-tab-leave-active{transition:all .3s}.fade-tab-enter,.fade-tab-leave-to{top:0;opacity:0;position:absolute!important;transform:translate3d(-100%,0,0)}.fade-tab-leave-to{top:0;opacity:0;position:absolute!important;transform:translate3d(100%,0,0)}.fade-tab-invert-leave-active,// invert .fade-tab-invert-enter-active{transition:all .3s}.fade-tab-invert-enter,.fade-tab-invert-leave-to{top:0;opacity:0;position:absolute!important;transform:translate3d(100%,0,0)}.fade-tab-invert-leave-to{top:0;opacity:0;position:absolute!important;transform:translate3d(-100%,0,0)}.fade-tab-vertical-leave-active,// position .fade-tab-vertical-enter-active{transition:all .3s}.fade-tab-vertical-enter{top:0;opacity:0;position:absolute!important;transform:translate3d(0,100%,0)}.fade-tab-vertical-leave-to{top:0;opacity:0;position:absolute!important;transform:translate3d(0,-100%,0)}.fade-tab-vertical-invert-enter-active,.fade-tab-vertical-invert-leave-active{transition:all .3s}.fade-tab-vertical-invert-enter{top:0;opacity:0;position:absolute!important;transform:translate3d(0,-100%,0)}.fade-tab-vertical-invert-leave-to{top:0;opacity:0;position:absolute!important;transform:translate3d(0,100%,0)!important}.content__default .tabs,.tabs{width:100%;overflow:hidden;position:relative;border-radius:.3125rem}.content__default .tabs.-code.text-gray-darker,.tabs.-code.text-gray-darker{--text-opacity:1;color:#f7f7f7;color:rgba(247,247,247,var(--text-opacity))}.content__default .tabs.-code .tabs__body.bg-gray-lighter,.tabs.-code .tabs__body.bg-gray-lighter{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.content__default .tabs.-code .tabs__header.bg-gray-lighter-active,.tabs.-code .tabs__header.bg-gray-lighter-active{--bg-opacity:1;background-color:#504747;background-color:rgba(80,71,71,var(--bg-opacity))}.content__default .tabs.-code .tabs__header .tabs__header--btn-line.bg-gray-darker,.tabs.-code .tabs__header .tabs__header--btn-line.bg-gray-darker{background-color:#fff}.content__default .tabs.-code .tab-body>div[class*=language-],.tabs.-code .tab-body>div[class*=language-]{border-radius:0 .3125rem;margin:0}.content__default .tabs .tab-body,.tabs .tab-body{position:relative;width:100%;display:block}.content__default .tabs__body,.tabs__body{position:relative;display:block;overflow:hidden}.content__default .tabs__header,.tabs__header{position:relative;font-size:.875rem}.content__default .tabs__header--ul,.tabs__header--ul{position:relative;width:100%;justify-content:flex-start;margin:0;list-style:none;line-height:normal}.content__default .tabs__header--ul li,.tabs__header--ul li{position:relative}.content__default .tabs__header--ul.-center,.tabs__header--ul.-center{justify-content:center}.content__default .tabs__header--ul.-right,.tabs__header--ul.-right{justify-content:flex-end}.content__default .tabs__header--ul.-fixed,.tabs__header--ul.-fixed{justify-content:space-between;flex-wrap:nowrap}.content__default .tabs__header--ul.-fixed li,.tabs__header--ul.-fixed li{width:100%}.content__default .tabs__header--li,.tabs__header--li{display:block;position:relative}.content__default .tabs__header button,.tabs__header button{color:inherit;font-family:inherit}.content__default .tabs__header button:disabled,.tabs__header button:disabled{opacity:.5;cursor:default;pointer-events:none}.content__default .tabs__header--btn,.tabs__header--btn{display:block;display:flex;align-items:center;position:relative;width:100%;background-color:transparent;padding:.75rem;margin:0;border-width:0;cursor:pointer;z-index:2;transition:all ease-in var(--Global-transition-duration);box-sizing:border-box}.content__default .tabs__header--btn:hover:not(:disabled),.tabs__header--btn:hover:not(:disabled){color:inherit}.content__default .tabs__header--btn-icon+span,.tabs__header--btn-icon+span{padding-left:9px}.content__default .tabs.-position-left,.tabs.-position-left{display:flex}.content__default .tabs.-position-left .tabs__header,.tabs.-position-left .tabs__header{display:block}.content__default .tabs.-position-left .tabs__header--ul,.tabs.-position-left .tabs__header--ul{padding-top:.5rem;padding-bottom:.5rem;width:auto;display:block}.content__default .tabs.-position-left .tabs__header .tabs__header--btn-line,.tabs.-position-left .tabs__header .tabs__header--btn-line{position:absolute;transition:all ease-in var(--Global-transition-duration);top:50%;transform:translateY(-50%);width:2px;left:0;height:0}.content__default .tabs.-position-left .tabs__header li.active .tabs__header--btn-line,.tabs.-position-left .tabs__header li.active .tabs__header--btn-line{height:100%}.content__default .tabs.-position-right,.tabs.-position-right{display:flex}.content__default .tabs.-position-right .tabs__header,.tabs.-position-right .tabs__header{display:block;order:2}.content__default .tabs.-position-right .tabs__header--ul,.tabs.-position-right .tabs__header--ul{padding-top:.5rem;padding-bottom:.5rem;width:auto;display:block}.content__default .tabs.-position-right .tabs__header .tabs__header--btn-line,.tabs.-position-right .tabs__header .tabs__header--btn-line{position:absolute;transition:all ease-in var(--Global-transition-duration);top:50%;transform:translateY(-50%);width:2px;right:0;height:0}.content__default .tabs.-position-right .tabs__header li.active .tabs__header--btn-line,.tabs.-position-right .tabs__header li.active .tabs__header--btn-line{height:100%}.content__default .tabs.-position-top .tabs__header--ul,.tabs.-position-top .tabs__header--ul{padding-left:.5rem;padding-right:.5rem;display:flex;flex-wrap:wrap}.content__default .tabs.-position-top .tabs__header .tabs__header--btn-line,.tabs.-position-top .tabs__header .tabs__header--btn-line{position:absolute;transition:all ease-in var(--Global-transition-duration);left:50%;transform:translate(-50%);height:2px;bottom:0;width:0}.content__default .tabs.-position-top .tabs__header li.active .tabs__header--btn-line,.tabs.-position-top .tabs__header li.active .tabs__header--btn-line{width:100%}.content__default .tabs.-position-bottom,.tabs.-position-bottom{display:flex;flex-direction:column}.content__default .tabs.-position-bottom .tabs__header,.tabs.-position-bottom .tabs__header{padding-left:.5rem;padding-right:.5rem;display:block;order:2}.content__default .tabs.-position-bottom .tabs__header--ul,.tabs.-position-bottom .tabs__header--ul{display:flex;flex-wrap:wrap}.content__default .tabs.-position-bottom .tabs__header li.active .tabs__header--btn-line,.tabs.-position-bottom .tabs__header li.active .tabs__header--btn-line{width:100%}.content__default .tabs.-position-bottom .tabs__header .tabs__header--btn-line,.tabs.-position-bottom .tabs__header .tabs__header--btn-line{position:absolute;transition:all ease-in var(--Global-transition-duration);left:50%;transform:translate(-50%);height:2px;top:0;width:0}.hero-banner{min-height:400px;height:70vh}.select-dropdown li{border-radius:.3125rem;padding-left:.5rem;padding-right:.5rem;display:flex;align-items:center;cursor:pointer;font-size:14px;line-height:32px;margin:0;position:relative;transition:all .2s}.select-dropdown li:hover{color:#14a5c2;--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.select-dropdown li.selected{color:#0075db}.select-dropdown li.selected:hover{color:#14a5c2;--bg-opacity:1;background-color:#f7f7f7;background-color:rgba(247,247,247,var(--bg-opacity))}.select-dropdown li .symbol.all{display:block;opacity:0}.gist{font-size:16px;color:#333;text-align:left; + /*! + * GitHub Light v0.4.1 + * Copyright (c) 2012 - 2017 GitHub, Inc. + * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE) + */direction:ltr}.gist .markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.5;word-wrap:break-word}.gist .markdown-body:before{display:table;content:""}.gist .markdown-body:after{display:table;clear:both;content:""}.gist .markdown-body>:first-child{margin-top:0!important}.gist .markdown-body>:last-child{margin-bottom:0!important}.gist .markdown-body a:not([href]){color:inherit;text-decoration:none}.gist .markdown-body .absent{color:#cb2431}.gist .markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.gist .markdown-body .anchor:focus{outline:none}.gist .markdown-body blockquote,.gist .markdown-body dl,.gist .markdown-body ol,.gist .markdown-body p,.gist .markdown-body pre,.gist .markdown-body table,.gist .markdown-body ul{margin-top:0;margin-bottom:16px}.gist .markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.gist .markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.gist .markdown-body blockquote>:first-child{margin-top:0}.gist .markdown-body blockquote>:last-child{margin-bottom:0}.gist .markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.gist .markdown-body h1,.gist .markdown-body h2,.gist .markdown-body h3,.gist .markdown-body h4,.gist .markdown-body h5,.gist .markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.gist .markdown-body h1 .octicon-link,.gist .markdown-body h2 .octicon-link,.gist .markdown-body h3 .octicon-link,.gist .markdown-body h4 .octicon-link,.gist .markdown-body h5 .octicon-link,.gist .markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.gist .markdown-body h1:hover .anchor,.gist .markdown-body h2:hover .anchor,.gist .markdown-body h3:hover .anchor,.gist .markdown-body h4:hover .anchor,.gist .markdown-body h5:hover .anchor,.gist .markdown-body h6:hover .anchor{text-decoration:none}.gist .markdown-body h1:hover .anchor .octicon-link,.gist .markdown-body h2:hover .anchor .octicon-link,.gist .markdown-body h3:hover .anchor .octicon-link,.gist .markdown-body h4:hover .anchor .octicon-link,.gist .markdown-body h5:hover .anchor .octicon-link,.gist .markdown-body h6:hover .anchor .octicon-link{visibility:visible}.gist .markdown-body h1 code,.gist .markdown-body h1 tt,.gist .markdown-body h2 code,.gist .markdown-body h2 tt,.gist .markdown-body h3 code,.gist .markdown-body h3 tt,.gist .markdown-body h4 code,.gist .markdown-body h4 tt,.gist .markdown-body h5 code,.gist .markdown-body h5 tt,.gist .markdown-body h6 code,.gist .markdown-body h6 tt{font-size:inherit}.gist .markdown-body h1{font-size:2em}.gist .markdown-body h1,.gist .markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eaecef}.gist .markdown-body h2{font-size:1.5em}.gist .markdown-body h3{font-size:1.25em}.gist .markdown-body h4{font-size:1em}.gist .markdown-body h5{font-size:.875em}.gist .markdown-body h6{font-size:.85em;color:#6a737d}.gist .markdown-body ol,.gist .markdown-body ul{padding-left:2em}.gist .markdown-body ol.no-list,.gist .markdown-body ul.no-list{padding:0;list-style-type:none}.gist .markdown-body ol ol,.gist .markdown-body ol ul,.gist .markdown-body ul ol,.gist .markdown-body ul ul{margin-top:0;margin-bottom:0}.gist .markdown-body li{word-wrap:break-all}.gist .markdown-body li>p{margin-top:16px}.gist .markdown-body li+li{margin-top:.25em}.gist .markdown-body dl{padding:0}.gist .markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.gist .markdown-body dl dd{padding:0 16px;margin-bottom:16px}.gist .markdown-body table{display:block;width:100%;overflow:auto}.gist .markdown-body table th{font-weight:600}.gist .markdown-body table td,.gist .markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.gist .markdown-body table tr{background-color:#fff;border:0;border-top:1px solid #c6cbd1}.gist .markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.gist .markdown-body table img{background-color:transparent}.gist .markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.gist .markdown-body img[align=right]{padding-left:20px}.gist .markdown-body img[align=left]{padding-right:20px}.gist .markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.gist .markdown-body span.frame{display:block;overflow:hidden}.gist .markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #dfe2e5}.gist .markdown-body span.frame span img{display:block;float:left}.gist .markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#24292e}.gist .markdown-body span.align-center{display:block;overflow:hidden;clear:both}.gist .markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.gist .markdown-body span.align-center span img{margin:0 auto;text-align:center}.gist .markdown-body span.align-right{display:block;overflow:hidden;clear:both}.gist .markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.gist .markdown-body span.align-right span img{margin:0;text-align:right}.gist .markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.gist .markdown-body span.float-left span{margin:13px 0 0}.gist .markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.gist .markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.gist .markdown-body code,.gist .markdown-body tt{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.gist .markdown-body code br,.gist .markdown-body tt br{display:none}.gist .markdown-body del code{text-decoration:inherit}.gist .markdown-body pre{word-wrap:normal}.gist .markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.gist .markdown-body .highlight{margin-bottom:16px}.gist .markdown-body .highlight pre{margin-bottom:0;word-break:normal}.gist .markdown-body .highlight pre,.gist .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}.gist .markdown-body pre code,.gist .markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.gist .markdown-body .csv-data td,.gist .markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.gist .markdown-body .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.gist .markdown-body .csv-data tr{border-top:0}.gist .markdown-body .csv-data th{font-weight:600;background:#f6f8fa;border-top:0}.gist .pl-c{color:#6a737d}.gist .pl-c1,.gist .pl-s .pl-v{color:#2aa198}.gist .pl-e,.gist .pl-en{color:#6f42c1}.gist .pl-s .pl-s1,.gist .pl-smi{color:#24292e}.gist .pl-ent{color:#22863a}.gist .pl-k{color:#a11}.gist .pl-pds,.gist .pl-s,.gist .pl-s .pl-pse .pl-s1,.gist .pl-sr,.gist .pl-sr .pl-cce,.gist .pl-sr .pl-sra,.gist .pl-sr .pl-sre{color:#2aa198}.gist .pl-smw,.gist .pl-v{color:#e36209}.gist .pl-bu{color:#b31d28}.gist .pl-ii{color:#fafbfc;background-color:#b31d28}.gist .pl-c2{color:#fafbfc;background-color:#d73a49}.gist .pl-c2:before{content:"^M"}.gist .pl-sr .pl-cce{font-weight:700;color:#22863a}.gist .pl-ml{color:#735c0f}.gist .pl-mh,.gist .pl-mh .pl-en,.gist .pl-ms{font-weight:700;color:#005cc5}.gist .pl-mi{font-style:italic;color:#24292e}.gist .pl-mb{font-weight:700;color:#24292e}.gist .pl-md{color:#b31d28;background-color:#ffeef0}.gist .pl-mi1{color:#22863a;background-color:#f0fff4}.gist .pl-mc{color:#e36209;background-color:#ffebda}.gist .pl-mi2{color:#f6f8fa;background-color:#005cc5}.gist .pl-mdr{font-weight:700;color:#6f42c1}.gist .pl-ba{color:#586069}.gist .pl-sg{color:#959da5}.gist .pl-corl{text-decoration:underline;color:#032f62}.gist .breadcrumb{margin-bottom:10px;font-size:18px;color:#586069}.gist .breadcrumb .separator:after,.gist .breadcrumb .separator:before{content:" "}.gist .breadcrumb strong.final-path{color:#24292e}.gist .breadcrumb .zeroclipboard-button{display:inline-block;margin-left:5px}.gist .breadcrumb .repo-root{font-weight:600}.gist .breadcrumb .octicon{vertical-align:-2px}.gist .editor-code-of-conduct-template,.gist .editor-gitignore-template,.gist .editor-license-template{position:relative;top:3px;display:block;float:right;font-size:14px}.gist .editor-code-of-conduct-template .select-menu-git-ignore,.gist .editor-gitignore-template .select-menu-git-ignore,.gist .editor-license-template .select-menu-git-ignore{right:0}.gist .editor-abort{display:inline;font-size:14px}.gist .blob-interaction-bar{position:relative;background-color:#f2f2f2;border-bottom:1px solid #e5e5e5}.gist .blob-interaction-bar:before{display:table;content:""}.gist .blob-interaction-bar:after{display:table;clear:both;content:""}.gist .blob-interaction-bar .octicon-search{position:absolute;top:10px;left:10px;font-size:12px;color:#586069}.gist .blob-filter{width:100%;padding:4px 20px 5px 30px;font-size:12px;border:0;border-radius:0;outline:none}.gist .blob-filter:focus{outline:none}.gist .html-blob{margin-bottom:15px}.gist .TagsearchPopover-content{width:inherit;max-width:600px}.gist .license-summary-octicon{color:#959da5}.gist .rule-type-permissions{color:#28a745}.gist .rule-type-conditions{color:#0366d6}.gist .rule-type-limitations{color:#d73a49}.gist .blob-wrapper{overflow-x:auto;overflow-y:hidden;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.gist .blob-wrapper table{background:#f8f8f8}.gist .blob-wrapper table tbody tr{background:transparent}.gist .blob-wrapper-embedded{max-height:240px;overflow-y:auto}.gist .diff-table{width:100%;border-collapse:separate}.gist .diff-table .line-comments{padding:10px;vertical-align:top;border-top:1px solid #e1e4e8}.gist .diff-table .line-comments:first-child+.empty-cell{border-left-width:1px}.gist .diff-table tr:not(:last-child) .line-comments{border-top:1px solid #e1e4e8;border-bottom:1px solid #e1e4e8}.gist .blob-num{width:1%;min-width:50px;padding-right:10px;padding-left:10px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;line-height:20px;color:rgba(27,31,35,.3);text-align:right;white-space:nowrap;vertical-align:top;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.gist .blob-num:hover{color:rgba(27,31,35,.6)}.gist .blob-num:before{content:attr(data-line-number)}.gist .blob-num.non-expandable{cursor:default}.gist .blob-num.non-expandable:hover{color:rgba(27,31,35,.3)}.gist .blob-code{position:relative;padding-right:10px;padding-left:10px;line-height:20px;vertical-align:top}.gist .blob-code-inner{overflow:visible;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;color:#24292e;word-wrap:normal;white-space:pre}.gist .blob-code-inner .x-first{border-top-left-radius:.2em;border-bottom-left-radius:.2em}.gist .blob-code-inner .x-last{border-top-right-radius:.2em;border-bottom-right-radius:.2em}.gist .blob-code-inner:before{content:""}.gist .blob-code-inner.highlighted{background-color:#fffbdd}.gist .soft-wrap .diff-table{table-layout:fixed}.gist .soft-wrap .blob-code{padding-left:18px;text-indent:-7px}.gist .soft-wrap .blob-code-inner{word-wrap:break-word;white-space:pre-wrap}.gist .soft-wrap .no-nl-marker{display:none}.gist .soft-wrap .add-line-comment{margin-left:-28px}.gist .blob-code-expandable,.gist .blob-code-hunk,.gist .blob-num-expandable,.gist .blob-num-hunk{color:rgba(27,31,35,.5);vertical-align:middle}.gist .blob-num-expandable,.gist .blob-num-hunk{background-color:#dbedff}.gist .blob-code-expandable,.gist .blob-code-hunk{padding-top:4px;padding-bottom:4px;background-color:#f1f8ff;border-width:1px 0}.gist .blob-expanded .blob-code,.gist .blob-expanded .blob-num{background-color:#fafbfc}.gist .blob-expanded+tr:not(.blob-expanded) .blob-code,.gist .blob-expanded+tr:not(.blob-expanded) .blob-num,.gist .blob-expanded .blob-num-hunk,.gist tr:not(.blob-expanded)+.blob-expanded .blob-code,.gist tr:not(.blob-expanded)+.blob-expanded .blob-num{border-top:1px solid #eaecef}.gist .blob-num-expandable{padding:0;font-size:12px;text-align:center}.gist .blob-num-expandable .octicon{vertical-align:top}.gist .blob-num-expandable .diff-expander{display:block;width:auto;height:auto;padding:4px 11px 4px 10px;margin-right:-1px;color:#586069;cursor:pointer}.gist .blob-num-expandable .diff-expander:hover{color:#fff;text-shadow:none;background-color:#0366d6;border-color:#0366d6}.gist .blob-code-addition{background-color:#e6ffed}.gist .blob-code-addition .x{color:#24292e;background-color:#acf2bd}.gist .blob-num-addition{background-color:#cdffd8;border-color:#bef5cb}.gist .blob-code-deletion{background-color:#ffeef0}.gist .blob-code-deletion .x{color:#24292e;background-color:#fdb8c0}.gist .blob-num-deletion{background-color:#ffdce0;border-color:#fdaeb7}.gist .selected-line.blob-code{background-color:#fffbdd}.gist .selected-line.blob-code .x{background-color:transparent}.gist .selected-line.blob-num{background-color:#fff5b1;border-color:#ffea7f}.gist .add-line-comment{position:relative;z-index:5;float:left;width:22px;height:22px;margin:-2px -10px -2px -20px;line-height:21px;color:#fff;text-align:center;text-indent:0;cursor:pointer;background-color:#0366d6;background-image:linear-gradient(#0372ef,#0366d6);border-radius:3px;box-shadow:0 1px 4px rgba(27,31,35,.15);opacity:0;transition:transform .1s ease-in-out;transform:scale(.8)}.gist .add-line-comment:hover{transform:scale(1)}.gist .add-line-comment:focus,.is-hovered .gist .add-line-comment{opacity:1}.gist .add-line-comment .octicon{vertical-align:text-top;pointer-events:none}.gist .add-line-comment.octicon-check{background:#333;opacity:1}.gist .inline-comment-form{border:1px solid #dfe2e5;border-radius:3px}.gist .inline-review-comment{margin-top:0!important;margin-bottom:10px!important}.gist .inline-review-comment .gc:first-child+tr .blob-code,.gist .inline-review-comment .gc:first-child+tr .blob-num{padding-top:5px}.gist .inline-review-comment tr:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.gist .inline-review-comment tr:last-child .blob-code,.gist .inline-review-comment tr:last-child .blob-num{padding-bottom:8px}.gist .inline-review-comment tr:last-child .blob-code:first-child,.gist .inline-review-comment tr:last-child .blob-num:first-child{border-bottom-left-radius:2px}.gist .inline-review-comment tr:last-child .blob-code:last-child,.gist .inline-review-comment tr:last-child .blob-num:last-child{border-bottom-right-radius:2px}.gist .timeline-inline-comments{width:100%;table-layout:fixed}.gist .show-inline-notes .inline-comments,.gist .timeline-inline-comments .inline-comments{display:table-row}.gist .inline-comments,.gist .inline-comments.is-collapsed{display:none}.gist .inline-comments .line-comments.is-collapsed{visibility:hidden}.gist .inline-comments .line-comments+.blob-num{border-left-width:1px}.gist .inline-comments .timeline-comment{margin-bottom:10px}.gist .comment-holder,.gist .inline-comments .inline-comment-form,.gist .inline-comments .inline-comment-form-container{max-width:780px}.gist .empty-cell+.line-comments,.gist .line-comments+.line-comments{border-left:1px solid #eaecef}.gist .inline-comment-form-container .inline-comment-form,.gist .inline-comment-form-container.open .inline-comment-form-actions{display:none}.gist .inline-comment-form-container .inline-comment-form-actions,.gist .inline-comment-form-container.open .inline-comment-form{display:block}.gist body.full-width .container,.gist body.full-width .container-lg,.gist body.split-diff .container,.gist body.split-diff .container-lg{width:100%;max-width:none;padding-right:20px;padding-left:20px}.gist body.full-width .repository-content,.gist body.split-diff .repository-content{width:100%}.gist body.full-width .new-pr-form,.gist body.split-diff .new-pr-form{max-width:980px}.gist body.full-width .new-pr-form .discussion-sidebar,.gist body.split-diff .new-pr-form .discussion-sidebar{width:200px}.gist .file-diff-split{table-layout:fixed}.gist .file-diff-split .blob-code+.blob-num{border-left:1px solid #f6f8fa}.gist .file-diff-split .blob-code-inner{word-wrap:break-word;white-space:pre-wrap}.gist .file-diff-split .empty-cell{cursor:default;background-color:#fafbfc;border-right-color:#eaecef}.gist .submodule-diff-stats .octicon-diff-removed{color:#cb2431}.gist .submodule-diff-stats .octicon-diff-renamed{color:#677a85}.gist .submodule-diff-stats .octicon-diff-modified{color:#d0b44c}.gist .submodule-diff-stats .octicon-diff-added{color:#28a745}.gist .BlobToolbar{left:-17px}.gist .BlobToolbar-dropdown{margin-left:-2px}.gist .task-list-item{list-style-type:none}.gist .task-list-item label{font-weight:400}.gist .task-list-item.enabled label{cursor:pointer}.gist .task-list-item+.task-list-item{margin-top:3px}.gist .task-list-item .handle{display:none}.gist .task-list-item-checkbox{margin:0 .2em .25em -1.6em;vertical-align:middle}.gist .reorderable-task-lists .markdown-body .contains-task-list{padding:0}.gist .reorderable-task-lists .markdown-body li:not(.task-list-item){margin-left:26px}.gist .reorderable-task-lists .markdown-body ol:not(.contains-task-list) li,.gist .reorderable-task-lists .markdown-body ul:not(.contains-task-list) li{margin-left:0}.gist .reorderable-task-lists .markdown-body li p{margin-top:0}.gist .reorderable-task-lists .markdown-body .task-list-item{padding-right:15px;padding-left:42px;margin-right:-15px;margin-left:-15px;border:1px solid transparent}.gist .reorderable-task-lists .markdown-body .task-list-item+.task-list-item{margin-top:0}.gist .reorderable-task-lists .markdown-body .task-list-item .contains-task-list{padding-top:4px}.gist .reorderable-task-lists .markdown-body .task-list-item .handle{display:block;float:left;width:20px;padding:2px 0 0 2px;margin-left:-43px;opacity:0}.gist .reorderable-task-lists .markdown-body .task-list-item .drag-handle{fill:#333}.gist .reorderable-task-lists .markdown-body .task-list-item.hovered{background:#fafafa;border-top-color:#ededed;border-bottom-color:#ededed}.gist .reorderable-task-lists .markdown-body .task-list-item.hovered>.handle{opacity:1}.gist .reorderable-task-lists .markdown-body .task-list-item.is-dragging{opacity:0}.gist .reorderable-task-lists .markdown-body .task-list-item.is-ghost{border-right-color:#ededed;border-left-color:#ededed}.gist .review-comment-contents .markdown-body .task-list-item{padding-left:42px;margin-right:-12px;margin-left:-12px;border-top-left-radius:3px;border-bottom-left-radius:3px}.gist .review-comment-contents .markdown-body .task-list-item.hovered{border-left-color:#ededed}.gist .highlight{padding:0;margin:0;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;font-weight:400;line-height:1.4;color:#333;background:#fff;border:0}.gist .octospinner,.gist .render-viewer-error,.gist .render-viewer-fatal,.gist .render-viewer-invalid{display:none}.gist iframe.render-viewer{width:100%;height:480px;overflow:hidden;border:0}.gist code,.gist pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace!important;white-space:pre}.gist .gist-meta{padding:10px;overflow:hidden;font:12px -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:#586069;background-color:#f7f7f7;border-radius:0 0 2px 2px}.gist .gist-meta a{font-weight:600;color:#666;text-decoration:none;border:0}.gist .gist-data{overflow:auto;word-wrap:normal;background-color:#fff;border-bottom:1px solid #ddd;border-radius:2px 2px 0 0}.gist .gist-file{margin-bottom:1em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;border:1px solid;border-color:#ddd #ddd #ccc;border-radius:3px}.gist .gist-file article{padding:6px}.gist .gist-file .scroll .gist-data{position:absolute;top:0;right:0;bottom:30px;left:0;overflow:scroll}.gist .gist-file .scroll .gist-meta{position:absolute;right:0;bottom:0;left:0}.gist .blob-num{min-width:inherit}.gist .blob-code,.gist .blob-num{padding:1px 10px!important;background:transparent}.gist .blob-code{text-align:left;border:0}.gist .blob-wrapper table{border-collapse:collapse}.gist .blob-wrapper tr,.gist .blob-wrapper tr td{border:0}.gist .blob-wrapper tr:first-child td{padding-top:4px}.gist .markdown-body .anchor{display:none}.partner-logo img{transition:all .3s ease-in-out;filter:grayscale(1);opacity:.5;max-width:100%}.partner-logo img:hover{filter:grayscale(0);opacity:1}.sandbox-logo-bg svg{fill:#cbd5e0}.stats-block img{filter:grayscale(100%)}.stats-block img.icon{filter:grayscale(100%) contrast(0)}.stats-block:hover img,.stats-block:hover img.icon{filter:none}.content__release.content__default h3{font-size:17px;font-weight:700;margin:0;padding:0}.hero-banner{overflow:hidden}.animate-hero{transform:scale(1.1);transition:all .5s ease-in-out;transition-delay:.5s}@media (min-width:40.01em){.animate-hero{transform:scale(1.2) translateY(50px) translateX(30px)}}@media (min-width:50.01em){.animate-hero{transform:scale(1.1)}.hero-banner:hover .animate-hero{transform:scale(1.3) translateY(-20px) translateX(-20px) rotate(5deg)}}.dropdown-wrapper .nav-dropdown{max-height:90vh}.home-link{text-decoration:underline;transition-property:all}.home-link:hover{color:#14a5c2}.content__default .custom-block a:not(.reset-link){text-decoration:none;font-weight:700}.content__default .custom-block a:not(.reset-link):hover{text-decoration:underline}#nprogress{pointer-events:none}#nprogress .bar{background:#3eaf7c;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #3eaf7c,0 0 5px #3eaf7c;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#3eaf7c transparent transparent #3eaf7c;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.content__default h1{display:none;opacity:0;height:0;margin:0;padding:0;overflow:hidden}.page-sidebar{display:none}.page-content{padding-top:2.5rem;padding-bottom:2.5rem}@media (min-width:76.26em){.page-sidebar{display:block}.sidebar .sidebar-sub-headers{display:none}.page-content{width:calc(100% - 220px)}}.full-page .page-content{width:100%}.page-sidebar{top:300px;bottom:0;transition:all .5s ease}.page-sidebar.-mini-header{top:150px}.sidebar-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:none;z-index:10;background:rgba(0,0,0,.3)}.theme-container.sidebar-open .sidebar-mask{display:block}@media (min-width:50.01em){.with-sidebar .main-content,.with-sidebar footer{padding-left:260px}.with-sidebar .page-header.-fixed>div{left:260px}}.content__default h2.preview-title{text-align:center;font-size:2.25rem;text-transform:none;padding:0;margin:0;color:#0075db}.sandbox-logo{position:absolute;display:flex;align-items:center;justify-content:center;left:0;top:0;height:100%;width:100%}.sandbox-logo svg{min-width:800px;transform:translateX(3px);fill:#fff} \ No newline at end of file diff --git a/assets/fonts/boxicons.afbad0fa.eot b/assets/fonts/boxicons.afbad0fa.eot new file mode 100644 index 00000000000..149b2576f63 Binary files /dev/null and b/assets/fonts/boxicons.afbad0fa.eot differ diff --git a/assets/fonts/boxicons.deea39cb.woff b/assets/fonts/boxicons.deea39cb.woff new file mode 100644 index 00000000000..4d50a3a6dbb Binary files /dev/null and b/assets/fonts/boxicons.deea39cb.woff differ diff --git a/assets/fonts/boxicons.f46ca69e.ttf b/assets/fonts/boxicons.f46ca69e.ttf new file mode 100644 index 00000000000..6add47796b7 Binary files /dev/null and b/assets/fonts/boxicons.f46ca69e.ttf differ diff --git a/assets/img/boxicons.ac68c5be.svg b/assets/img/boxicons.ac68c5be.svg new file mode 100644 index 00000000000..8895bf2fa1f --- /dev/null +++ b/assets/img/boxicons.ac68c5be.svg @@ -0,0 +1,1150 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/img/client-controllers.6d7f6640.png b/assets/img/client-controllers.6d7f6640.png new file mode 100644 index 00000000000..17e68000a57 Binary files /dev/null and b/assets/img/client-controllers.6d7f6640.png differ diff --git a/assets/img/hooks-in-sequence.c4f287f6.png b/assets/img/hooks-in-sequence.c4f287f6.png new file mode 100644 index 00000000000..7d9df9478c5 Binary files /dev/null and b/assets/img/hooks-in-sequence.c4f287f6.png differ diff --git a/assets/img/invalid.41be58de.svg b/assets/img/invalid.41be58de.svg new file mode 100644 index 00000000000..24640b9aa2f --- /dev/null +++ b/assets/img/invalid.41be58de.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/assets/img/middleware-in-sequence.b2978130.svg b/assets/img/middleware-in-sequence.b2978130.svg new file mode 100644 index 00000000000..f8a984613fb --- /dev/null +++ b/assets/img/middleware-in-sequence.b2978130.svg @@ -0,0 +1,3 @@ + + +
Client request
Client request
UseBefore
UseBefore
Global middlewares
Global middlewares
UseBeforeEach
UseBeforeEach
UseBefore
UseBefore
Use
Use
Endpoint Handler
Endpoint Handler
UseAfter
UseAfter
UseAfter
UseAfter
Global middlewares
Global middlewares
SERVER
SERVER
CONTROLLER
CONTROLLER
For each endpoint
For each endpoint
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/assets/img/middleware.0ddb812b.png b/assets/img/middleware.0ddb812b.png new file mode 100644 index 00000000000..91c0aa31f6c Binary files /dev/null and b/assets/img/middleware.0ddb812b.png differ diff --git a/assets/img/npm.68b58fb3.svg b/assets/img/npm.68b58fb3.svg new file mode 100644 index 00000000000..606cb54febc --- /dev/null +++ b/assets/img/npm.68b58fb3.svg @@ -0,0 +1,6 @@ + + + + diff --git a/assets/img/official.be85e546.svg b/assets/img/official.be85e546.svg new file mode 100644 index 00000000000..90c8484f901 --- /dev/null +++ b/assets/img/official.be85e546.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/assets/img/providers.3d1881c2.png b/assets/img/providers.3d1881c2.png new file mode 100644 index 00000000000..af455aa4912 Binary files /dev/null and b/assets/img/providers.3d1881c2.png differ diff --git a/assets/img/signin-page.e5cb5f7e.png b/assets/img/signin-page.e5cb5f7e.png new file mode 100644 index 00000000000..6ba2e4c81c6 Binary files /dev/null and b/assets/img/signin-page.e5cb5f7e.png differ diff --git a/assets/img/socketio.f76a6256.png b/assets/img/socketio.f76a6256.png new file mode 100644 index 00000000000..880feae8c64 Binary files /dev/null and b/assets/img/socketio.f76a6256.png differ diff --git a/assets/img/star.e7194b5b.svg b/assets/img/star.e7194b5b.svg new file mode 100644 index 00000000000..7b9d992f3ca --- /dev/null +++ b/assets/img/star.e7194b5b.svg @@ -0,0 +1,8 @@ + + + + diff --git a/assets/img/templating-engine.041778e2.png b/assets/img/templating-engine.041778e2.png new file mode 100644 index 00000000000..bc96fb93d51 Binary files /dev/null and b/assets/img/templating-engine.041778e2.png differ diff --git a/assets/img/valid.36052327.svg b/assets/img/valid.36052327.svg new file mode 100644 index 00000000000..8738f16acff --- /dev/null +++ b/assets/img/valid.36052327.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/assets/js/10.e898665b.js b/assets/js/10.e898665b.js new file mode 100644 index 00000000000..e5cabc52e50 --- /dev/null +++ b/assets/js/10.e898665b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{736:function(t,s,a){t.exports=a.p+"assets/img/hooks-in-sequence.c4f287f6.png"},784:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"services"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#services"}},[t._v("#")]),t._v(" Services")]),t._v(" "),n("p",[t._v("The decorator "),n("code",[t._v("@Service()")]),t._v(" declares a new service that can be injected in an other service or controller on their "),n("code",[t._v("constructor()")]),t._v(".\nAll services annotated with "),n("code",[t._v("@Service()")]),t._v(" are constructed one time.")]),t._v(" "),n("h2",{attrs:{id:"configuration"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),n("p",[t._v("You must add the "),n("code",[t._v("services")]),t._v(" folder on "),n("code",[t._v("componentsScan")]),t._v(" attribute in your server settings as follow :")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n mount"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/rest"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("./controllers/**/**.js")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n componentsScan"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("./services/**/**.js")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n customServiceOptions"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("h2",{attrs:{id:"decorators"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[t._v("#")]),t._v(" Decorators")]),t._v(" "),n("ApiList",{attrs:{query:"module === '@tsed/di' && symbolType === 'decorator'"}}),t._v(" "),n("h2",{attrs:{id:"declaring-a-service"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#declaring-a-service"}},[t._v("#")]),t._v(" Declaring a service")]),t._v(" "),n("p",[t._v("Create a new file in your services folder. Create a new Class definition and add the "),n("code",[t._v("@Service()")]),t._v(" annotation on your class.")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Constant"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("OnInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" BeforeRoutesInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OnRoutesInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AfterRoutesInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OnServerReady"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OnInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" BeforeRoutesInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OnRoutesInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AfterRoutesInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OnServerReady "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Constant")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"customServiceOptions"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" settings"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSettings")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("settings"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br")])]),n("p",[t._v("Finally, inject the service to another service:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./MyService"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FooService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" myService"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br")])]),n("p",[t._v("Or to another controller:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./MyService"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n service"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// OR from constructor")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" myService"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br")])]),n("h2",{attrs:{id:"override-a-service"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#override-a-service"}},[t._v("#")]),t._v(" Override a Service")]),t._v(" "),n("p",[t._v("The decorator "),n("ApiSymbolName",[t._v("OverrideProvider")]),t._v(" gives you the ability to\noverride some internal Ts.ED service like the "),n("ApiSymbolName",[t._v("ParseService")]),t._v(".")],1),t._v(" "),n("p",[t._v("Example usage:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("OverrideProvider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("SomeService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OverrideProvider")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SomeService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SomeService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// do something")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br")])]),n("h2",{attrs:{id:"lifecycle-hooks"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#lifecycle-hooks"}},[t._v("#")]),t._v(" Lifecycle Hooks")]),t._v(" "),n("p",[t._v("Ts.ED 2.x introduces a new Lifecycle Hooks on the service that follows the "),n("RouterLink",{attrs:{to:"/docs/hooks.html"}},[t._v("Hooks")]),t._v(".\nThis lifecycle hooks that provide visibility into these key life moments and the ability to act when they occur.")],1),t._v(" "),n("p",[t._v("A service that uses one of the phases of the lifecycle can add a number of things and can be completely autonomous.\nThis is the case with the example of the socket server (See the section "),n("RouterLink",{attrs:{to:"/tutorials/socket-io.html"}},[t._v("How to integrate Socket.io")]),t._v(").")],1),t._v(" "),n("p",[t._v("These schemes resume the order hooks called by Ts.ED:")]),t._v(" "),n("p",[n("img",{attrs:{src:a(736),alt:"lifecycle-hooks"}})]),t._v(" "),n("p",[t._v("Each interface has a single hook method whose name is the interface name prefixed with "),n("code",[t._v("$")]),t._v(". For example, the "),n("code",[t._v("OnInit")]),t._v("\ninterface has a hook method named "),n("code",[t._v("$onInit()")]),t._v(" (old name "),n("code",[t._v("$onInjectorReady")]),t._v(") that Ts.ED calls when all services are built.")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Hooks"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OnInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Hooks")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OnInit "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" settings "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" configuration"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("settings "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"customServiceOptions"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$beforeRoutesInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$afterRoutesInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onReady")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("p",[t._v("it's also possible to handle "),n("code",[t._v("$onDestroy")]),t._v(" hook when a service, or a controller is\nannotated with "),n("code",[t._v("@Scope('request')")]),t._v(":")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Scope"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OnDestroy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scope")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"request"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OnDestroy")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onDestroy")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Service destroyed"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("table",[n("thead",[n("tr",[n("th",[t._v("Hook")]),t._v(" "),n("th",[t._v("Purpose and Timing")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[t._v("$onInit")]),t._v(" "),n("td",[t._v("Respond after Injector has initialized all Services in the registry.")])]),t._v(" "),n("tr",[n("td",[t._v("$beforeRoutesInit")]),t._v(" "),n("td",[t._v("Respond before loading the controllers. The middlewares and filters are already built.")])]),t._v(" "),n("tr",[n("td",[t._v("$afterRoutesInit")]),t._v(" "),n("td",[t._v("Respond after the controllers build.")])]),t._v(" "),n("tr",[n("td",[t._v("$onReady")]),t._v(" "),n("td",[t._v("Respond when the server is ready. At this step, Http.Server or/and Https.Server object is available. The server listen the port.")])]),t._v(" "),n("tr",[n("td",[t._v("$onDestroy")]),t._v(" "),n("td",[t._v("Respond when a Service or Controller is destroyed (uniquely when class is annotated with "),n("code",[t._v("@Scope('request')")]),t._v(".")])])])]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("Interfaces are optionals")]),t._v(" "),n("p",[t._v("The interfaces are optionals for JavaScript and Typescript developers from a purely technical perspective.\nThe JavaScript language doesn't have interfaces. Ts.ED can't see TypeScript interfaces at runtime because they disappear from the transpiled JavaScript.")]),t._v(" "),n("p",[t._v("Nonetheless, it's good practice adding interfaces to TypeScript directive classes in order to benefit from strong typing and editor tooling.")])])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/11.3acaa9f2.js b/assets/js/11.3acaa9f2.js new file mode 100644 index 00000000000..fe0dd937a36 --- /dev/null +++ b/assets/js/11.3acaa9f2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{748:function(t,s,a){t.exports=a.p+"assets/img/templating-engine.041778e2.png"},788:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"templating"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[t._v("#")]),t._v(" Templating")]),t._v(" "),n("p",[n("ApiSymbolName",[t._v("View")]),t._v(" is a decorator which can be used on a controller method (endpoint).\nThis decorator will use the data returned by the method, and the configured view to create the response.")],1),t._v(" "),n("figure",[n("img",{staticStyle:{"max-height":"500px",padding:"20px",background:"white"},attrs:{src:a(748)}})]),t._v(" "),n("h2",{attrs:{id:"configuration"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),n("p",[t._v("Install the Ts.ED engines:")]),t._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"Yarn"}},[n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[t._v("$ "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" @tsed/engines\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"Npm"}},[n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[t._v("$ "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save @tsed/engines\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br")])])])],1),t._v(" "),n("p",[t._v("The default template engine installed with Ts.ED is "),n("a",{attrs:{href:"https://ejs.co/",target:"_blank",rel:"noopener noreferrer"}},[t._v("EJS"),n("OutboundLink")],1),t._v(".")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n views"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n root"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("../views")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n viewEngine"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ejs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n extensions"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// optional")]),t._v("\n ejs"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ejs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n hbs"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"handlebars"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n options"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ejs"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// global options for ejs engine. See official engine documentation for more details.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("Supported engines is available "),n("a",{attrs:{href:"https://github.com/tsedio/tsed-engines/blob/production/packages/engines/readme.md#supported-template-engines",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),n("OutboundLink")],1),t._v(".")])]),t._v(" "),n("h2",{attrs:{id:"options"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[t._v("#")]),t._v(" Options")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PlatformViewsSettings")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Views directory.\n */")]),t._v("\n root"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Enable cache. Ts.ED enables cache in PRODUCTION profile by default.\n */")]),t._v("\n cache"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Provide extensions mapping to match the expected engines.\n */")]),t._v("\n extensions"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("PlatformViewsExtensionsTypes"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Default view engine extension.\n * Allow omitting extension when using View decorator or render method.\n */")]),t._v("\n viewEngine"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Options mapping for each engine.\n */")]),t._v("\n options"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("PlatformViewsEngineOptions"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br")])]),n("h2",{attrs:{id:"supported-template-engines"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#supported-template-engines"}},[t._v("#")]),t._v(" Supported template engines")]),t._v(" "),n("p",[t._v("Some package has the same key name, "),n("code",[t._v("@tsed/engines")]),t._v(" will load them according to the order number.\nFor example with dust, @tsed/engines will try to use in this order: "),n("code",[t._v("dustjs-helpers")]),t._v(" and "),n("code",[t._v("dustjs-linkedin")]),t._v(".\nIf "),n("code",[t._v("dustjs-helpers")]),t._v(" is installed, "),n("code",[t._v("dustjs-linkedin")]),t._v(" will not be used by consolidate.")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("Name")]),t._v(" "),n("th",[t._v("Package Name / Order")]),t._v(" "),n("th",[t._v("Website / State")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/soywiz/atpl.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("atpl"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/atpl",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install atpl")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/danlevan/bracket-template",target:"_blank",rel:"noopener noreferrer"}},[t._v("bracket"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/bracket-template",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install bracket-template")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/olado/doT",target:"_blank",rel:"noopener noreferrer"}},[t._v("dot"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/dot",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install dot")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://olado.github.io/doT/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/linkedin/dustjs",target:"_blank",rel:"noopener noreferrer"}},[t._v("dust"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/dustjs-helpers",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install dustjs-helpers")]),n("OutboundLink")],1),t._v(" (2) or"),n("br"),n("a",{attrs:{href:"https://www.npmjs.com/package/dustjs-linkedin",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install dustjs-linkedin")]),n("OutboundLink")],1),t._v(" (3)")]),t._v(" "),n("td",[n("a",{attrs:{href:"http://linkedin.github.io/dustjs/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/baryshev/ect",target:"_blank",rel:"noopener noreferrer"}},[t._v("ect"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/ect",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install ect")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://ectjs.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/mde/ejs",target:"_blank",rel:"noopener noreferrer"}},[t._v("ejs"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/ejs",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install ejs")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://ejs.co/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/gregwebs/hamlet.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("hamlet"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/hamlet",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install hamlet")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/visionmedia/haml.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("hamljs"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/hamljs",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install hamljs")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/netzpirat/haml-coffee",target:"_blank",rel:"noopener noreferrer"}},[t._v("haml-coffee"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/haml-coffee",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install haml-coffee")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/wycats/handlebars.js/",target:"_blank",rel:"noopener noreferrer"}},[t._v("handlebars"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/handlebars",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install handlebars")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://handlebarsjs.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/twitter/hogan.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("hogan"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/hogan.js",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install hogan.js")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://twitter.github.com/hogan.js/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/codemix/htmling",target:"_blank",rel:"noopener noreferrer"}},[t._v("htmling"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/htmling",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install htmling")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/shinetech/jazz",target:"_blank",rel:"noopener noreferrer"}},[t._v("jazz"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/jazz",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install jazz")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/baryshev/just",target:"_blank",rel:"noopener noreferrer"}},[t._v("just"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/just",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install just")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/chjj/liquor",target:"_blank",rel:"noopener noreferrer"}},[t._v("liquor"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/liquor",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install liquor")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/bestiejs/lodash",target:"_blank",rel:"noopener noreferrer"}},[t._v("lodash"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/lodash",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install lodash")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://lodash.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/marko-js/marko",target:"_blank",rel:"noopener noreferrer"}},[t._v("marko"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/marko",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install marko")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://markojs.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/satchmorun/mote",target:"_blank",rel:"noopener noreferrer"}},[t._v("mote"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/mote",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install mote")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://satchmorun.github.io/mote/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/janl/mustache.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("mustache"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/mustache",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install mustache")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/mozilla/nunjucks",target:"_blank",rel:"noopener noreferrer"}},[t._v("nunjucks"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/nunjucks",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install nunjucks")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://mozilla.github.io/nunjucks",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/flatiron/plates",target:"_blank",rel:"noopener noreferrer"}},[t._v("plates"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/plates",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install plates")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/pugjs/pug",target:"_blank",rel:"noopener noreferrer"}},[t._v("pug"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/pug",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install pug")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://jade-lang.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1),t._v(" / "),n("strong",[t._v("(formerly jade)")])])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/ractivejs/ractive",target:"_blank",rel:"noopener noreferrer"}},[t._v("ractive"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/ractive",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install ractive")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/facebook/react",target:"_blank",rel:"noopener noreferrer"}},[t._v("react"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/react",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install react")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/slm-lang/slm",target:"_blank",rel:"noopener noreferrer"}},[t._v("slm"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/slm",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install slm")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/squirrellyjs/squirrelly",target:"_blank",rel:"noopener noreferrer"}},[t._v("squirrelly"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/squirrelly",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install squirrelly")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://squirrelly.js.org",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/node-swig/swig-templates",target:"_blank",rel:"noopener noreferrer"}},[t._v("swig"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/swig-templates",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install swig-templates")]),n("OutboundLink")],1),t._v(" (2)")]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/goodeggs/teacup",target:"_blank",rel:"noopener noreferrer"}},[t._v("teacup"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/teacup",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install teacup")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/archan937/templayed.js/",target:"_blank",rel:"noopener noreferrer"}},[t._v("templayed"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/templayed",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install templayed")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://archan937.github.com/templayed.js/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/malgorithms/toffee",target:"_blank",rel:"noopener noreferrer"}},[t._v("toffee"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/toffee",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install toffee")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/justjohn/twig.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("twig"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/twig",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install twig")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://github.com/twigjs/twig.js/wiki/Implementation-Notes",target:"_blank",rel:"noopener noreferrer"}},[t._v("(wiki)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/NightlyCommit/twing",target:"_blank",rel:"noopener noreferrer"}},[t._v("twing"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/twing",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install twing")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://nightlycommit.github.io/twing/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/documentcloud/underscore",target:"_blank",rel:"noopener noreferrer"}},[t._v("underscore"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/underscore",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install underscore")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://underscorejs.org/#template",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/kirbysayshi/vash",target:"_blank",rel:"noopener noreferrer"}},[t._v("vash"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/vash",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install vash")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/julianshapiro/velocity",target:"_blank",rel:"noopener noreferrer"}},[t._v("velocityjs"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/velocity-animate",target:"_blank",rel:"noopener noreferrer"}},[t._v("BETA"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://velocityjs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/jeremyruppel/walrus",target:"_blank",rel:"noopener noreferrer"}},[t._v("walrus"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/walrus",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install walrus")]),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"http://documentup.com/jeremyruppel/walrus/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/gsf/whiskers.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("whiskers"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("a",{attrs:{href:"https://www.npmjs.com/package/whiskers",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("npm install whiskers")]),n("OutboundLink")],1)]),t._v(" "),n("td",[t._v("-")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://github.com/vuejs/vue",target:"_blank",rel:"noopener noreferrer"}},[t._v("vue"),n("OutboundLink")],1)]),t._v(" "),n("td",[n("code",[t._v("npm install vue vue-pronto")])]),t._v(" "),n("td",[n("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("(website)"),n("OutboundLink")],1)])])])]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),n("p",[t._v("You must still install the engines you wish to use, add them to your package.json dependencies.")])]),t._v(" "),n("h2",{attrs:{id:"usage"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),n("h3",{attrs:{id:"template-engine-instances"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#template-engine-instances"}},[t._v("#")]),t._v(" Template Engine Instances")]),t._v(" "),n("p",[t._v("Template engines are exposed via the "),n("code",[t._v("requires")]),t._v(" Map, but they are not instantiated until you've called the "),n("code",[t._v("getEngine(engine).render()")]),t._v(" method.\nYou can instantiate them manually beforehand if you want to add filters, globals, mixins, or other engine features.")]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("Reference")]),t._v(" "),n("p",[n("a",{attrs:{href:"https://github.com/tsedio/tsed-engines/blob/production/packages/engines/readme.md#template-engine-instances",target:"_blank",rel:"noopener noreferrer"}},[t._v("Template Engine Instances"),n("OutboundLink")],1),t._v(".")])]),t._v(" "),n("h3",{attrs:{id:"nunjucks"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#nunjucks"}},[t._v("#")]),t._v(" Nunjucks")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" nunjucks "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"nunjucks"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" nunjucksInstances "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nunjucks"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("configure")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./views"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nnunjucksInstances"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("addFilter")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"foo"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bar"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n views"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n root"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("rootDir"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("/views")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n viewEngine"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"nunjucks"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n extensions"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n njk"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"nunjucks"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n options"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n nunjucks"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n requires"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" nunjucksInstances\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ShopApp")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br")])]),n("h3",{attrs:{id:"with-decorator"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#with-decorator"}},[t._v("#")]),t._v(" With decorator")]),t._v(" "),n("p",[t._v("Here is an example of a controller using the "),n("ApiSymbolName",[t._v("View")]),t._v(" decorator:")],1),t._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"EventCtrl.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("View"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-views"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/events"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EventsCtrl")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("View")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"event.ejs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("startDate"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Date")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MyEvent"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"event.ejs"}},[n("div",{staticClass:"language-html line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-html"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("<%- name %>"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Start: <%- startDate %>"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])])])],1),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("Like Express.js or Koa.js, "),n("ApiSymbolName",[t._v("View")]),t._v(" decorator uses "),n("code",[t._v("express.response.locals")]),t._v(" or "),n("code",[t._v("koa.context.state")]),t._v(" to populate data before\nrendering the template. See "),n("RouterLink",{attrs:{to:"/docs/controllers.html#locals"}},[t._v("Locals")]),t._v(" decorator usage for more information.")],1)]),t._v(" "),n("h3",{attrs:{id:"with-render-method"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#with-render-method"}},[t._v("#")]),t._v(" With render method")]),t._v(" "),n("p",[t._v("It's also possible to render a view by injecting and using "),n("ApiSymbolName",[t._v("PlatformResponse")]),t._v(" instance.")],1),t._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"EventCtrl.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformResponse"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/events"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EventsCtrl")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Res")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" response"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformResponse"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" options "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("startDate"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Date")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MyEvent"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("render")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"event.ejs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"event.ejs"}},[n("div",{staticClass:"language-html line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-html"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("<%- name %>"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Start: <%- startDate %>"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])])])],1),t._v(" "),n("h3",{attrs:{id:"with-platformviews"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#with-platformviews"}},[t._v("#")]),t._v(" With PlatformViews")]),t._v(" "),n("p",[t._v("Ts.ED provides the "),n("ApiSymbolName",[t._v("PlatformViews")]),t._v(" service to render views. In fact, "),n("ApiSymbolName",[t._v("View")]),t._v(" decorator\nuses "),n("code",[t._v("PlatformResponse.render()")]),t._v(" method which itself uses the "),n("code",[t._v("PlatformViews.render()")]),t._v(" method.\nIt is useful if you want to render a template from a service.")],1),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformViews"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-views"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n platformViews"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformViews"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("renderTemplate")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platformViews"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("render")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"view.ejs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// some other options")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("data\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br")])]),n("h2",{attrs:{id:"alter-render-options"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#alter-render-options"}},[t._v("#")]),t._v(" Alter render options")]),t._v(" "),n("p",[t._v("You can alter the render options before rendering the view. Listen the "),n("code",[t._v("$alterRenderOptions")]),t._v(" hook to inject\ndata:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" DIContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AlterOptions")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$alterRenderOptions")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Record"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" DIContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// only called when the response.render is called by your code")]),t._v("\n options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("alter "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"alter"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("h2",{attrs:{id:"caching"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#caching"}},[t._v("#")]),t._v(" Caching")]),t._v(" "),n("p",[t._v("To enable caching, simply pass "),n("code",[t._v("{ cache: true }")]),t._v(" to the "),n("ApiSymbolName",[t._v("View")]),t._v(" decorator.\nAll engines that "),n("code",[t._v("consolidate.js")]),t._v(" / "),n("a",{attrs:{href:"https://github.com/tsedio/tsed-engines",target:"_blank",rel:"noopener noreferrer"}},[n("code",[t._v("@tsed/engines")]),n("OutboundLink")],1),t._v(" implements I/O for, will\ncache the file contents, ideal for production environments.")],1),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("View"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-views"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/events"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EventCtrl")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("View")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"event.ejs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("cache"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("startDate"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Date")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MyEvent"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("Ts.ED enables cache by default in "),n("code",[t._v("PRODUCTION")]),t._v(" profile.")])]),t._v(" "),n("h2",{attrs:{id:"implement-your-own-engine"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#implement-your-own-engine"}},[t._v("#")]),t._v(" Implement your own engine")]),t._v(" "),n("p",[n("code",[t._v("@tsed/engines")]),t._v(" let you register your own engine by using the "),n("code",[t._v("@ViewEngine")]),t._v(" decorator. Here an is example of\npug engine implementation:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Engine"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ViewEngine"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/engines"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("ViewEngine")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pug"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n requires"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pug"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"then-pug"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// multiple require is possible. Ts.ED will use the first module resolved from node_modules")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PugEngine")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Engine")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$compile")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("engine"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$compileFile")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("file"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("engine"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("compileFile")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("file"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/12.d67762ae.js b/assets/js/12.d67762ae.js new file mode 100644 index 00000000000..e6c4e6999bf --- /dev/null +++ b/assets/js/12.d67762ae.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{749:function(t,s,a){t.exports=a.p+"assets/img/signin-page.e5cb5f7e.png"},814:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"oidc"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#oidc"}},[t._v("#")]),t._v(" OIDC")]),t._v(" "),n("Badge",{attrs:{text:"beta"}}),t._v(" "),n("Badge",{attrs:{text:"Contributors are welcome"}}),t._v(" "),n("Banner",{attrs:{src:"https://oauth.net/images/oauth-logo-square.png",height:"100",href:"https://github.com/panva/node-oidc-provider"}}),t._v(" "),n("p",[n("a",{attrs:{href:"https://github.com/panva/node-oidc-provider",target:"_blank",rel:"noopener noreferrer"}},[t._v("oidc-provider"),n("OutboundLink")],1),t._v(" is an OAuth 2.0 Authorization Server with OpenID Connect\nand many additional features and standards implemented.")]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("Certification")]),t._v(" "),n("p",[t._v("Filip Skokan has "),n("a",{attrs:{href:"https://openid.net/certification/",target:"_blank",rel:"noopener noreferrer"}},[t._v("certified"),n("OutboundLink")],1),t._v("\nthat "),n("a",{attrs:{href:"https://github.com/panva/node-oidc-provider",target:"_blank",rel:"noopener noreferrer"}},[t._v("oidc-provider"),n("OutboundLink")],1),t._v(" conforms to the following profiles of the OpenID\nConnect™ protocol")]),t._v(" "),n("ul",[n("li",[t._v("OP Basic, Implicit, Hybrid, Config, Dynamic, Form Post, and 3rd Party-Init")]),t._v(" "),n("li",[t._v("OP Front-Channel Logout, Back-Channel Logout, RP-Initiated Logout, and Session Management")]),t._v(" "),n("li",[t._v("OP FAPI R/W MTLS and Private Key")])])]),t._v(" "),n("Projects",{attrs:{type:"projects"}}),t._v(" "),n("h2",{attrs:{id:"oidc-compatibility"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#oidc-compatibility"}},[t._v("#")]),t._v(" OIDC compatibility")]),t._v(" "),n("ul",[n("li",[t._v("For OIDC v7, use "),n("code",[t._v("@tsed/oidc-provider")]),t._v(" v7.19 and under")]),t._v(" "),n("li",[t._v("For OIDC v8, use "),n("code",[t._v("@tsed/oidc-provider")]),t._v(" v7.21 and higher")])]),t._v(" "),n("p",[t._v("Since the v8, have changed the exported Provider (named by default) and the entire is under ESM convention, Ts.ED isn't\nable to maintain the v7 and v8 at the same time.")]),t._v(" "),n("h2",{attrs:{id:"features"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[t._v("#")]),t._v(" Features")]),t._v(" "),n("p",[t._v("Ts.ED provides decorators and services to create an OIDC provider with your Ts.ED application.")]),t._v(" "),n("ul",[n("li",[t._v("Create interactions policies,")]),t._v(" "),n("li",[t._v("Create views,")]),t._v(" "),n("li",[t._v("Use adapters to connect oidc-provider with redis/mongo/etc...")]),t._v(" "),n("li",[t._v("Automatically create jwks keys on startup")])]),t._v(" "),n("h2",{attrs:{id:"installation"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),n("p",[t._v("Before using the "),n("code",[t._v("@tsed/oidc-provider")]),t._v(" package, we need to install\nthe "),n("a",{attrs:{href:"https://www.npmjs.com/package/oidc-provider",target:"_blank",rel:"noopener noreferrer"}},[t._v("oidc-provider"),n("OutboundLink")],1),t._v(" module.")]),t._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save oidc-provider\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save @tsed/oidc-provider @tsed/jwks @tsed/adapters\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[t._v("Then we need to follow these steps:")]),t._v(" "),n("ul",[n("li",[t._v("Configure the oidc server,")]),t._v(" "),n("li",[t._v("Create the Accounts provider")]),t._v(" "),n("li",[t._v("Create the Interactions controller,")]),t._v(" "),n("li",[t._v("Create our first Login interaction and views,")])]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v('Select "OpenID Connect provider" upon initialization with the Ts.ED CLI and the following will be automatically\ngenerated.')])]),t._v(" "),n("h2",{attrs:{id:"configuration"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),n("p",[t._v("To use oidc-provider with Ts.ED it requires some other Ts.ED features to work properly.")]),t._v(" "),n("ul",[n("li",[t._v("Adapters to manage database connection,")]),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/docs/templating.html#configuration"}},[t._v("Views")]),t._v(" to display pages.")],1)]),t._v(" "),n("p",[t._v("Use "),n("code",[t._v("tsed init yourApp")]),t._v(" to create a TSed application and adjust "),n("code",[t._v("Server.ts")]),t._v(":")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Accounts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./services/Accounts"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("InteractionsCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./controllers/oidc/InteractionsCtrl"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n httpPort"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("8083")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n mount"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("InteractionsCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n adapters"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n lowdbDir"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("cwd")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('".."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('".db"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Adapter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" FileSyncAdapter\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n oidc"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// path: "/oidc",')]),t._v("\n Accounts"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Accounts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n jwksPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("cwd")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('".."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('".."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"keys"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jwks.json"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// allowHttpLocalhost: false, // by default. true in dev mode and false in production")]),t._v("\n clients"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n client_id"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client_id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n client_secret"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"client_secret"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n redirect_uris"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:3000"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n response_types"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id_token"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n grant_types"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"implicit"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n token_endpoint_auth_method"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"none"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n claims"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n openid"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sub"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n email"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"email"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"email_verified"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n features"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// disable the packaged interactions")]),t._v("\n devInteractions"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("enabled"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n encryption"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("enabled"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n introspection"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("enabled"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n revocation"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("enabled"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n views"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n root"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("./views")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n extensions"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ejs"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ejs"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br")])]),n("h3",{attrs:{id:"options"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[t._v("#")]),t._v(" Options")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Type"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("JwksKeyParameters"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/jwks"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// @ts-ignore")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Adapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/adapters"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("OidcAccountsMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./OidcAccountsMethods"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OidcSettings")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Configuration")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * force the secure cookie. By default, in dev mode it's disabled and in production it's enabled.\n */")]),t._v("\n secureCookies"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Path on which the oidc-provider instance is mounted.\n */")]),t._v("\n path"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Issuer URI. By default, Ts.ED create issuer with http://localhost:${httpPort}\n */")]),t._v("\n issuer"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Path to store jwks keys.\n */")]),t._v("\n jwksPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Generate jwks from given certificates\n */")]),t._v("\n certificates"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" JwksKeyParameters"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Secure keys.\n */")]),t._v("\n secureKey"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Enable proxy.\n */")]),t._v("\n proxy"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Allow redirect_uri on HTTP protocol and localhost domain.\n */")]),t._v("\n allowHttpLocalhost"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Injectable service to manage accounts.\n */")]),t._v("\n Accounts"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Type"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("OidcAccountsMethods"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Injectable adapter to manage database connexion.\n */")]),t._v("\n Adapter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Type"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Adapter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Use the connection name for the OIDCRedisAdapter.\n */")]),t._v("\n connectionName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n plugins"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" TsED"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("OIDCPluginSettings"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("declare")]),t._v(" global "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("namespace")]),t._v(" TsED "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OIDCPluginSettings")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Configuration")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n oidc"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcSettings"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br"),n("span",{staticClass:"line-number"},[t._v("63")]),n("br"),n("span",{staticClass:"line-number"},[t._v("64")]),n("br"),n("span",{staticClass:"line-number"},[t._v("65")]),n("br")])]),n("p",[t._v("Documentation on other options properties can be found on\nthe "),n("a",{attrs:{href:"https://github.com/panva/node-oidc-provider/blob/master/docs/README.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("oidc-provider"),n("OutboundLink")],1),t._v(" documentation page.")]),t._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),n("p",[t._v("It is advised to set "),n("code",[t._v("path")]),t._v(" to "),n("code",[t._v("/oidc")]),t._v(" to prevent oidc-provider becoming the default exception handler on all routes. In\nfuture versions of Ts.ED this will be the default value.")])]),t._v(" "),n("h2",{attrs:{id:"use-redis"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#use-redis"}},[t._v("#")]),t._v(" Use Redis "),n("Badge",{attrs:{text:"6.129.0+"}})],1),t._v(" "),n("p",[t._v("Ts.ED provide a Redis adapter for OIDC provider. You just have to install "),n("code",[t._v("@tsed/adapters-redis")]),t._v(" and configure a redis\nconnection to store\nall OIDC provider data in Redis.")]),t._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" i --save @tsed/redis-adapters @tsed/ioredis ioredis\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" i --save-dev ioredis-mock\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[t._v("Then create a new "),n("code",[t._v("RedisConnection.ts")]),t._v(" for your new redis connection:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Redis "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ioredis"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("registerConnectionProvider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/ioredis"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("REDIS_CONNECTION")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Symbol"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"REDIS_CONNECTION"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("REDIS_CONNECTION")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Redis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("registerConnectionProvider")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n provide"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("REDIS_CONNECTION")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"default"')]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// you can change this name at your conveniance")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),n("p",[t._v("You can find more details on "),n("RouterLink",{attrs:{to:"/tutorials/ioredis.html"}},[t._v("@tsed/ioredis documentation")]),t._v(".")],1)]),t._v(" "),n("p",[t._v("Then edit the Server settings:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("OIDCRedisAdapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" RedisAdapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/adapters-redis"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Accounts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./services/Accounts"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("InteractionsCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./controllers/oidc/InteractionsCtrl"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n httpPort"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("8083")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n mount"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("InteractionsCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n redis"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"default"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add redis configuration")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n adapters"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Adapter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" RedisAdapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n connectionName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"default"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n oidc"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Adapter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OIDCRedisAdapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n connectionName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"default"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/// other options")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br")])]),n("p",[t._v("That all!")]),t._v(" "),n("h2",{attrs:{id:"allow-http-localhost"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#allow-http-localhost"}},[t._v("#")]),t._v(" Allow HTTP & localhost")]),t._v(" "),n("p",[t._v("By default, Ts.ED enable HTTP and localhost domain as a valid redirect uri for your OIDC project. But, sometimes you\nwant to allow also HTTP and localhost domain in your "),n("code",[t._v("integration")]),t._v(" or "),n("code",[t._v("QA")]),t._v("\nenvironment.")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n oidc"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n allowHttpLocalhost"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br")])]),n("h2",{attrs:{id:"secure-cookies"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#secure-cookies"}},[t._v("#")]),t._v(" Secure cookies")]),t._v(" "),n("p",[t._v("By default, Ts.ED disable the secureCookies options in "),n("code",[t._v("development")]),t._v(" mode and enable it in "),n("code",[t._v("production")]),t._v(" mode. But,\nsometimes this options in "),n("code",[t._v("integration")]),t._v(" environment because your server isn't under a Https protocol.")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n oidc"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n secureCookies"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br")])]),n("h2",{attrs:{id:"tls-proxy"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#tls-proxy"}},[t._v("#")]),t._v(" TLS proxy")]),t._v(" "),n("p",[t._v("The OpenID Connect specification does not allow unsecured HTTP requests and oidc-provider blocks them by default. While\nthere is a "),n("a",{attrs:{href:"https://github.com/panva/node-oidc-provider/blob/main/recipes/implicit_http_localhost.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("workaround"),n("OutboundLink")],1),t._v(", the\nproper way is to use a TLS offloading proxy in front of your app.\nWhen developing, the easiest way is to use "),n("a",{attrs:{href:"https://caddyserver.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Caddy"),n("OutboundLink")],1),t._v(". To use it, set "),n("code",[t._v("proxy: true")]),t._v(" in\nyour "),n("a",{attrs:{href:"#Options"}},[t._v("options")]),t._v(" and then run:")]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("caddy reverse-proxy --from localhost:8443 --to localhost:8083\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br")])]),n("h2",{attrs:{id:"accounts"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#accounts"}},[t._v("#")]),t._v(" Accounts")]),t._v(" "),n("p",[t._v("oidc-provider requires an Account model to find an account during an interaction. The model can be used in conjunction\nwith the adapter to fetch an account.")]),t._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"models/Account.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Email"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Property"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Account")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Name")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n _id"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Email")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n email"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Property")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Name")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"email_verified"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n emailVerified"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("unknown")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("accountId")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("_id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("claims")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("resolve")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n sub"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("_id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n email"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n email_verified"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("emailVerified\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"services/Accounts.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Adapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InjectAdapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/adapters"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("deserialize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/json-mapper"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("AccessToken"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AuthorizationCode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" DeviceCode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcAccountsMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Account"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../models/Account"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Accounts")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OidcAccountsMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("InjectAdapter")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accounts"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Account"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n adapter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Adapter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Account"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" accounts "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("adapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("accounts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("adapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deserialize")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n email"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test@test.com"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n emailVerified"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("useAlias"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findAccount")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" token"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AuthorizationCode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" AccessToken "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" DeviceCode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("adapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findById")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticate")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("email"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("adapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findOne")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("email"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br")])])])],1),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("Claims method is used by oidc-provider to expose this information in the userInfo endpoint.")])]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("We use the "),n("code",[t._v("$onInit")]),t._v(" hook to create the first account automatically. You can adapt the script to your needs.")])]),t._v(" "),n("h2",{attrs:{id:"interactions"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#interactions"}},[t._v("#")]),t._v(" Interactions")]),t._v(" "),n("p",[t._v("Interactions are the user flows in oidc-provider. For example, the login page is considered by oidc-provider as an\ninteraction.\nWe can define many interactions during the authentication flow, for example:")]),t._v(" "),n("ul",[n("li",[t._v("Login,")]),t._v(" "),n("li",[t._v("E-mail verification,")]),t._v(" "),n("li",[t._v("Password recovery,")]),t._v(" "),n("li",[t._v("Sharing account data consent,")]),t._v(" "),n("li",[t._v("etc.")])]),t._v(" "),n("p",[t._v("To have a working OIDC server with Ts.ED, we need to create at least a login and a consent interaction.\nTo start, we have to create the "),n("code",[t._v("Interactions")]),t._v(" controller which will be responsible to run all of our future\ncustom interactions.")]),t._v(" "),n("p",[t._v("In your controller's directory, create the "),n("code",[t._v("oidc/InteractionsCtrl.ts")]),t._v(" file and copy the following code:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PathParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Interactions"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("AbortInteraction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../interactions/AbortInteraction"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ConsentInteraction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../interactions/ConsentInteraction"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomInteraction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../interactions/CustomInteraction"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("LoginInteraction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../interactions/LoginInteraction"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Name")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Oidc"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Interactions")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n path"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/interaction/:uid"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this list define the priority of each interaction!")]),t._v("\n children"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("LoginInteraction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ConsentInteraction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" CustomInteraction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AbortInteraction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InteractionsCtrl")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:interaction?"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("prompt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"interaction"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" interaction"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcCtx")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("runInteraction")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("interaction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),n("p",[t._v("The controller Interactions exposes the routes to display any interaction. Here we expose the route\nGET "),n("code",[t._v("/interation/:uid")])]),t._v(" "),n("p",[t._v("The "),n("code",[t._v("uid")]),t._v(" is the unique session id used by oidc-provider to identify the current user flow.")])]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),n("p",[n("code",[t._v("children")]),t._v(" option define the priority order of each interaction. In our example, LoginInteraction have a priority over\nContentInteraction, CustomInteraction and AbortInteraction.\nChanging order her may affect the interaction behavior when the "),n("code",[t._v("/authorize")]),t._v(" endpoint is called by the consumer.")]),t._v(" "),n("p",[t._v("Another possibility is to define "),n("code",[t._v("priority")]),t._v(" option on "),n("ApiSymbolName",[t._v("Interaction")]),t._v(" decorator. In this case, the "),n("code",[t._v("children")]),t._v(" order\nwon't be\nhad an effect on the interaction priority.")],1)]),t._v(" "),n("p",[t._v("Now that we have our interaction controller, we can create our first interaction.")]),t._v(" "),n("p",[t._v("Create a new directory "),n("code",[t._v("interactions")]),t._v(". We will store all custom interactions in this directory.")]),t._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"LoginInteraction.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Constant"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Interaction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InteractionMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Prompt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Uid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("View"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-views"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Accounts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/Accounts"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Interaction")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n requestable"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Name")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Oidc"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LoginInteraction")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InteractionMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Constant")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"env"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n env"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n accounts"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Accounts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onCreate")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("View")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$prompt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcCtx")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Prompt")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" prompt"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Prompt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcSession")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" session"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Params")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Uid")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" uid"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Uid\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("checkClientId")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("interactionPrompt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Sign-in"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n flash"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("View")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("submit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" payload"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcCtx")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("checkInteractionName")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"login"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" account "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("accounts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("authenticate")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("password"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("account"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("interactionPrompt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n login_hint"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n title"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Sign-in"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n flash"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Invalid email or password."')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("interactionFinished")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n login"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n accountId"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" account"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("accountId\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"ConsentInteraction.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Interaction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InteractionMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcProvider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Prompt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("View"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-views"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Interaction")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"consent"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n requestable"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Name")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Oidc"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConsentInteraction")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InteractionMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n oidc"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcProvider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("View")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"interaction"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$prompt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcCtx")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" account "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findAccount")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("interactionPrompt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Authorize"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n account"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n flash"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/confirm"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("confirm")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcCtx")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Prompt")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" prompt"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Prompt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("checkInteractionName")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"consent"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" grant "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGrant")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" details "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" prompt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("details "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n missingOIDCScope"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n missingResourceScopes"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Record"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n missingOIDClaims"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("missingOIDCScope"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" missingOIDClaims"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" missingResourceScopes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" details"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("missingOIDCScope"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n grant"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("addOIDCScope")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("missingOIDCScope"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" "')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// use grant.rejectOIDCScope to reject a subset or the whole thing")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("missingOIDClaims"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n grant"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("addOIDCClaims")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("missingOIDCScope"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// use grant.rejectOIDCClaims to reject a subset or the whole thing")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("missingResourceScopes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// eslint-disable-next-line no-restricted-syntax")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("indicator"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scopes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("of")]),t._v(" Object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("entries")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("missingResourceScopes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n grant"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("addResourceScope")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("indicator"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scopes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('" "')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// use grant.rejectResourceScope to reject a subset or the whole thing")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" grantId "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" grant"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("save")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" consent"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("grantId"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// we don't have to pass grantId to consent, we're just modifying existing one")]),t._v("\n consent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("grantId "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" grantId"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("interactionFinished")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("consent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("mergeWithLastSubmission"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br"),n("span",{staticClass:"line-number"},[t._v("63")]),n("br"),n("span",{staticClass:"line-number"},[t._v("64")]),n("br"),n("span",{staticClass:"line-number"},[t._v("65")]),n("br"),n("span",{staticClass:"line-number"},[t._v("66")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"AbortInteraction.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Interaction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcProvider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InteractionMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("View"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-views"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Interaction")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"abort"')]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Name")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Oidc"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbortInteraction")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InteractionMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n oidc"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcProvider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("View")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"interaction"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$prompt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcCtx")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("interactionFinished")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n error"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"access_denied"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n error_description"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"End-User aborted interaction"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n mergeWithLastSubmission"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br")])])])],1),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[n("code",[t._v("$prompt")]),t._v(" is a special hook called by your Interactions controller.")])]),t._v(" "),n("p",[t._v("At this step, you can start the OIDC server and check the logs server to see if the well-known configuration\nhas been correctly exposed:")]),t._v(" "),n("div",{staticClass:"language-sh line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-sh"}},[n("code",[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2021")]),t._v("-01-04T07:35:31.523"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("INFO "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("TSED"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" - WellKnown is available on http://0.0.0.0:8083/.well-known/openid-configuration\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br")])]),n("p",[t._v("Try also to open the link in your browser!")]),t._v(" "),n("p",[t._v("Now, we need to add the Views to display our login page. Create a views directory on root level and create the following\nfiles:")]),t._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"login.ejs"}},[n("div",{staticClass:"language-ejs line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ejs"}},[n("code",[n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%-")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("include")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'partials/header.ejs'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("login-card"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%=")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" title ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%-")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("include")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'forms/login-form.ejs'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%-")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("include")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'partials/login-help.ejs'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%-")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("include")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'partials/footer.ejs'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])])])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"forms/login-form.ejs"}},[n("div",{staticClass:"language-ejs line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ejs"}},[n("code",[n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("flash"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%=")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" flash ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("autocomplete")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("off"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("action")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/interaction/"),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%=")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" uid ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("/login"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("required")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("email"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("email"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter an email"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("login_hint"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("autofocus")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("on"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token attr-name"}},[n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%=")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("login_hint ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("required")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("password"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("password"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("and password"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("login_hint"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("autofocus")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("on"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token attr-name"}},[n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("login login-submit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Sign-in"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"partials/header.ejs"}},[n("div",{staticClass:"language-ejs line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ejs"}},[n("code",[n("span",{pre:!0,attrs:{class:"token doctype"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("charset")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("viewport"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("width=device-width, initial-scale=1, shrink-to-fit=no"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("x-ua-compatible"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("ie=edge"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Sign-in"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("style")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token style"}},[n("span",{pre:!0,attrs:{class:"token language-css"}},[t._v("\n "),n("span",{pre:!0,attrs:{class:"token atrule"}},[n("span",{pre:!0,attrs:{class:"token rule"}},[t._v("@import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token url"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("url")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("https://fonts.googleapis.com/css?family=Roboto:400,100"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v("body")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-family")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Roboto'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sans-serif"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-top")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 25px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 25px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-card")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 40px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-top")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-bottom")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 10px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("width")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 274px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #F7F7F7"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0 auto 10px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0px 2px 2px "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("rgba")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" 0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" 0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" 0.3"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("overflow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" hidden"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-card + .login-card")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-top")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 10px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-card h1")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-weight")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 100"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2.3em"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-card [type=submit]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("width")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 100%"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" block"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 10px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("position")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" relative"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-card input[type=text], input[type=email], input[type=password]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 44px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 16px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("width")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 100%"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 10px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("-webkit-appearance")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" none"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("background")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #fff"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1px solid #d9d9d9"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-top")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1px solid #c0c0c0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0 8px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-sizing")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" border-box"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("-moz-box-sizing")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" border-box"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 14px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-family")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Arial'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sans-serif"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-weight")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 700"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 36px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0 8px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-submit")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("border")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #fff"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-shadow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0 1px "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("rgba")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("0.1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #4d90fe"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".google-button")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 40px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-width")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("background")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" white"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #737373"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("border-radius")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 5px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("white-space")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" nowrap"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1px 1px 0px 1px "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("rgba")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("0.05"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition-property")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" background-color"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" box-shadow"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition-duration")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 150ms"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition-timing-function")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" ease-in-out"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v("&:focus,\n &:hover")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1px 4px 5px 1px "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("rgba")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("0.1"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v("&:active")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("background-color")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #e5e5e5"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-shadow")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" none"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("transition-duration")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 10ms"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".google-button__icon")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" inline-block"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("vertical-align")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 8px 0 8px 8px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("width")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 18px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("height")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 18px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("box-sizing")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" border-box"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".google-button__icon--plus")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("width")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 27px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".google-button__text")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" inline-block"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("vertical-align")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" middle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0 24px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 14px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-weight")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" bold"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-family")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Roboto'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("arial"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("sans-serif"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-card a")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-decoration")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" none"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #666"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-weight")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 400"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" inline-block"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("opacity")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0.6"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-help")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #666"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("width")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 100%"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 12px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-client-image img")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 20px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("display")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" block"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" auto"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-right")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" auto"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("width")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 20%"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-card input[type=checkbox]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-bottom")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 10px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-card label")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #999"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".grant-debug")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-family")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Fixed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" monospace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("width")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 100%"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 12px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("color")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" #999"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".grant-debug div")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-top")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 10px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v(".login-help + form")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("margin-top")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 10px"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v("ul")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("font-weight")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 100"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-left")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 1em"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("list-style-type")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" circle"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v("li + ul, ul + li, li + li")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("padding-top")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 0.3em"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token selector"}},[t._v("button")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[t._v("cursor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" pointer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])])])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br"),n("span",{staticClass:"line-number"},[t._v("63")]),n("br"),n("span",{staticClass:"line-number"},[t._v("64")]),n("br"),n("span",{staticClass:"line-number"},[t._v("65")]),n("br"),n("span",{staticClass:"line-number"},[t._v("66")]),n("br"),n("span",{staticClass:"line-number"},[t._v("67")]),n("br"),n("span",{staticClass:"line-number"},[t._v("68")]),n("br"),n("span",{staticClass:"line-number"},[t._v("69")]),n("br"),n("span",{staticClass:"line-number"},[t._v("70")]),n("br"),n("span",{staticClass:"line-number"},[t._v("71")]),n("br"),n("span",{staticClass:"line-number"},[t._v("72")]),n("br"),n("span",{staticClass:"line-number"},[t._v("73")]),n("br"),n("span",{staticClass:"line-number"},[t._v("74")]),n("br"),n("span",{staticClass:"line-number"},[t._v("75")]),n("br"),n("span",{staticClass:"line-number"},[t._v("76")]),n("br"),n("span",{staticClass:"line-number"},[t._v("77")]),n("br"),n("span",{staticClass:"line-number"},[t._v("78")]),n("br"),n("span",{staticClass:"line-number"},[t._v("79")]),n("br"),n("span",{staticClass:"line-number"},[t._v("80")]),n("br"),n("span",{staticClass:"line-number"},[t._v("81")]),n("br"),n("span",{staticClass:"line-number"},[t._v("82")]),n("br"),n("span",{staticClass:"line-number"},[t._v("83")]),n("br"),n("span",{staticClass:"line-number"},[t._v("84")]),n("br"),n("span",{staticClass:"line-number"},[t._v("85")]),n("br"),n("span",{staticClass:"line-number"},[t._v("86")]),n("br"),n("span",{staticClass:"line-number"},[t._v("87")]),n("br"),n("span",{staticClass:"line-number"},[t._v("88")]),n("br"),n("span",{staticClass:"line-number"},[t._v("89")]),n("br"),n("span",{staticClass:"line-number"},[t._v("90")]),n("br"),n("span",{staticClass:"line-number"},[t._v("91")]),n("br"),n("span",{staticClass:"line-number"},[t._v("92")]),n("br"),n("span",{staticClass:"line-number"},[t._v("93")]),n("br"),n("span",{staticClass:"line-number"},[t._v("94")]),n("br"),n("span",{staticClass:"line-number"},[t._v("95")]),n("br"),n("span",{staticClass:"line-number"},[t._v("96")]),n("br"),n("span",{staticClass:"line-number"},[t._v("97")]),n("br"),n("span",{staticClass:"line-number"},[t._v("98")]),n("br"),n("span",{staticClass:"line-number"},[t._v("99")]),n("br"),n("span",{staticClass:"line-number"},[t._v("100")]),n("br"),n("span",{staticClass:"line-number"},[t._v("101")]),n("br"),n("span",{staticClass:"line-number"},[t._v("102")]),n("br"),n("span",{staticClass:"line-number"},[t._v("103")]),n("br"),n("span",{staticClass:"line-number"},[t._v("104")]),n("br"),n("span",{staticClass:"line-number"},[t._v("105")]),n("br"),n("span",{staticClass:"line-number"},[t._v("106")]),n("br"),n("span",{staticClass:"line-number"},[t._v("107")]),n("br"),n("span",{staticClass:"line-number"},[t._v("108")]),n("br"),n("span",{staticClass:"line-number"},[t._v("109")]),n("br"),n("span",{staticClass:"line-number"},[t._v("110")]),n("br"),n("span",{staticClass:"line-number"},[t._v("111")]),n("br"),n("span",{staticClass:"line-number"},[t._v("112")]),n("br"),n("span",{staticClass:"line-number"},[t._v("113")]),n("br"),n("span",{staticClass:"line-number"},[t._v("114")]),n("br"),n("span",{staticClass:"line-number"},[t._v("115")]),n("br"),n("span",{staticClass:"line-number"},[t._v("116")]),n("br"),n("span",{staticClass:"line-number"},[t._v("117")]),n("br"),n("span",{staticClass:"line-number"},[t._v("118")]),n("br"),n("span",{staticClass:"line-number"},[t._v("119")]),n("br"),n("span",{staticClass:"line-number"},[t._v("120")]),n("br"),n("span",{staticClass:"line-number"},[t._v("121")]),n("br"),n("span",{staticClass:"line-number"},[t._v("122")]),n("br"),n("span",{staticClass:"line-number"},[t._v("123")]),n("br"),n("span",{staticClass:"line-number"},[t._v("124")]),n("br"),n("span",{staticClass:"line-number"},[t._v("125")]),n("br"),n("span",{staticClass:"line-number"},[t._v("126")]),n("br"),n("span",{staticClass:"line-number"},[t._v("127")]),n("br"),n("span",{staticClass:"line-number"},[t._v("128")]),n("br"),n("span",{staticClass:"line-number"},[t._v("129")]),n("br"),n("span",{staticClass:"line-number"},[t._v("130")]),n("br"),n("span",{staticClass:"line-number"},[t._v("131")]),n("br"),n("span",{staticClass:"line-number"},[t._v("132")]),n("br"),n("span",{staticClass:"line-number"},[t._v("133")]),n("br"),n("span",{staticClass:"line-number"},[t._v("134")]),n("br"),n("span",{staticClass:"line-number"},[t._v("135")]),n("br"),n("span",{staticClass:"line-number"},[t._v("136")]),n("br"),n("span",{staticClass:"line-number"},[t._v("137")]),n("br"),n("span",{staticClass:"line-number"},[t._v("138")]),n("br"),n("span",{staticClass:"line-number"},[t._v("139")]),n("br"),n("span",{staticClass:"line-number"},[t._v("140")]),n("br"),n("span",{staticClass:"line-number"},[t._v("141")]),n("br"),n("span",{staticClass:"line-number"},[t._v("142")]),n("br"),n("span",{staticClass:"line-number"},[t._v("143")]),n("br"),n("span",{staticClass:"line-number"},[t._v("144")]),n("br"),n("span",{staticClass:"line-number"},[t._v("145")]),n("br"),n("span",{staticClass:"line-number"},[t._v("146")]),n("br"),n("span",{staticClass:"line-number"},[t._v("147")]),n("br"),n("span",{staticClass:"line-number"},[t._v("148")]),n("br"),n("span",{staticClass:"line-number"},[t._v("149")]),n("br"),n("span",{staticClass:"line-number"},[t._v("150")]),n("br"),n("span",{staticClass:"line-number"},[t._v("151")]),n("br"),n("span",{staticClass:"line-number"},[t._v("152")]),n("br"),n("span",{staticClass:"line-number"},[t._v("153")]),n("br"),n("span",{staticClass:"line-number"},[t._v("154")]),n("br"),n("span",{staticClass:"line-number"},[t._v("155")]),n("br"),n("span",{staticClass:"line-number"},[t._v("156")]),n("br"),n("span",{staticClass:"line-number"},[t._v("157")]),n("br"),n("span",{staticClass:"line-number"},[t._v("158")]),n("br"),n("span",{staticClass:"line-number"},[t._v("159")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"partials/footer.ejs"}},[n("div",{staticClass:"language-ejs line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ejs"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("grant-debug"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("details")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("summary")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token special-attr"}},[n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token value css language-css"}},[n("span",{pre:!0,attrs:{class:"token property"}},[t._v("text-align")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" center"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("(Click to expand) DEBUG information"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("strong")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("uid"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(": "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%=")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" uid ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("session"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n SESSION "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ========= "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%-")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" session ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n PARAMS "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ======== "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%-")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" dbg"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n PROMPT "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ======== "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%-")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" dbg"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prompt ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"partials/login-help.ejs"}},[n("div",{staticClass:"language-ejs line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ejs"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("login-help"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/interaction/"),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%=")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" uid ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("/custom"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("[ Booking sign-in ]"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/interaction/"),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%=")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" uid ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("/abort"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("[ Cancel ]"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tosUri"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%=")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tosUri ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("[ Terms of Service ]"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("policyUri"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%=")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("policyUri ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("[ Privacy Policy ]"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token ejs language-ejs"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("<%")]),n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" ")]),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%>")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])])])],1),t._v(" "),n("p",[t._v("The login page is ready to be displayed. To test it, open the following link:")]),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("http://localhost:8083/auth?client_id=client_id&response_type=id_token&scope=openid&nonce=foobar&redirect_uri=http://localhost:3000\n\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("figure",[n("img",{staticStyle:{"max-height":"400px"},attrs:{alt:"Oidc login page",src:a(749)}})]),t._v(" "),n("h2",{attrs:{id:"create-custom-interaction"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#create-custom-interaction"}},[t._v("#")]),t._v(" Create custom interaction")]),t._v(" "),n("p",[t._v("Here a custom interaction with extra methods to configure checks precondition and details information:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("View"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Constant"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Interaction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InteractionMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Prompt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Uid"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("interactionPolicy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" KoaContextWithOIDC"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Check "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" interactionPolicy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Check"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Interaction")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"custom"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n requestable"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Name")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Oidc"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomInteraction")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InteractionMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Constant")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"env"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n env"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onCreate")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * return checks conditions. See: https://github.com/panva/node-oidc-provider/blob/main/docs/README.md#interactionspolicy\n */")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("checks")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Check")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"no_session"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"End-User authentication is required"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("oidc"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("oidc"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("session"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("accountId"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// @ts-ignore")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" Check"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NO_NEED_TO_PROMPT")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// @ts-ignore")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" Check"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("REQUEST_PROMPT")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * return checks conditions. See: https://github.com/panva/node-oidc-provider/blob/main/docs/README.md#interactionspolicy\n */")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("details")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KoaContextWithOIDC"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("oidc"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("oidc"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("max_age "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("max_age"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" oidc"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("max_age"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("oidc"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("login_hint "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("login_hint"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" oidc"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("login_hint"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("oidc"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("id_token_hint "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id_token_hint"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" oidc"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id_token_hint"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("View")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"custom"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$prompt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcCtx")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Prompt")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" prompt"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Prompt"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcSession")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" session"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Params")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" params"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Uid")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" uid"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Uid\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("checkClientId")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("interactionPrompt")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Sign-in Custom"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n flash"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br"),n("span",{staticClass:"line-number"},[t._v("55")]),n("br"),n("span",{staticClass:"line-number"},[t._v("56")]),n("br"),n("span",{staticClass:"line-number"},[t._v("57")]),n("br"),n("span",{staticClass:"line-number"},[t._v("58")]),n("br"),n("span",{staticClass:"line-number"},[t._v("59")]),n("br"),n("span",{staticClass:"line-number"},[t._v("60")]),n("br"),n("span",{staticClass:"line-number"},[t._v("61")]),n("br"),n("span",{staticClass:"line-number"},[t._v("62")]),n("br"),n("span",{staticClass:"line-number"},[t._v("63")]),n("br"),n("span",{staticClass:"line-number"},[t._v("64")]),n("br"),n("span",{staticClass:"line-number"},[t._v("65")]),n("br"),n("span",{staticClass:"line-number"},[t._v("66")]),n("br"),n("span",{staticClass:"line-number"},[t._v("67")]),n("br")])]),n("p",[t._v("See more details on: https://github.com/panva/node-oidc-provider/blob/main/docs/README.md#interactionspolicy")]),t._v(" "),n("h2",{attrs:{id:"alter-configuration"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#alter-configuration"}},[t._v("#")]),t._v(" Alter configuration")]),t._v(" "),n("p",[t._v("Some part of the OIDC provider configuration needs function to work. And ideally these functions should have access to\nour Ts.ED Services.")]),t._v(" "),n("p",[t._v("It's possible to do that by listening the "),n("code",[t._v("$alterOidcConfiguration")]),t._v(" hook and inject the expected functions in the\nconfiguration:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("InjectContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Module"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("AuthorizationCode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" BackchannelAuthenticationRequest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" DeviceCode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" RefreshToken"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcSettings"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("KoaContextWithOIDC"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Provider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ResourceServer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Module")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OidcResourceIndicatorsModule")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("InjectContext")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" $ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// retrieve the Ts.ED context")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$alterOidcConfiguration")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcSettings"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("OidcSettings"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// example with the")]),t._v("\n config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("features"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("resourceIndicators "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n enabled"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n defaultResource"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultResource")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("bind")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n getResourceServerInfo"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResourceServerInfo")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("bind")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n useGrantedResource"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("useGrantedResource")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("bind")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultResource")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KoaContextWithOIDC"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("///")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://mydomain.com"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResourceServerInfo")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KoaContextWithOIDC"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" resourceIndicator"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" client"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("ResourceServer"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("///")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("useGrantedResource")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KoaContextWithOIDC"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AuthorizationCode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" RefreshToken "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" DeviceCode "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" BackchannelAuthenticationRequest\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br")])]),n("h2",{attrs:{id:"alter-oidc-policy"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#alter-oidc-policy"}},[t._v("#")]),t._v(" Alter OIDC policy")]),t._v(" "),n("p",[t._v("Ts.ED emits a special "),n("code",[t._v("$alterOidcPolicy")]),t._v(" event when @tsed/oidc-provider links interactions with OIDC policy. You can\nchange the policy configuration\nby adding "),n("code",[t._v("$alterOidcPolicy")]),t._v(" on InteractionsCtrl:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PathParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Interactions"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" DefaultPolicy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("LoginInteraction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../interactions/LoginInteraction"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Interactions")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n path"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/interaction/:uid"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n children"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n LoginInteraction "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// register its children interations")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InteractionsCtrl")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:name?"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("promptInteraction")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OidcCtx")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" OidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" oidcCtx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("runInteraction")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$alterOidcPolicy")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("policy"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" DefaultPolicy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// do something")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" policy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br")])]),n("h2",{attrs:{id:"implement-your-own-adapter"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#implement-your-own-adapter"}},[t._v("#")]),t._v(" Implement your own adapter")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("OidcAdapterMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/oidc-provider"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Adapter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/adapters"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomAdapter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" AdapterModel"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Adapter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OidcAdapterMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// implement all required methods")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Omit"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_id"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" expiresAt"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Date"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Model"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" expiresAt"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Date"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateOne")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("predicate"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" expiresAt"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Date"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("upsert")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Model"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" expiresAt"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Date"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findOne")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("predicate"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findById")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("predicate"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deleteOne")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("predicate"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deleteMany")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("predicate"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deleteById")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Model "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// if you use redis implement also the following methods")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findByUserCode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("userCode"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("findByUid")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("uid"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("destroy")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("revokeByGrantId")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grantId"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("consume")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("grantId"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("You can find original adapters from oidc-provider project\nhere: https://github.com/panva/node-oidc-provider/blob/main/example/adapters")])]),t._v(" "),n("h2",{attrs:{id:"debug"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#debug"}},[t._v("#")]),t._v(" Debug")]),t._v(" "),n("p",[t._v("Use "),n("code",[t._v("DEBUG=oidc-provider:*")]),t._v(" for debugging oidc-provider.")]),t._v(" "),n("h2",{attrs:{id:"support-oidc-provider"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#support-oidc-provider"}},[t._v("#")]),t._v(" Support oidc-provider")]),t._v(" "),n("p",[t._v("If you or your business uses "),n("a",{attrs:{href:"https://github.com/panva/node-oidc-provider",target:"_blank",rel:"noopener noreferrer"}},[t._v("oidc-provider"),n("OutboundLink")],1),t._v(", please consider becoming a\nsponsor, so we can continue maintaining it and adding new features carefree.")]),t._v(" "),n("h2",{attrs:{id:"author"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[t._v("#")]),t._v(" Author")]),t._v(" "),n("GithubContributors",{attrs:{users:"['Romakita']"}}),t._v(" "),n("h2",{attrs:{id:"maintainers"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[t._v("#")]),t._v(" Maintainers")]),t._v(" "),n("GithubContributors",{attrs:{users:"['Romakita', 'camfou']"}}),t._v(" "),n("div",{staticClass:"flex items-center justify-center p-5"},[n("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[t._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/13.c45e55f8.js b/assets/js/13.c45e55f8.js new file mode 100644 index 00000000000..3dc067ed252 --- /dev/null +++ b/assets/js/13.c45e55f8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{750:function(t,s,a){t.exports=a.p+"assets/img/socketio.f76a6256.png"},821:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"socket-io"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#socket-io"}},[t._v("#")]),t._v(" Socket.io")]),t._v(" "),n("Banner",{staticStyle:{"margin-left":"-40px"},attrs:{src:"/socket-io.png",href:"https://socket.io",height:"180"}}),t._v(" "),n("p",[t._v("Socket.io enables real-time bidirectional event-based communication. It works on every platform, browser or device, focusing equally on reliability and speed.")]),t._v(" "),n("Projects",{attrs:{type:"projects"}}),t._v(" "),n("h2",{attrs:{id:"installation"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),n("p",[t._v("Before using Socket.io, we need to install the "),n("a",{attrs:{href:"https://www.npmjs.com/package/socket.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("Socket.io"),n("OutboundLink")],1),t._v(" module.")]),t._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save socket.io @types/socket.io @tsed/socketio\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save-dev @tsed/socketio-testing\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("p",[t._v("Then add the following configuration in your server "),n("RouterLink",{attrs:{to:"/docs/configuration.html"}},[t._v("Configuration")]),t._v(":")],1),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// import socket.io Ts.ED module")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n socketIO"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ... see configuration")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("h2",{attrs:{id:"configuration"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("path")]),t._v(": name of the path to capture (/socket.io).")]),t._v(" "),n("li",[n("code",[t._v("serveClient")]),t._v(": whether to serve the client files (true).")]),t._v(" "),n("li",[n("code",[t._v("adapter")]),t._v(": the adapter to use. Defaults to an instance of the Adapter that ships with Socket.io which is memory based. See "),n("a",{attrs:{href:"https://github.com/socketio/socket.io-adapter",target:"_blank",rel:"noopener noreferrer"}},[t._v("socket.io-adapter"),n("OutboundLink")],1),t._v(".")]),t._v(" "),n("li",[n("code",[t._v("cors")]),t._v(": Cors configuration.")]),t._v(" "),n("li",[n("code",[t._v("parser")]),t._v(": the parser to use. Defaults to an instance of the Parser that ships with Socket.io. See "),n("a",{attrs:{href:"https://github.com/socketio/socket.io-parser",target:"_blank",rel:"noopener noreferrer"}},[t._v("socket.io-parser"),n("OutboundLink")],1),t._v(".")])]),t._v(" "),n("p",[t._v("For more information see "),n("a",{attrs:{href:"https://socket.io/docs/v4/server-api",target:"_blank",rel:"noopener noreferrer"}},[t._v("Socket.io documentation"),n("OutboundLink")],1)]),t._v(" "),n("h2",{attrs:{id:"socket-service"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#socket-service"}},[t._v("#")]),t._v(" Socket Service")]),t._v(" "),n("blockquote",[n("p",[t._v("Socket.io allows you to “namespace” your sockets, which essentially means assigning different endpoints or paths.\nThis is a useful feature to minimize the number of resources (TCP connections) and at the same time separate concerns within your application\nby introducing separation between communication channels. See "),n("a",{attrs:{href:"https://socket.io/docs/v4/namespaces/",target:"_blank",rel:"noopener noreferrer"}},[t._v("namespace documentation"),n("OutboundLink")],1),t._v(".")])]),t._v(" "),n("p",[t._v("All Socket service work under a namespace and you can create one Socket service per namespace.")]),t._v(" "),n("p",[t._v("Example:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Nsp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Reason"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SocketIO "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"socket.io"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-namespace"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MySocketService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Nsp")])]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Nsp")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-other-namespace"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n nspOther"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// communication between two namespace")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("@"),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" io"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Triggered the namespace is created\n */")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onNamespaceInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Triggered when a new client connects to the Namespace.\n */")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onConnection")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Socket")])]),t._v(" socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketSession")])]),t._v(" session"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Triggered when a client disconnects from the Namespace.\n */")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onDisconnect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Socket")])]),t._v(" socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Reason")])]),t._v(" reason"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br")])]),n("blockquote",[n("p",[n("ApiSymbolName",[t._v("SocketService")]),t._v(" inherits from "),n("ApiSymbolName",[t._v("Service")]),t._v(" decorator, meaning a SocketService can be injected to another Service, Controller or Middleware.")],1)]),t._v(" "),n("p",[t._v("Example:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MySocketService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Namespace")])]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("helloAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nsp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("emit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"hi"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"everyone!"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("p",[t._v("Then, you can inject your socket service into another Service, Controller, etc. as following:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MySocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/MySocketService"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyCtrl")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" mySocketService"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MySocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/allo"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("allo")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mySocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("helloAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"is sent"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("h3",{attrs:{id:"dynamic-namespaces"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#dynamic-namespaces"}},[t._v("#")]),t._v(" Dynamic Namespaces")]),t._v(" "),n("blockquote",[n("p",[t._v("Socket.io "),n("a",{attrs:{href:"https://socket.io/docs/v4/namespaces/#dynamic-namespaces",target:"_blank",rel:"noopener noreferrer"}},[t._v("dynamic namespaces"),n("OutboundLink")],1),t._v(" can be implemented using "),n("ApiSymbolName",[t._v("SocketService")]),t._v(", "),n("ApiSymbolName",[t._v("Namespace")]),t._v(" and "),n("ApiSymbolName",[t._v("Nsp")])],1)]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Nsp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketNsp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Input"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SocketIO "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"socket.io"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token regex"}},[n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),n("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[t._v("my-namespace-.+")]),n("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MySocketService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// This will be the parent namespace.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Nsp")])]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Input")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketNsp")])]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketNsp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// nsp is the actual namespace of this call.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br")])]),n("h3",{attrs:{id:"declaring-an-input-event"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#declaring-an-input-event"}},[t._v("#")]),t._v(" Declaring an Input Event")]),t._v(" "),n("p",[n("ApiSymbolName",[t._v("Input")]),t._v(" decorator declares a method as a new handler for a specific "),n("code",[t._v("event")]),t._v(".")],1),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Args"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Input"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-namespace"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MySocketService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Input")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Args")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" userName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Socket")])]),t._v(" socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Namespace")])]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("userName"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("ul",[n("li",[n("ApiSymbolName",[t._v("Args")]),t._v(" : List of the parameters sent by the input event.")],1),t._v(" "),n("li",[n("ApiSymbolName",[t._v("Socket")]),t._v(" : Socket instance.")],1),t._v(" "),n("li",[n("ApiSymbolName",[t._v("Namespace")]),t._v(" <"),n("a",{attrs:{href:"https://socket.io/docs/v4/namespaces/",target:"_blank",rel:"noopener noreferrer"}},[t._v("SocketIO.Namespace"),n("OutboundLink")],1),t._v(">: Namespace instance.")],1),t._v(" "),n("li",[n("ApiSymbolName",[t._v("Nsp")]),t._v(" <"),n("a",{attrs:{href:"https://socket.io/docs/rooms-and-namespaces/#",target:"_blank",rel:"noopener noreferrer"}},[t._v("SocketIO.Namespace"),n("OutboundLink")],1),t._v(">: Namespace instance.")],1),t._v(" "),n("li",[n("ApiSymbolName",[t._v("SocketNsp")]),t._v(" <"),n("a",{attrs:{href:"https://socket.io/docs/v4/namespaces/",target:"_blank",rel:"noopener noreferrer"}},[t._v("SocketIO.Namespace"),n("OutboundLink")],1),t._v(">: Namespace instance from socket.")],1)]),t._v(" "),n("h3",{attrs:{id:"send-a-response"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#send-a-response"}},[t._v("#")]),t._v(" Send a response")]),t._v(" "),n("p",[t._v("You have many choices to send a response to your client. Ts.ED offers some decorators to send a response:")]),t._v(" "),n("img",{staticStyle:{"max-width":"100%"},attrs:{alt:"socketio",src:a(750)}}),t._v(" "),n("p",[t._v("Example:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Args"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Emit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Input"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-namespace"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MySocketService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Input")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Emit")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"responseEventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or Broadcast or BroadcastOthers")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Args")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" userName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Socket")])]),t._v(" socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Message "')]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" userName"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("All methods accept a promise as returned value. Ts.ED handles promise before returning a response to your consumer.")])]),t._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),n("p",[t._v("Return value is only possible when the method is decorated by "),n("ApiSymbolName",[t._v("Emit")]),t._v(", "),n("ApiSymbolName",[t._v("Broadcast")]),t._v(" and "),n("ApiSymbolName",[t._v("BroadcastOthers")]),t._v(".")],1)]),t._v(" "),n("h3",{attrs:{id:"socket-session"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#socket-session"}},[t._v("#")]),t._v(" Socket Session")]),t._v(" "),n("p",[t._v("Ts.ED creates a new session for each socket.")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Args"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Emit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Input"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-namespace"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MySocketService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Input")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Emit")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"responseEventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or Broadcast or BroadcastOthers")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Args")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" userName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketSession")])]),t._v(" session"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" user "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n user"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" userName"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n session"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" user"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" user"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("h3",{attrs:{id:"middlewares"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#middlewares"}},[t._v("#")]),t._v(" Middlewares")]),t._v(" "),n("p",[t._v("A middleware can also be used on a "),n("ApiSymbolName",[t._v("SocketService")]),t._v(" either on a class or on a method.")],1),t._v(" "),n("p",[t._v("Here is an example of a middleware:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Args"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("deserialize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/json-mapper"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("User"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../models/User"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketMiddleware")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserConverterSocketMiddleware")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Args")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" args"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("user"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" args"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// update Arguments")]),t._v("\n user "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("deserialize")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("user"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" User"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" useAlias"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("user"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("The user instance will be forwarded to the next middleware and to your decorated method.")])]),t._v(" "),n("p",[t._v("You can also declare a middleware to handle an error with "),n("ApiSymbolName",[t._v("SocketMiddlewareError")]),t._v(".\nHere is an example:")],1),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketErr"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketEventName"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketMiddlewareError"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketMiddlewareError")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ErrorHandlerSocketMiddleware")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketEventName")])]),t._v(" eventName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketErr")])]),t._v(" err"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Socket")])]),t._v(" socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("emit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"error"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("message"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"An error has occured"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("p",[t._v("Two decorators are provided to attach your middleware on the right place:")]),t._v(" "),n("ul",[n("li",[n("ApiSymbolName",[t._v("SocketUseBefore")]),t._v(" will call your middleware before the class method,")],1),t._v(" "),n("li",[n("ApiSymbolName",[t._v("SocketUseAfter")]),t._v(" will call your middleware after the class method.")],1)]),t._v(" "),n("p",[t._v("Both decorators can be used as a class decorator or as a method decorator.\nThe call sequence is the following for each event request:")]),t._v(" "),n("ul",[n("li",[t._v("Middlewares attached with "),n("ApiSymbolName",[t._v("SocketUseBefore")]),t._v(" on class,")],1),t._v(" "),n("li",[t._v("Middlewares attached with "),n("ApiSymbolName",[t._v("SocketUseBefore")]),t._v(" on method,")],1),t._v(" "),n("li",[t._v("The method,")]),t._v(" "),n("li",[t._v("Send response if the method is decorated with "),n("ApiSymbolName",[t._v("Emit")]),t._v(", "),n("ApiSymbolName",[t._v("Broadcast")]),t._v(" or "),n("ApiSymbolName",[t._v("BroadcastOthers")]),t._v(",")],1),t._v(" "),n("li",[t._v("Middlewares attached with "),n("ApiSymbolName",[t._v("SocketUseAfter")]),t._v(" on method,")],1),t._v(" "),n("li",[t._v("Middlewares attached with "),n("ApiSymbolName",[t._v("SocketUseAfter")]),t._v(" on class.")],1)]),t._v(" "),n("p",[t._v("Middlewares chain uses the "),n("code",[t._v("Promise")]),t._v(" to run it. If one of this middlewares/method emits an error, the first middleware error will be called.")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketUseAfter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketUseBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Emit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Input"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Args"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UserConverterSocketMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ErrorHandlerSocketMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("User"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../models/User"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-namespace"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketUseBefore")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UserConverterSocketMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// global version")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketUseAfter")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ErrorHandlerSocketMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MySocketService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Input")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Emit")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"responseEventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or Broadcast or BroadcastOthers")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketUseBefore")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UserConverterSocketMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketUseAfter")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ErrorHandlerSocketMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Args")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" user"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" User"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("user"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" user"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br")])]),n("h2",{attrs:{id:"decorators"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[t._v("#")]),t._v(" Decorators")]),t._v(" "),n("ApiList",{attrs:{query:"module.match('@tsed/socketio') && symbolType === 'decorator'"}}),t._v(" "),n("h2",{attrs:{id:"connecting-the-client"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#connecting-the-client"}},[t._v("#")]),t._v(" Connecting the client")]),t._v(" "),n("p",[t._v("Once you have the socket set up on the server, you will want to connect up your client. Here are a few examples based on different configurations and namespaces.")]),t._v(" "),n("h3",{attrs:{id:"with-default-config"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#with-default-config"}},[t._v("#")]),t._v(" With default config")]),t._v(" "),n("p",[t._v("With this in your server configuration")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n socketIO"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// uses all default values")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[t._v("And this in your service")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Nsp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SocketIO "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"socket.io"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-socket-namespace"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MySocketService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Nsp")])]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// a map to keep clients by any id you like, a userId or whatever.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" clients"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Map"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("@"),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("IO")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" io"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Triggered when a new client connects to the Namespace.\n */")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onConnection")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Socket")])]),t._v(" socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIO"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketSession")])]),t._v(" session"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"===== CONNECTED A CLIENT ====="')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("===== SOCKET ID ")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v(" =====")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clients"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// if you pass in a query of some kind you could use an id passed from the front end")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// instead of the socket id, like this.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" yourId"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handshake"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("query"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("yourId"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("toString")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("yourId"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clients"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("yourId"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// setup a method to send data to all clients")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// you can use this from any other service or controller.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("broadcast")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("someData"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nsp"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("emit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"event_name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" someData"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// method to send to a targeted client")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendToSingleClient")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idToSendTo"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" someData"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" socket "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clients"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idToSendTo"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("emit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" someData"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br")])]),n("p",[t._v("In plain javascript you could connect like this.")]),t._v(" "),n("div",{staticClass:"language-html line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-html"}},[n("code",[n("span",{pre:!0,attrs:{class:"token doctype"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("lang")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("en"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("charset")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("UTF-8"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("X-UA-Compatible"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("IE=edge"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("viewport"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("width=device-width, initial-scale=1.0"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Socket Test"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://localhost:8083/socket.io/socket.io.js"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}}),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}},[n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" socket "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("io")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8083/my-socket-namespace?yourId=1234"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("path")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/socket.io/my-socket-namespace/'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"connect"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'connected to server'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// handle the event sent with socket.send()")]),t._v("\n socket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"disconnect"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"disconnected"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br")])]),n("h2",{attrs:{id:"testing"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[t._v("#")]),t._v(" Testing "),n("Badge",{attrs:{text:"v6.55.0+"}})],1),t._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"Jest"}},[n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformTest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformExpress"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Emit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Input"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketIOServer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketUseBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("SocketClientService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio-testing"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Socket "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" IOSocket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"socket.io"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./app/Server"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TestWS")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" io"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIOServer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onConnection")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IOSocket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onDisconnect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IOSocket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Input")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"input:scenario1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Emit")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"output:scenario1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("scenario1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"My message"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Socket integration"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n PlatformTest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n platform"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformExpress"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n listen"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n httpPort"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("8999")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n imports"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("TestWS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"RoomWS: eventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should return the data"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" service "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SocketClientService"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SocketClientService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" client "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" service"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" client2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" service"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("resolve"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"output:scenario1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"My message"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("resolve")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("emit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"input:scenario1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"Mocha"}},[n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformTest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformExpress"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Emit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Input"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketIOServer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketSession"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SocketUseBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("SocketClientService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/socketio-testing"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("expect"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"chai"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Socket "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" IOSocket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"socket.io"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./app/Server"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SocketService")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TestWS")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" io"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SocketIOServer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onConnection")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IOSocket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onDisconnect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socket"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IOSocket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nsp"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Namespace"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Input")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"input:scenario1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Emit")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"output:scenario1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("scenario1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"My message"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Socket integration"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n PlatformTest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n platform"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformExpress"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n listen"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n httpPort"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("8999")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n imports"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("TestWS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("after")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"RoomWS: eventName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should return the data"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" service "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SocketClientService"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SocketClientService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" client "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" service"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" client2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" service"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("eq")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client2"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("resolve"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"output:scenario1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("eq")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"My message"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("resolve")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n client"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("emit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"input:scenario1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br"),n("span",{staticClass:"line-number"},[t._v("28")]),n("br"),n("span",{staticClass:"line-number"},[t._v("29")]),n("br"),n("span",{staticClass:"line-number"},[t._v("30")]),n("br"),n("span",{staticClass:"line-number"},[t._v("31")]),n("br"),n("span",{staticClass:"line-number"},[t._v("32")]),n("br"),n("span",{staticClass:"line-number"},[t._v("33")]),n("br"),n("span",{staticClass:"line-number"},[t._v("34")]),n("br"),n("span",{staticClass:"line-number"},[t._v("35")]),n("br"),n("span",{staticClass:"line-number"},[t._v("36")]),n("br"),n("span",{staticClass:"line-number"},[t._v("37")]),n("br"),n("span",{staticClass:"line-number"},[t._v("38")]),n("br"),n("span",{staticClass:"line-number"},[t._v("39")]),n("br"),n("span",{staticClass:"line-number"},[t._v("40")]),n("br"),n("span",{staticClass:"line-number"},[t._v("41")]),n("br"),n("span",{staticClass:"line-number"},[t._v("42")]),n("br"),n("span",{staticClass:"line-number"},[t._v("43")]),n("br"),n("span",{staticClass:"line-number"},[t._v("44")]),n("br"),n("span",{staticClass:"line-number"},[t._v("45")]),n("br"),n("span",{staticClass:"line-number"},[t._v("46")]),n("br"),n("span",{staticClass:"line-number"},[t._v("47")]),n("br"),n("span",{staticClass:"line-number"},[t._v("48")]),n("br"),n("span",{staticClass:"line-number"},[t._v("49")]),n("br"),n("span",{staticClass:"line-number"},[t._v("50")]),n("br"),n("span",{staticClass:"line-number"},[t._v("51")]),n("br"),n("span",{staticClass:"line-number"},[t._v("52")]),n("br"),n("span",{staticClass:"line-number"},[t._v("53")]),n("br"),n("span",{staticClass:"line-number"},[t._v("54")]),n("br")])])])],1),t._v(" "),n("h2",{attrs:{id:"author"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[t._v("#")]),t._v(" Author")]),t._v(" "),n("GithubContributors",{attrs:{users:"['Romakita', 'superkaleider']"}}),t._v(" "),n("h2",{attrs:{id:"maintainers"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[t._v("#")]),t._v(" Maintainers "),n("Badge",{attrs:{text:"Help wanted"}})],1),t._v(" "),n("GithubContributors",{attrs:{users:"['Romakita']"}})],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/14.f59ceae9.js b/assets/js/14.f59ceae9.js new file mode 100644 index 00000000000..bf14407ef45 --- /dev/null +++ b/assets/js/14.f59ceae9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{755:function(t,s,e){"use strict";e.r(s);var a={name:"SupportOptions"},o=e(1),n=Object(o.a)(a,(function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("div",[e("ul",{staticClass:"reset-list flex justify-center align-center p-3 flex-wrap -mx-2"},[e("li",{staticClass:"p-2"},[e("Button",{attrs:{"bg-color":"button-white",color:"blue",title:"Become a backer or sponsor on OpenCollective",href:"https://opencollective.com/tsed"}},[e("BxIcon",{staticClass:"mr-1",attrs:{name:"bx-heart"}}),t._v("\n OpenCollective\n ")],1)],1),t._v(" "),e("li",{staticClass:"p-2"},[e("Button",{attrs:{"bg-color":"button-white",color:"blue",title:"Become a backer or sponsor on Github sponsor",href:"https://github.com/sponsors/Romakita"}},[e("BxIcon",{staticClass:"mr-1",attrs:{name:"bxl-github"}}),t._v("\n Github sponsor\n ")],1)],1),t._v(" "),e("li",{staticClass:"p-2"},[e("Button",{attrs:{"bg-color":"button-white",color:"blue",title:"Send a one-time donation",href:"https://paypal.me/romainlenzotti"}},[e("BxIcon",{staticClass:"mr-1",attrs:{name:"bxl-paypal"}}),t._v("\n Paypal\n ")],1)],1)]),t._v(" "),e("h4",{staticClass:"text-center font-bold"},[t._v("Or")]),t._v(" "),e("ul",{staticClass:"reset-list flex justify-center align-center p-3 mb-5"},[e("li",{staticClass:"p-2"},[e("Button",{staticClass:"typeform-share",attrs:{"data-mode":"popup",href:"/contact"}},[e("BxIcon",{staticClass:"mr-1",attrs:{name:"bx-message-alt-dots"}}),t._v("\n Contact us directly\n ")],1)],1)])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/15.c680e755.js b/assets/js/15.c680e755.js new file mode 100644 index 00000000000..bfeb5c29105 --- /dev/null +++ b/assets/js/15.c680e755.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{756:function(t,s,o){"use strict";o.r(s);var e=o(1),a=Object(e.a)({},(function(){var t=this,s=t.$createElement,o=t._self._c||s;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"contact"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#contact"}},[t._v("#")]),t._v(" Contact")]),t._v(" "),o("div",{staticClass:"custom-block warning"},[o("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),o("p",[t._v("Contact us by e-mail is only for a commercial proposition or "),o("a",{attrs:{href:"/support"}},[t._v("premium sponsors")]),t._v(", not to have free support.")])]),t._v(" "),o("p",[t._v("Please use one of the following community channels for your issue:")]),t._v(" "),o("ul",{staticClass:"reset-list flex justify-center align-center p-3 flex-wrap -mx-2"},[o("li",{staticClass:"p-2"},[o("Button",{attrs:{"bg-color":"button-white",color:"blue",title:"Slack",href:"https://slack.tsed.io"}},[o("BxIcon",{staticClass:"mr-1",attrs:{name:"bxl-slack"}}),t._v("\n Slack\n ")],1)],1),t._v(" "),o("li",{staticClass:"p-2"},[o("Button",{attrs:{"bg-color":"button-white",color:"blue",title:"Github discussions",href:"https://github.com/tsedio/tsed/discussions"}},[o("BxIcon",{staticClass:"mr-1",attrs:{name:"bxl-github"}}),t._v("\n Github discussions\n ")],1)],1),t._v(" "),o("li",{staticClass:"p-2"},[o("Button",{attrs:{"bg-color":"button-white",color:"blue",title:"Github issues",href:"https://github.com/tsedio/tsed/issues"}},[o("BxIcon",{staticClass:"mr-1",attrs:{name:"bxl-github"}}),t._v("\n Github issues\n ")],1)],1)]),t._v(" "),o("div",{staticClass:"custom-block tip"},[o("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),o("p",[t._v("Keep in mind, Ts.ED is "),o("strong",[t._v("open-source")]),t._v(" but a "),o("strong",[t._v("private support isn’t free")]),t._v(".\nWe always, encourage all peoples to ask his question on our community channel to get a quick answers from the community\nnor from me.\nMaybe, somebody have the same issue and can help you!")])]),t._v(" "),o("div",{staticClass:"text-center mt-5"},[o("Button",{staticClass:"typeform-share",attrs:{"data-mode":"popup",href:"https://form.typeform.com/to/uJLP7anG"}},[o("BxIcon",{staticClass:"mr-1",attrs:{name:"bx-message-alt-dots"}}),t._v("Contact us")],1)],1)])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/16.53355621.js b/assets/js/16.53355621.js new file mode 100644 index 00000000000..4012a80e6fa --- /dev/null +++ b/assets/js/16.53355621.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{757:function(e,t,s){"use strict";s.r(t);var a=s(1),n=Object(a.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"contributing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contributing"}},[e._v("#")]),e._v(" Contributing")]),e._v(" "),s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[e._v("#")]),e._v(" Introduction")]),e._v(" "),s("p",[e._v("First, thank you for considering contributing to Ts.ED! It is people like you that make the open source community such a great community! 😊")]),e._v(" "),s("p",[e._v("We welcome any type of contribution, not just code. You can help with:")]),e._v(" "),s("ul",[s("li",[e._v("QA: file bug reports, the more details you can give the better (e.g. screenshots with the console open).")]),e._v(" "),s("li",[e._v("Marketing: writing blog posts, how to's, printing stickers....")]),e._v(" "),s("li",[e._v("Community: presenting the project at meetups, organizing a dedicated meetup for the local community....")]),e._v(" "),s("li",[e._v("Code: take a look at the "),s("a",{attrs:{href:"https://github.com/tsedio/tsed/issues",target:"_blank",rel:"noopener noreferrer"}},[e._v("open issues"),s("OutboundLink")],1),e._v(". Even if you can't write code, commenting on them and showing that you care about a given issue matters. It helps us triage them.")]),e._v(" "),s("li",[e._v("Money: we welcome financial contributions in full transparency on our "),s("a",{attrs:{href:"https://opencollective.com/tsed",target:"_blank",rel:"noopener noreferrer"}},[e._v("open collective"),s("OutboundLink")],1),e._v(".")])]),e._v(" "),s("h2",{attrs:{id:"your-first-contribution"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#your-first-contribution"}},[e._v("#")]),e._v(" Your First Contribution")]),e._v(" "),s("p",[e._v("Working on your first Pull Request? You can learn how from this free series: "),s("a",{attrs:{href:"https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github",target:"_blank",rel:"noopener noreferrer"}},[e._v("How to Contribute to an Open Source Project on GitHub"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("h2",{attrs:{id:"submitting-code"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#submitting-code"}},[e._v("#")]),e._v(" Submitting code")]),e._v(" "),s("p",[e._v("Any code change should be submitted as a pull request. The description should explain what the code does and give steps to execute it. The pull request should also contain tests.")]),e._v(" "),s("p",[e._v("The bigger the pull request, the longer it will take to review and merge. Try to break down large pull requests in smaller chunks that are easier to review and merge. It is also always helpful to have some context for your pull request. What was the purpose? Why does it matter to you?")]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("Ts.ED project uses "),s("a",{attrs:{href:"https://www.conventionalcommits.org/en/v1.0.0-beta.4/",target:"_blank",rel:"noopener noreferrer"}},[e._v("conventional commits"),s("OutboundLink")],1),e._v(" as format commit message.")]),e._v(" "),s("p",[e._v("Release note and tagging version are based on the message commits.\nIf you don't follow the format, our CI won't be able to increment the version correctly and your feature won't be released on NPM.")]),e._v(" "),s("p",[e._v("To write your commit message, see "),s("a",{attrs:{href:"https://www.conventionalcommits.org/en/v1.0.0-beta.4/",target:"_blank",rel:"noopener noreferrer"}},[e._v("convention page here"),s("OutboundLink")],1)])]),e._v(" "),s("h2",{attrs:{id:"financial-contributions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#financial-contributions"}},[e._v("#")]),e._v(" Financial contributions")]),e._v(" "),s("p",[e._v('We also welcome financial contributions in full transparency on our open collective. Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our '),s("a",{attrs:{href:"https://opencollective.com/tsed",target:"_blank",rel:"noopener noreferrer"}},[e._v("open collective"),s("OutboundLink")],1),e._v(" by the core contributors, and the person who filed the expense will be reimbursed.")]),e._v(" "),s("h2",{attrs:{id:"questions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#questions"}},[e._v("#")]),e._v(" Questions")]),e._v(" "),s("p",[e._v("If you have any questions, create an "),s("a",{attrs:{href:"https://github.com/tsedio/tsed/issues",target:"_blank",rel:"noopener noreferrer"}},[e._v("issue"),s("OutboundLink")],1),e._v(" (protip: do a quick search first to see if someone else didn't ask the same question before!). You can also reach us at hello@tsed.opencollective.com.")]),e._v(" "),s("h2",{attrs:{id:"how-to-work-on-ts-ed"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#how-to-work-on-ts-ed"}},[e._v("#")]),e._v(" How to work on Ts.ED")]),e._v(" "),s("h3",{attrs:{id:"setup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup"}},[e._v("#")]),e._v(" Setup")]),e._v(" "),s("p",[e._v("Clone your fork of the repository:")]),e._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" clone https://github.com/YOUR_USERNAME/tsed.git\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("p",[e._v("Install npm dependencies with yarn (not with NPM!):")]),e._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("blockquote",[s("p",[e._v("After installing dependencies, yarn/npm run the "),s("code",[e._v("postinstall")]),e._v(" hook and mount all packages with "),s("code",[e._v("npm link")]),e._v(" (e.g. "),s("code",[e._v("yarn run repo:bootstrap")]),e._v(").")])]),e._v(" "),s("p",[e._v("Compile TypeScript:")]),e._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("tsc\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# or")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" tsc\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# or")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run tsc\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br")])]),s("h3",{attrs:{id:"test"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#test"}},[e._v("#")]),e._v(" Test")]),e._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("test")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# or")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("test")]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br")])]),s("h3",{attrs:{id:"gflow-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#gflow-optional"}},[e._v("#")]),e._v(" Gflow (optional)")]),e._v(" "),s("p",[s("a",{attrs:{href:"https://www.npmjs.com/package/gflow",target:"_blank",rel:"noopener noreferrer"}},[e._v("Gflow"),s("OutboundLink")],1),e._v(" is a command line tool to help developers with the Git process used in Ts.ED.")]),e._v(" "),s("p",[e._v("Gflow helps you create a branch from production, rebase and run the tests before pushing your branch on your remote repository.")]),e._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -g gflow\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("h3",{attrs:{id:"start-a-feature-branch"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-a-feature-branch"}},[e._v("#")]),e._v(" Start a feature branch")]),e._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" fetch\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" branch --no-track -b feat-branch-name origin/production "),s("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# !IMPORTANT")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[e._v("## OR")]),e._v("\ngflow new feat name_of_feat\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br")])]),s("h3",{attrs:{id:"commit-push-a-feature"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#commit-push-a-feature"}},[e._v("#")]),e._v(" Commit & Push a feature")]),e._v(" "),s("p",[e._v("This command rebases your branch feature from the production branch, runs the test, and pushes your branch.")]),e._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" commit -m "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"feat(domain): Your message"')]),e._v("\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("blockquote",[s("p",[e._v("To write your commit message see "),s("a",{attrs:{href:"https://www.conventionalcommits.org/en/v1.0.0-beta.4/",target:"_blank",rel:"noopener noreferrer"}},[e._v("convention page"),s("OutboundLink")],1),e._v(".")])]),e._v(" "),s("p",[e._v("Then:")]),e._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("test")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" fetch\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" rebase origin/production\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" push -f\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# OR using gflow (run fetch, rebase and push for you)")]),e._v("\ngflow push\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br"),s("span",{staticClass:"line-number"},[e._v("2")]),s("br"),s("span",{staticClass:"line-number"},[e._v("3")]),s("br"),s("span",{staticClass:"line-number"},[e._v("4")]),s("br"),s("span",{staticClass:"line-number"},[e._v("5")]),s("br"),s("span",{staticClass:"line-number"},[e._v("6")]),s("br"),s("span",{staticClass:"line-number"},[e._v("7")]),s("br")])]),s("p",[e._v("When your feature is ready to review, you can open a PR on Ts.ED github.")]),e._v(" "),s("h3",{attrs:{id:"finish-a-feature-repo-owner-and-maintainers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#finish-a-feature-repo-owner-and-maintainers"}},[e._v("#")]),e._v(" Finish a feature (repo owner and maintainers)")]),e._v(" "),s("p",[e._v("After the PR has been accepted, the feature will be automatically merged on the master branch, but\nyour feature isn't merged with the production branch.")]),e._v(" "),s("p",[e._v("To publish your feature on the production branch you need to run this command:")]),e._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("gflow finish\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("NOTE")]),e._v(" "),s("p",[e._v("This action works only on the Ts.ED repository (not on your fork).")])]),e._v(" "),s("h3",{attrs:{id:"write-documentation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#write-documentation"}},[e._v("#")]),e._v(" Write documentation")]),e._v(" "),s("p",[e._v("Ts.ED uses docsify to convert markdown to HTML. In addition, all documentation in your code will be used to generate\nthe API documentation. To preview your comments on a class you can run this command:")]),e._v(" "),s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("npm run doc:serve\n")])]),e._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[e._v("1")]),s("br")])]),s("h3",{attrs:{id:"guidelines"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#guidelines"}},[e._v("#")]),e._v(" Guidelines")]),e._v(" "),s("ul",[s("li",[e._v("Ts.ED follows the git flow to generate a release note. To write your commit message see "),s("a",{attrs:{href:"https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit",target:"_blank",rel:"noopener noreferrer"}},[e._v("convention page"),s("OutboundLink")],1),e._v(".")]),e._v(" "),s("li",[e._v("Please try to combine multiple commits before pushing.")]),e._v(" "),s("li",[e._v("Please use TDD when fixing bugs. This means that you should write a unit test that fails because it reproduces the issue, fixes the issue, and then finally runs the test to ensure that the issue has been resolved. This helps us prevent fixed bugs from happening again in the future.")]),e._v(" "),s("li",[e._v("Please keep the test coverage at 100%. Write additional unit tests if necessary.")]),e._v(" "),s("li",[e._v("Please create an issue before sending a PR if it is going to change the public interface of Ts.ED or include significant architecture changes.")]),e._v(" "),s("li",[e._v("Feel free to ask for help from other members of the Ts.ED team.")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/17.5376c644.js b/assets/js/17.5376c644.js new file mode 100644 index 00000000000..d815d2f5397 --- /dev/null +++ b/assets/js/17.5376c644.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{758:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"authentication"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#authentication"}},[t._v("#")]),t._v(" Authentication")]),t._v(" "),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),a("p",[t._v("Ts.ED uses middlewares to protect your route with your own strategy. To handle correctly a request and protect your endpoints,\nwe have to use the "),a("ApiSymbolName",[t._v("UseAuth")]),t._v(" decorator.")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseAuth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../guards/CustomAuthMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/dashboard"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAuth")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// on class level for all endpoints")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DashboardCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAuth")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or for specific endpoints")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you planed to use "),a("code",[t._v("Passport.js")]),t._v(", it's recommended to follow the "),a("RouterLink",{attrs:{to:"/tutorials/passport.html"}},[t._v("Passport.js guide here")]),t._v(".")],1)]),t._v(" "),a("p",[t._v("Any middleware can be used as an authentication strategy. Just keep in mind, to work properly, the middleware must use "),a("ApiSymbolName",[t._v("Context")]),t._v("\ndecorator to retrieve the endpoint context execution.")],1),t._v(" "),a("p",[t._v("Here is an example of the CustomAuth middleware using the Passport.js method to check authentication:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Middleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" MiddlewareMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Forbidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Unauthorized"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomAuthMiddleware")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MiddlewareMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// retrieve options given to the @UseAuth decorator")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" options "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("isAuthenticated")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// passport.js method to check auth")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Unauthorized")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Unauthorized"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("role "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!==")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Forbidden")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Forbidden"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])]),a("h2",{attrs:{id:"create-your-auth-decorator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-your-auth-decorator"}},[t._v("#")]),t._v(" Create your Auth decorator")]),t._v(" "),a("p",[t._v("It could be practical to create you own Authentication decorator to reduce the amount of code.\nFor example, if we use swagger, we have to configure some extra "),a("strong",[t._v("security")]),t._v(" and "),a("strong",[t._v("responses")]),t._v(" information and it can quickly become heavy.")]),t._v(" "),a("p",[t._v("Example:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Security"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseAuth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Forbidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Unauthorized"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../guards/CustomAuthMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/dashboard"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAuth")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// on class level for all endpoints")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Security")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oauth2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"firstname"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DashboardCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAuth")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or for specific endpoints")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Security")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oauth2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"firstname"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("401")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Unauthorized"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Unauthorized"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("403")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Forbidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Forbidden"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])]),a("p",[t._v("To avoid that, we can create a decorator which apply all of these instructions automatically, like this:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseAuth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("useDecorators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Security"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../guards/CustomAuthMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AuthOpts")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Record"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("unknown")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n scopes"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CustomAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AuthOpts "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDecorators")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Security")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oauth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("scopes "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("401")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("403")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Additionally, you can use the Operation decorator to add automatically the "),a("code",[t._v("Authorization")]),t._v(" header field in the swagger spec:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("In"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Security"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseAuth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("useDecorators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../guards/CustomAuthMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomAuthOptions")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Record"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("unknown")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n scopes"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CustomAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" CustomAuthOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDecorators")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomAuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Security")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oauth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("scopes "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("In")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"header"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Type")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Required")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("401")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("403")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])])]),t._v(" "),a("p",[t._v("And use it on our controller and endpoints:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomAuth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../decorators/CustomAuth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/dashboard"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CustomAuth")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scopes"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"firstname"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DashboardCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CustomAuth")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scopes"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"firstname"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("h2",{attrs:{id:"with-passport-js"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#with-passport-js"}},[t._v("#")]),t._v(" With Passport.js")]),t._v(" "),a("p",[t._v("Another solution is to use "),a("RouterLink",{attrs:{to:"/tutorials/passport.html"}},[t._v("Passport.js")]),t._v(" to protect your API. Ts.ED provide\na "),a("RouterLink",{attrs:{to:"/tutorials/passport.html"}},[t._v("@tsed/passport")]),t._v(" plugin in order to facilitate the use of this library within the framework.")],1),t._v(" "),a("p",[t._v("The following codesandbox example show you how you can use this plugin combined with Swagger to describe your API:")]),t._v(" "),a("iframe",{staticStyle:{width:"100%",height:"500px",border:"0","border-radius":"4px",overflow:"hidden"},attrs:{src:"https://codesandbox.io/embed/tsed-swagger-with-authorization-hi5pp?fontsize=14&hidenavigation=1&theme=dark",title:"tsed-swagger-with-authorization",allow:"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"}})])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/18.99769d5d.js b/assets/js/18.99769d5d.js new file mode 100644 index 00000000000..5f597370e0b --- /dev/null +++ b/assets/js/18.99769d5d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{759:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"cache"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cache"}},[t._v("#")]),t._v(" Cache")]),t._v(" "),a("p",[t._v("Caching is a great and simple technique that helps improve your app's performance.\nIt acts as a temporary data store providing high performance data access.")]),t._v(" "),a("p",[t._v("Ts.ED provides a unified system caching by using the\npopular "),a("a",{attrs:{href:"https://www.npmjs.com/package/cache-manager",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("cache-manager")]),a("OutboundLink")],1),t._v(" Node.js module.\nCache-manager provides various storage to cache content like Redis, MongoDB, etc... and multi caching!")]),t._v(" "),a("p",[t._v("By using the "),a("ApiSymbolName",[t._v("UseCache")]),t._v(" on endpoint methods or on service methods, you'll be able to cache the response returned by\nthe Ts.ED server\nor the result returned by a Service.")],1),t._v(" "),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),a("p",[t._v("Cache-manager module is already installed with the "),a("code",[t._v("@tsed/common")]),t._v(" package (since v6.30.0). You just have\nto configure cache options and use the decorator to enable cache.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// default TTL")]),t._v("\n store"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"memory"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// options options depending on the choosen storage type")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h3",{attrs:{id:"store-engines"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#store-engines"}},[t._v("#")]),t._v(" Store Engines")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/dial-once/node-cache-manager-redis",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-redis"),a("OutboundLink")],1),t._v(" (\nuses "),a("a",{attrs:{href:"https://github.com/joshuah/sol-redis-pool",target:"_blank",rel:"noopener noreferrer"}},[t._v("sol-redis-pool"),a("OutboundLink")],1),t._v(")")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/dabroek/node-cache-manager-redis-store",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-redis-store"),a("OutboundLink")],1),t._v(" (\nuses "),a("a",{attrs:{href:"https://github.com/NodeRedis/node_redis",target:"_blank",rel:"noopener noreferrer"}},[t._v("node_redis"),a("OutboundLink")],1),t._v(")")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/dabroek/node-cache-manager-ioredis",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-ioredis"),a("OutboundLink")],1),t._v(" (\nuses "),a("a",{attrs:{href:"https://github.com/luin/ioredis",target:"_blank",rel:"noopener noreferrer"}},[t._v("ioredis"),a("OutboundLink")],1),t._v(")")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/v4l3r10/node-cache-manager-mongodb",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-mongodb"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/disjunction/node-cache-manager-mongoose",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-mongoose"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/hotelde/node-cache-manager-fs",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-fs"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/sheershoff/node-cache-manager-fs-binary",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-fs-binary"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/rolandstarke/node-cache-manager-fs-hash",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-fs-hash"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/marudor/node-cache-manager-hazelcast",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-hazelcast"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/theogravity/node-cache-manager-memcached-store",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-memcached-store"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/theogravity/node-cache-manager-memory-store",target:"_blank",rel:"noopener noreferrer"}},[t._v("node-cache-manager-memory-store"),a("OutboundLink")],1)])]),t._v(" "),a("h3",{attrs:{id:"example-with-mongoose"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-with-mongoose"}},[t._v("#")]),t._v(" Example with mongoose")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" mongoose "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" mongooseStore "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cache-manager-mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// default TTL")]),t._v("\n store"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" mongooseStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n mongoose"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n modelOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n collection"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"caches"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n versionKey"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])]),a("h3",{attrs:{id:"sharing-ioredis-instance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sharing-ioredis-instance"}},[t._v("#")]),t._v(" Sharing IORedis instance")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" registerProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/logger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Redis "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ioredis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("REDIS_CONNECTION")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Symbol")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis:connection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("REDIS_CONNECTION")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Redis"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n deps"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useAsyncFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("configuration"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" logger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" cacheSettings "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cache"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" redisSettings "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" connection "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Redis")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("redisSettings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lazyConnect"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n cacheSettings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("redisInstance "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("connect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Connected to redis database..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"REDIS_ERROR"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n error\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n hooks"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onDestroy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Redis"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("disconnect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br")])]),a("p",[t._v("Then:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" redisStore "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cache-manager-ioredis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// default TTL")]),t._v("\n store"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" redisStore\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n redis"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n port"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6379")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("This example works for a single redis connection. If you look for a complete example with Redis Cluster and Redis single\nconnection, go to this example:\nhttps://gist.github.com/Romakita/432b1a8afaa726b41d0baf2456b205aa")])]),t._v(" "),a("h2",{attrs:{id:"interacting-with-the-cache-store"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#interacting-with-the-cache-store"}},[t._v("#")]),t._v(" Interacting with the cache store")]),t._v(" "),a("p",[t._v("To interact with the cache manager instance, inject it to your class using the "),a("ApiSymbolName",[t._v("PlatformCache")]),t._v(" token, as follows:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("p",[t._v("The "),a("code",[t._v("get")]),t._v(" method on the "),a("ApiSymbolName",[t._v("PlatformCache")]),t._v(" instance is used to retrieve items from the cache.")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("To add an item to the cache, use the "),a("code",[t._v("set")]),t._v(" method:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("The default expiration time of the cache depends on the configured TTL on Server configuration level.")]),t._v(" "),a("p",[t._v("You can manually specify a TTL (expiration time) for this specific key, as follows:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("To disable the expiration of the cache, set the "),a("code",[t._v("ttl")]),t._v(" configuration property to "),a("code",[t._v("null")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("To remove an item from the cache, use the "),a("code",[t._v("del")]),t._v(" method:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("del")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("To clear the entire cache, use the "),a("code",[t._v("reset")]),t._v(" method:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("reset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("h2",{attrs:{id:"cache-response"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cache-response"}},[t._v("#")]),t._v(" Cache response")]),t._v(" "),a("p",[t._v("To enable cache on endpoint, use "),a("ApiSymbolName",[t._v("UseCache")]),t._v(" decorator on a method as follows:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"something with "')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),a("p",[t._v("UseCache will generate automatically a key based on the Verb and Uri of your route. If "),a("ApiSymbolName",[t._v("QueryParams")]),t._v(" and/or\n"),a("ApiSymbolName",[t._v("PathParams")]),t._v(" are used on the method, the key will be generated with them.\nAccording to our previous example, the generated key will be:")],1),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("GET:my-path:1 // if the id is 1\nGET:my-path:2 // etc...\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Only "),a("code",[t._v("GET")]),t._v(" endpoints are cached. Also, HTTP server routes that use the native response object ("),a("ApiSymbolName",[t._v("Res")]),t._v(") cannot use the\n"),a("ApiSymbolName",[t._v("PlatformCacheInterceptor")]),t._v(".")],1)]),t._v(" "),a("h2",{attrs:{id:"cache-a-value"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cache-a-value"}},[t._v("#")]),t._v(" Cache a value")]),t._v(" "),a("p",[t._v("Because "),a("ApiSymbolName",[t._v("UseCache")]),t._v(" uses "),a("ApiSymbolName",[t._v("PlatformCacheInterceptor")]),t._v(" and not a middleware, you can also apply the decorator on any\nService/Provider.")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"something with "')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("node-cache-manager serialize all data as JSON object. It means, if you want to cache a complex data like an instance of\nclass, you have to give extra parameters\nto the UseCache decorator. Ts.ED will use "),a("ApiSymbolName",[t._v("deserialize")]),t._v(" function based on the given "),a("code",[t._v("type")]),t._v(" (and "),a("code",[t._v("collectionType")]),t._v(") to\nreturn the expected instance.")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyClass"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyClass "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyClass")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyClass"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyClass"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyClass")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br")])])]),t._v(" "),a("h2",{attrs:{id:"configure-key-resolver"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configure-key-resolver"}},[t._v("#")]),t._v(" Configure key resolver")]),t._v(" "),a("p",[t._v("By default, Ts.ED uses the request VERB & URL (in an HTTP app) or cache key (for other Service and Provider) to\nassociate cache records with your endpoints.\nNevertheless, sometimes you might want to set up the generated key based on different factors, for example, using HTTP\nheaders (e.g. Authorization to properly identify profile endpoints).")]),t._v(" "),a("p",[t._v("There are two ways to do that. The first one is to configure it globally on the Server:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("keyResolver")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NOTE $ctx is only available for endpoints")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("The second way is to use the "),a("code",[t._v("key")]),t._v(" option with "),a("ApiSymbolName",[t._v("UseCache")]),t._v(" decorator:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"something with "')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("key")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"something with "')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br")])]),a("h2",{attrs:{id:"configure-ttl"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configure-ttl"}},[t._v("#")]),t._v(" Configure TTL")]),t._v(" "),a("p",[t._v("TTL can be defined per endpoint with "),a("ApiSymbolName",[t._v("UseCache")]),t._v(":")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("500")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"something with "')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"define-when-a-value-can-be-cached"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#define-when-a-value-can-be-cached"}},[t._v("#")]),t._v(" Define when a value can be cached "),a("Badge",{attrs:{text:"7.6.0+"}})],1),t._v(" "),a("p",[t._v("Sometimes, you don't want to store in cache a value because isn't consistant to have it.\nFor example, you can avoid caching data when the result is nullish:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("500")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" canCache"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"non-nullish"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("p",[t._v("In this case, the UseCache interceptor will ignore result that "),a("code",[t._v("undefined")]),t._v(" or "),a("code",[t._v("null")]),t._v(".")]),t._v(" "),a("p",[t._v("You can also provide a custom function to ignore result:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/my-path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("500")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("canCache")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("item"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" item "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"refresh-cache-keys-in-background"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#refresh-cache-keys-in-background"}},[t._v("#")]),t._v(" Refresh cache keys in background "),a("Badge",{attrs:{text:"6.103.0+"}})],1),t._v(" "),a("p",[t._v("The "),a("code",[t._v("caching")]),t._v(" module support a mechanism to refresh expiring cache "),a("code",[t._v("keys")]),t._v(" in background is you use "),a("code",[t._v("UseCache")]),t._v(" on a\nService method (not on controller method).\nThis is done by adding a "),a("code",[t._v("refreshThreshold")]),t._v(" option to the "),a("ApiSymbolName",[t._v("UseCache")]),t._v(" decorator.")],1),t._v(" "),a("p",[t._v("If "),a("code",[t._v("refreshThreshold")]),t._v(" is set and if the "),a("code",[t._v("ttl")]),t._v(" method is available for the used store,\nafter retrieving a value from cache TTL will be checked. If the remaining current "),a("code",[t._v("ttl")]),t._v(" key is under the\nconfigured "),a("code",[t._v("ttl")]),t._v(" - "),a("code",[t._v("refreshThreshold")]),t._v(", the system will spawn a background worker to update the value, following same\nrules as standard fetching.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" currentTTL "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ttl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("currentTTL "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" ttl "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" refreshThreshold"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("refresh")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("p",[t._v("In the meantime, the system will return the old value until expiration.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" refreshThreshold"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("900")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"something with "')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("p",[t._v("In this example, the configured "),a("code",[t._v("ttl")]),t._v(" is 1 hour and the threshold is 15 minutes. So, the key will be refreshed in\nbackground if current "),a("code",[t._v("ttl")]),t._v(" is under 45 minutes.")]),t._v(" "),a("h2",{attrs:{id:"refresh-cached-value"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#refresh-cached-value"}},[t._v("#")]),t._v(" Refresh cached value "),a("Badge",{attrs:{text:"7.9.0+"}})],1),t._v(" "),a("p",[t._v("A service method response can be cached by using the "),a("code",[t._v("@UseCache")]),t._v(" decorator. Sometimes, we need to explicitly refresh the cached data,\nbecause the consumed data backend state has changed. By implementing a notifications service, the backend data can trigger an event to tell your API that\nthe data has changed.")]),t._v(" "),a("p",[t._v("Here is short example:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-cache"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ProductsService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" pimClient"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PimClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseCache")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3600")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pimClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/products/"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NotificationsService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" productsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ProductsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("refreshProductId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("refresh")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("productsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br")])]),a("p",[t._v("This small example will force the data refresh.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you have several cached method calls, then the refresh will also be done on all of these methods called by the function passed to "),a("code",[t._v("PlatformCache.refresh()")]),t._v(".")])]),t._v(" "),a("h2",{attrs:{id:"multi-caching"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#multi-caching"}},[t._v("#")]),t._v(" Multi caching")]),t._v(" "),a("p",[t._v("Cache-manager provides a way to use multiple caches. To use it, remove "),a("code",[t._v("store")]),t._v(" option and use "),a("code",[t._v("caches")]),t._v(" instead:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// default TTL")]),t._v("\n caches"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("memoryCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" someOtherCache"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// options options depending on the choosen storage type")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"disable-cache-for-test"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#disable-cache-for-test"}},[t._v("#")]),t._v(" Disable cache for test")]),t._v(" "),a("p",[t._v("It can sometimes be useful during unit tests to disable the cache. You can do this by setting the "),a("code",[t._v("cache")]),t._v(" option\nto "),a("code",[t._v("false")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MyCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/rest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("MyCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/19.f572cc75.js b/assets/js/19.f572cc75.js new file mode 100644 index 00000000000..279052c470d --- /dev/null +++ b/assets/js/19.f572cc75.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{760:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"command"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#command"}},[s._v("#")]),s._v(" Command")]),s._v(" "),a("p",[a("code",[s._v("@tsed/cli-core")]),s._v(" is the npm module that provide API to create CLI. It can be to create your own CLI or to run your Ts.ED\napplication code. Ts.ED cli-core use "),a("a",{attrs:{href:"https://www.npmjs.com/package/commander",target:"_blank",rel:"noopener noreferrer"}},[s._v("commander"),a("OutboundLink")],1),s._v(" to parse cli\narguments, "),a("a",{attrs:{href:"https://www.npmjs.com/package/inquirer",target:"_blank",rel:"noopener noreferrer"}},[s._v("Inquirer"),a("OutboundLink")],1),s._v("\nto display prompt and "),a("a",{attrs:{href:"https://www.npmjs.com/package/listr",target:"_blank",rel:"noopener noreferrer"}},[s._v("Listr"),a("OutboundLink")],1),s._v(" to run tasks.")]),s._v(" "),a("p",[s._v("The cli-core works as a standalone process, like the classic entry point, and will initialize a container to run your\ncode (Service/Provider/etc...).")]),s._v(" "),a("ol",[a("li",[s._v("Bootstrap (entry point e.g: "),a("code",[s._v("bin/index.ts")]),s._v(") is invoked by cli.")]),s._v(" "),a("li",[s._v("Create a headless Ts.ED Application.")]),s._v(" "),a("li",[s._v("Create command with decorator and inject service from your existing code.")])]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" @tsed/cli-core\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Or yarn")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" @tsed/cli-core\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("blockquote",[a("p",[s._v("Note: You have to install the @tsed/cli-core")])]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("If you start your project from scratch, you can use Ts.ED cli v3 to bootstrap your project with the Command\nfeature.")])]),s._v(" "),a("p",[s._v("Optional. You can install the @tsed/cli in global to run your custom commands directly from the Ts.ED CLI:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("npm install -g @tsed/cli\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h2",{attrs:{id:"create-the-cli-entrypoint"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-the-cli-entrypoint"}},[s._v("#")]),s._v(" Create the CLI entrypoint")]),s._v(" "),a("p",[s._v("Create "),a("code",[s._v("index.ts")]),s._v(" file in "),a("code",[s._v("src/bin")]),s._v(". This file will be dedicated to bootstrap the CLI with your own configuration.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token hashbang comment"}},[s._v("#!/usr/bin/env node")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CliCore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/cli-core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../config"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Import your application configuration")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("HelloCommand"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./HelloCommand"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\nCliCore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// add your custom commands here")]),s._v("\n commands"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("HelloCommand"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("catch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("h2",{attrs:{id:"create-command"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-command"}},[s._v("#")]),s._v(" Create command")]),s._v(" "),a("p",[s._v("Use "),a("code",[s._v("tsed g command")]),s._v(" to create a new Command file. Here is a basic Command example:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CommandProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" QuestionOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/cli-core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommandContext")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Command")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello-command"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Command description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n allowUnknownOption"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommand")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CommandProvider")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Ask questions with Inquirer. Return an empty array or don't implement the method to skip this step\n */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$prompt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("initialOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("HelloCommandContext"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("QuestionOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * This method is called after the $prompt to create / map inputs to a proper context for the next step\n */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$mapContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("HelloCommandContext"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" HelloCommandContext "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("ctx\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// map something, based on ctx")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * This step run your tasks with Listr module\n */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$exec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" HelloCommandContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Do something"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[s._v("task")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"HELLO"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br")])]),a("p",[s._v("The "),a("code",[s._v("@Command")]),s._v(" decorator allow you to bind a class to Commander. Here the previous example can be run by executing the\nfollowing command:")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("tsed run hello-command\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("By default, you have to give the "),a("code",[s._v("name")]),s._v(" and "),a("code",[s._v("description")]),s._v(".")]),s._v(" "),a("h2",{attrs:{id:"command-args"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#command-args"}},[s._v("#")]),s._v(" Command Args")]),s._v(" "),a("p",[s._v("Arguments are the values given to your command without a flag option. Example:")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[s._v("tsed run hello-command create user\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("To bind these arguments with your custom command, you have to declare the arguments as following:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CommandProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" QuestionOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/cli-core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommandContext")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n action"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"create"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n subAction"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Command")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello-command"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Command description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n action"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n defaultValue"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"create"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"My action"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n subAction"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n defaultValue"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"My sub action"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n allowUnknownOption"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommand")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CommandProvider")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$exec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" HelloCommandContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br")])]),a("h2",{attrs:{id:"command-options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#command-options"}},[s._v("#")]),s._v(" Command Options")]),s._v(" "),a("p",[s._v("Options are the values given to your command with a specific flag option. Example:")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[s._v("tsed run hello-command -o "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("test")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("To bind this option with your custom command, you have to declare the option as following:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CommandProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" QuestionOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/cli-core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommandContext")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n option1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Command")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello-command"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Command description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"-o, --opt-1 "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n defaultValue"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"dev"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"My option"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n allowUnknownOption"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommand")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CommandProvider")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$exec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" HelloCommandContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])]),a("h2",{attrs:{id:"allow-extra-options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#allow-extra-options"}},[s._v("#")]),s._v(" Allow extra options")]),s._v(" "),a("p",[s._v("By default, commander doesn't accept unknown options. You can change this behaviour, by change the "),a("code",[s._v("allowUnknownOption")]),s._v("\nto "),a("code",[s._v("true")]),s._v(".")]),s._v(" "),a("p",[s._v("Then you'll be able to get all "),a("code",[s._v("args")]),s._v(" and "),a("code",[s._v("options")]),s._v(" in the "),a("code",[s._v("rawArgs")]),s._v(" property:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CommandProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" QuestionOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/cli-core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommandContext")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n rawArgs"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Command")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello-command"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Command description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n allowUnknownOption"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommand")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CommandProvider")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$exec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" HelloCommandContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])]),a("h2",{attrs:{id:"inject-service"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#inject-service"}},[s._v("#")]),s._v(" Inject service")]),s._v(" "),a("p",[s._v("Use the "),a("ApiSymbolName",[s._v("Inject")]),s._v(" decorator to inject your service in a command:")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CommandProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" QuestionOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/cli-core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/MyService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommandContext")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n rawArgs"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Command")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello-command"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Command description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n allowUnknownOption"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommand")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CommandProvider")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n myService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$exec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" HelloCommandContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Update something"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[s._v("task")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("myService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br")])]),a("h2",{attrs:{id:"prompt"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prompt"}},[s._v("#")]),s._v(" Prompt")]),s._v(" "),a("p",[s._v("You can implement the "),a("code",[s._v("$prompt")]),s._v(" method to provide a CLI prompt to your consumer. Prompt is based\non "),a("a",{attrs:{href:"https://www.npmjs.com/package/inquirer",target:"_blank",rel:"noopener noreferrer"}},[s._v("Inquirer"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CommandProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" QuestionOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/cli-core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/MyService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommandContext")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n projectName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Command")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello-command"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Command description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HelloCommand")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CommandProvider")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n myService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$prompt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("initialOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("HelloCommandContext"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("QuestionOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"input"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"projectName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n message"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"What is your project name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transformer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("paramCase")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$exec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" HelloCommandContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br")])]),a("p",[s._v("See "),a("a",{attrs:{href:"https://www.npmjs.com/package/inquirer",target:"_blank",rel:"noopener noreferrer"}},[s._v("Inquirer"),a("OutboundLink")],1),s._v(" for more details to create prompt.")])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/2.d0aafafa.js b/assets/js/2.d0aafafa.js new file mode 100644 index 00000000000..2a5adb68dad --- /dev/null +++ b/assets/js/2.d0aafafa.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{733:function(t,e,s){},734:function(t,e,s){"use strict";s(733)},737:function(t,e,s){"use strict";s(26),s(12),s(27);var a=s(96),i=s(11),o={name:"Page",components:{PageNav:a.PageNav,PageHeader:a.PageHeader,PageSidebar:a.PageSidebar},props:["sidebarItems"],data:function(){return{headerFixed:!1}},computed:{repoUrl:function(){return this.editUrl.replace("/edit","/blob")},hashTags:function(){return this.$frontmatter.hashTags||this.$site.themeConfig.defaultHashTags||[]},createIssueUrl:function(){var t=this.$site.themeConfig,e=t.repo,s=t.docsRepo,a=void 0===s?e:s,o=Object(i.k)(this.$page.path),r=i.l.test(a)?a:"https://github.com/".concat(a);return"".concat(r,"/issues/new?title=").concat(encodeURIComponent("[BUG] Page ".concat(this.$page.title," - ").concat(o)))},editUrl:function(){var t=this.$site.themeConfig,e=t.repo,s=t.editLinks,o=t.docsDir,r=void 0===o?"":o,n=t.docsBranch,h=void 0===n?"master":n,l=t.docsRepo,d=void 0===l?e:l,c=Object(i.k)(this.$page.path);if(i.a.test(c)?c+="README.md":c+=".md",d&&s)return Object(a.createEditLink)(e,d,r,h,c)},lastUpdated:function(){return this.$page.lastUpdated},lastUpdatedText:function(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},shouldShowOtherTopics:function(){var t=this.$page.frontmatter;return!t.layout&&!this.isLandingPage&&!1!==t.otherTopics&&this.otherTopicsItems.length},shouldShowPageSidebar:function(){return!1!==this.$page.frontmatter.pageSidebar},otherTopicsItems:function(){return Object(a.resolveOtherTopicsItems)(this.$page,this.$page.regularPath,this.$site,this.$localePath)}},mounted:function(){var t=this;window.addEventListener("scroll",(function(){t.headerFixed=window.pageYOffset>140}))},methods:{}},r=(s(734),s(1)),n=Object(r.a)(o,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"page"},[s("div",[s("div",{staticClass:"relative"},[s("PageHeader",{attrs:{fixed:t.headerFixed,title:t.$page.title||"Not found","repo-url":t.repoUrl,hashTags:t.hashTags,"create-issue-url":t.createIssueUrl,"edit-url":t.editUrl}})],1),t._v(" "),s("div",{staticClass:"px-5 md:px-10 max-w-site m-auto"},[s("div",{staticClass:"page-content"},[s("article",[t._t("page-top"),t._v(" "),s("Content"),t._v(" "),t._t("page-bottom")],2),t._v(" "),s("div",{staticClass:"pt-5"},[t.lastUpdated?s("div",{staticClass:"py-5 flex justify-end text-sm"},[s("p",[s("span",{staticClass:"font-bold pr-1"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),s("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])])]):t._e(),t._v(" "),s("PageNav",{attrs:{sidebarItems:t.sidebarItems}})],1),t._v(" "),t.shouldShowOtherTopics?s("OtherTopics",{staticClass:"px-3",attrs:{slot:"page-bottom",items:t.otherTopicsItems},slot:"page-bottom"},[s("h4",{staticClass:"text-xl mb-4 mt-2 font-semibold",attrs:{slot:"top"},slot:"top"},[t._v("\n Other topics\n ")])]):t._e()],1)]),t._v(" "),t.shouldShowPageSidebar?s("PageSidebar",{staticClass:"fixed overflow-auto",class:{"-mini-header":t.headerFixed},attrs:{page:t.$page}}):t._e()],1)])}),[],!1,null,null,null);e.a=n.exports},738:function(t,e,s){},739:function(t,e,s){},742:function(t,e,s){"use strict";s(738)},743:function(t,e,s){"use strict";s(739)},753:function(t,e,s){"use strict";s.r(e);var a=s(96),i=s(4),o=s(176),r=(s(26),s(12),s(27),s(11)),n={name:"NotFound",components:{PageNav:a.PageNav,PageHeader:a.PageHeader,PageSidebar:a.PageSidebar},props:["sidebarItems"],data:function(){return{headerFixed:!1}},computed:{repoUrl:function(){return this.editUrl.replace("/edit","/blob")},hashTags:function(){return this.$frontmatter.hashTags||this.$site.themeConfig.defaultHashTags||[]},createIssueUrl:function(){var t=this.$site.themeConfig,e=t.repo,s=t.docsRepo,a=void 0===s?e:s,i=Object(r.k)(this.$page.path),o=r.l.test(a)?a:"https://github.com/".concat(a);return"".concat(o,"/issues/new?title=").concat(encodeURIComponent("[BUG] Page ".concat(this.$page.title," - ").concat(i)))},editUrl:function(){var t=this.$site.themeConfig,e=t.repo,s=t.editLinks,i=t.docsDir,o=void 0===i?"":i,n=t.docsBranch,h=void 0===n?"master":n,l=t.docsRepo,d=void 0===l?e:l,c=Object(r.k)(this.$page.path);if(r.a.test(c)?c+="README.md":c+=".md",d&&s)return Object(a.createEditLink)(e,d,o,h,c)},lastUpdated:function(){return this.$page.lastUpdated},lastUpdatedText:function(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},shouldShowOtherTopics:function(){var t=this.$page.frontmatter;return!t.layout&&!this.isLandingPage&&!1!==t.otherTopics&&this.otherTopicsItems.length},otherTopicsItems:function(){return Object(a.resolveOtherTopicsItems)(this.$page,this.$page.regularPath,this.$site,this.$localePath)}},mounted:function(){var t=this;window.addEventListener("scroll",(function(){t.headerFixed=window.pageYOffset>140}))},methods:{}},h=(s(742),s(1)),l=Object(h.a)(n,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"page"},[s("article",[s("div",{staticClass:"relative"},[s("PageHeader",{attrs:{fixed:t.headerFixed,title:"Page not found","repo-url":t.repoUrl,hashTags:t.hashTags,"create-issue-url":t.createIssueUrl,"edit-url":t.editUrl}})],1),t._v(" "),s("div",{staticClass:"px-5 md:px-10 max-w-site m-auto"},[s("div",{staticClass:"page-content"},[s("div",{staticClass:"content__default pb-10"},[s("h2",[t._v("\n That's a Four-Oh-Four.\n ")]),t._v(" "),s("p",[s("Button",{attrs:{href:"/"}},[t._v("\n Go home\n ")])],1)]),t._v(" "),s("div",{staticClass:"pt-5"},[t.lastUpdated?s("div",{staticClass:"py-5 flex justify-end text-sm"},[s("p",[s("span",{staticClass:"font-bold pr-1"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),s("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])])]):t._e(),t._v(" "),s("PageNav",{attrs:{sidebarItems:t.sidebarItems}})],1),t._v(" "),t.shouldShowOtherTopics?s("OtherTopics",{staticClass:"px-3",attrs:{slot:"page-bottom",items:t.otherTopicsItems},slot:"page-bottom"},[s("h4",{staticClass:"text-xl mb-4 mt-2 font-semibold",attrs:{slot:"top"},slot:"top"},[t._v("\n Other topics\n ")])]):t._e()],1)]),t._v(" "),s("PageSidebar",{staticClass:"fixed",class:{"-mini-header":t.headerFixed},attrs:{page:t.$page}})],1)])}),[],!1,null,null,null).exports;s(737);i.a.use(o.a);var d={components:{NotFound:l,Navbar:a.Navbar,Sidebar:a.Sidebar,Footer:a.Footer,SupportUs:a.SupportUs},data:function(){return{isSidebarOpen:!1}},computed:{navLinks:function(){return Object(a.getUserNavLinks)(this)},repoUrl:function(){var t=this.$site.themeConfig.repo;return/^https?:/.test(t)?t:"https://github.com/".concat(t)},siteTitle:function(){return this.$site.themeConfig.shortTitle||this.$siteTitle},htmlTitle:function(){return this.$site.themeConfig.htmlTitle||this.$siteTitle},logoSrc:function(){return this.$site.themeConfig.logo&&this.$withBase(this.$site.themeConfig.logo)},isLandingPage:function(){return"Home"===this.$page.frontmatter.layout},isCustomLayout:function(){return this.$page.frontmatter.layout&&!this.isLandingPage},shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){return!1!==this.$page.frontmatter.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(a.resolveSidebarItems)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar,"with-sidebar":this.shouldShowSidebar},t]},algolia:function(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,s=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(s)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},c=(s(743),Object(h.a)(d,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"theme-container init",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?s("Navbar",{attrs:{"site-title":t.siteTitle,"html-title":t.htmlTitle,"logo-src":t.logoSrc,href:t.$localePath,"repo-url":t.repoUrl,"social-urls":t.$site.themeConfig,items:t.navLinks,algolia:t.algolia},scopedSlots:t._u([{key:"sidebar-before",fn:function(){return[t.shouldShowSidebar?s("div",{staticClass:"flex cursor-pointer text-xl mr-4",on:{click:t.toggleSidebar}},[s("i",{staticClass:"bx bx-menu"})]):t._e()]},proxy:!0}],null,!1,1423491846)}):t._e(),t._v(" "),s("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),s("main",{staticClass:"main-content relative z-2 pt-16"},[t.isCustomLayout?s("div",{staticClass:"custom-layout"},[s(t.$page.frontmatter.layout,{tag:"component"})],1):s("NotFound",{attrs:{"sidebar-items":t.sidebarItems}})],1),t._v(" "),t.shouldShowSidebar?s("Sidebar",{class:{"-translate-x-100 md:shadow-sidebar md:translate-x-0":!t.isSidebarOpen,"translate-0 shadow-sidebar":t.isSidebarOpen},attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}):t._e(),t._v(" "),s("Footer",{attrs:{"repo-url":t.repoUrl,author:t.$site.themeConfig.author,"license-type":t.$site.themeConfig.licenseType,"copyright-dates":t.$site.themeConfig.copyrightDates,"social-urls":t.$site.themeConfig},scopedSlots:t._u([{key:"top",fn:function(){return[t.isLandingPage?t._e():s("SupportUs",{attrs:{brand:t.$site.themeConfig.shortTitle,"sponsor-url":t.$site.themeConfig.sponsorUrl,"license-type":t.$site.themeConfig.licenseType}}),t._v(" "),t._t("footer-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("footer-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null));e.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/20.2e578d6f.js b/assets/js/20.2e578d6f.js new file mode 100644 index 00000000000..9cbc66803ed --- /dev/null +++ b/assets/js/20.2e578d6f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{761:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[s._v("#")]),s._v(" Configuration")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Configuration")]),s._v(" lets you quickly configure your server via decorator. This decorator takes your configuration and\nmerges it with the default server configuration.")],1),s._v(" "),a("p",[s._v("The default configuration is as follows:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"env"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"development"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"port"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("8080")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"debug"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"httpsPort"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("8000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"uploadDir"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./uploads"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("You can customize your configuration as follows on "),a("code",[s._v("Server.ts")]),s._v("level:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MyController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/manual/MyController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./controllers/current/**/*.ts")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// deprecated")]),s._v("\n MyController "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// support manual import")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest/v0"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// versioning")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./controllers/v0/users/*.js")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// deprecated")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("!./controllers/v0/groups/old/*.ts")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Exclusion")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("p",[s._v("or when you bootstrap your Server (e.g. "),a("code",[s._v("index.ts")]),s._v("):")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Start server..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// extra settings")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("listen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Server initialized"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("catch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("Ts.ED supports "),a("a",{attrs:{href:"https://github.com/TypeStrong/ts-node",target:"_blank",rel:"noopener noreferrer"}},[s._v("ts-node"),a("OutboundLink")],1),s._v(". Ts extension will be replaced by a Js extension if\nts-node isn't the runtime.")])]),s._v(" "),a("h2",{attrs:{id:"load-configuration-from-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#load-configuration-from-file"}},[s._v("#")]),s._v(" Load configuration from file")]),s._v(" "),a("p",[s._v("Ts.ED doesn't provide solution to load configuration from files. Because, there is many solution to achieve this,\nwe consider this part as the developer responsibility.")]),s._v(" "),a("p",[s._v("By using "),a("a",{attrs:{href:"https://www.npmjs.com/package/config",target:"_blank",rel:"noopener noreferrer"}},[s._v("node-config"),a("OutboundLink")],1),s._v(" or "),a("a",{attrs:{href:"https://www.npmjs.com/package/dotenv",target:"_blank",rel:"noopener noreferrer"}},[s._v("dotenv"),a("OutboundLink")],1),s._v(", it's\npossible to load your configuration from file\nas following:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"node-config"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" filedirname "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"filedirname"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// FIXME remove when esm is ready")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" rootDir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("filedirname")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// /!\\ configuration file must be outside of your src directory")]),s._v("\nprocess"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"NODE_CONFIG_DIR"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("rootDir"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("/../config")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"config"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Start server..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" config "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/* or config.util.toObject() */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("listen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Server initialized"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("catch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"dotenv"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"dotenv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("config")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/full/custom/path/to/your/env/vars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Start server..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("parsed"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("listen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Server initialized"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("catch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[s._v("#")]),s._v(" Options")]),s._v(" "),a("h3",{attrs:{id:"rootdir"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#rootdir"}},[s._v("#")]),s._v(" rootDir")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("code",[s._v("string")])])]),s._v(" "),a("p",[s._v("The root directory where you build run project. By default, it is equal to "),a("code",[s._v("process.cwd()")]),s._v(".")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n rootDir"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cwd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("h3",{attrs:{id:"env"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#env"}},[s._v("#")]),s._v(" env")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("ApiSymbolName",[s._v("Env")])],1)]),s._v(" "),a("p",[s._v("The environment profiles. By default the environment profile is equal to "),a("code",[s._v("NODE_ENV")]),s._v(".")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Constant"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n env"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("PROD")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Constant")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"env"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n env"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("PROD")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("h3",{attrs:{id:"httpport"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#httpport"}},[s._v("#")]),s._v(" httpPort")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("code",[s._v("string")]),s._v(" | "),a("code",[s._v("number")]),s._v(" | "),a("code",[s._v("false")])])]),s._v(" "),a("p",[s._v("Port number for the "),a("a",{attrs:{href:"https://nodejs.org/api/http.html#http_class_http_server",target:"_blank",rel:"noopener noreferrer"}},[s._v("HTTP.Server"),a("OutboundLink")],1),s._v(".\nSet "),a("code",[s._v("false")]),s._v(" to disable the http port.")]),s._v(" "),a("h3",{attrs:{id:"httpsport"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#httpsport"}},[s._v("#")]),s._v(" httpsPort")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("code",[s._v("string")]),s._v(" | "),a("code",[s._v("number")]),s._v(" | "),a("code",[s._v("false")])])]),s._v(" "),a("p",[s._v("Port number for the "),a("a",{attrs:{href:"https://nodejs.org/api/https.html#https_class_https_server",target:"_blank",rel:"noopener noreferrer"}},[s._v("HTTPs.Server"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("h3",{attrs:{id:"httpsoptions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#httpsoptions"}},[s._v("#")]),s._v(" httpsOptions")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("a",{attrs:{href:"https://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener",target:"_blank",rel:"noopener noreferrer"}},[s._v("Https.ServerOptions"),a("OutboundLink")],1),s._v(" "),a("ul",[a("li",[a("code",[s._v("key")]),s._v(" | | "),a("a",{attrs:{href:"https://nodejs.org/api/buffer.html#buffer_class_buffer",target:"_blank",rel:"noopener noreferrer"}},[s._v(""),a("OutboundLink")],1),s._v("\n| : The private key of the server in PEM format. To support multiple keys using different\nalgorithms, an array can be provided either as a plain array of key strings or an array of objects in the\nformat "),a("code",[s._v("{pem: key, passphrase: passphrase}")]),s._v(". This option is required for ciphers making use of private keys.")]),s._v(" "),a("li",[a("code",[s._v("passphrase")]),s._v(" A string containing the passphrase for the private key or pfx.")]),s._v(" "),a("li",[a("code",[s._v("cert")]),s._v(" | \n| "),a("a",{attrs:{href:"https://nodejs.org/api/buffer.html#buffer_class_buffer",target:"_blank",rel:"noopener noreferrer"}},[s._v(""),a("OutboundLink")],1),s._v("\n| "),a("a",{attrs:{href:"https://nodejs.org/api/buffer.html#buffer_class_buffer",target:"_blank",rel:"noopener noreferrer"}},[s._v(""),a("OutboundLink")],1),s._v(": A string, Buffer, array of strings,\nor array of Buffers containing the certificate key of the server in PEM format. (Required)")]),s._v(" "),a("li",[a("code",[s._v("ca")]),s._v(" | | "),a("a",{attrs:{href:"https://nodejs.org/api/buffer.html#buffer_class_buffer",target:"_blank",rel:"noopener noreferrer"}},[s._v(""),a("OutboundLink")],1),s._v("\n| "),a("a",{attrs:{href:"https://nodejs.org/api/buffer.html#buffer_class_buffer",target:"_blank",rel:"noopener noreferrer"}},[s._v(""),a("OutboundLink")],1),s._v(': A string, Buffer, array of strings,\nor array of Buffers of trusted certificates in PEM format. If this is omitted, several well known "root" CAs (like\nVeriSign) will be used. These are used to authorize connections.')])])])]),s._v(" "),a("p",[s._v("See the "),a("a",{attrs:{href:"https://github.com/tsedio/example-ts-express-decorator/tree/2.0.0/example-https",target:"_blank",rel:"noopener noreferrer"}},[s._v("HTTPs project example"),a("OutboundLink")],1)]),s._v(" "),a("h3",{attrs:{id:"mount"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mount"}},[s._v("#")]),s._v(" mount")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("ApiSymbolName",[s._v("EndpointDirectoriesSettings")])],1)]),s._v(" "),a("p",[s._v("Mount all given controllers and map controllers to the corresponding endpoints.")]),s._v(" "),a("p",[s._v("Ts.ED provides the possibility to mount multiple Rest paths instead of the default path "),a("code",[s._v("/rest")]),s._v(".\nThis option will allow you to define a version for an endpoint and select which controllers you want to associate with\nthe given path.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" v1Controllers "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/v1/index"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" v0Controllers "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/v0/index"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest/v1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("Object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("values")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("v1Controllers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest/v0"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("Object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("values")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("v0Controllers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// v1/index.ts")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./users/UserControllers"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./groups/GroupsControllers"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// v0/index.ts")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./users/UserControllers"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./groups/GroupsControllers"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("p",[s._v("It is also possible to split the configuration by using the "),a("ApiSymbolName",[s._v("Module")]),s._v(":")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Server.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ModuleV0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./v0/ModuleV0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ModuleV1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./v1/ModuleV1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n imports"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("ModuleV1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ModuleV0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"ModuleV1.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UserController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./users/UserController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest/v1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("UserController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ModuleV1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"ModuleV0.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UserController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./users/UserController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest/v0"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("UserController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ModuleV0")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"componentsscan-deprecated"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#componentsscan-deprecated"}},[s._v("#")]),s._v(" "),a("s",[s._v("componentsScan")]),s._v(" (deprecated)")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("code",[s._v("string[]")])])]),s._v(" "),a("p",[s._v("List of glob pattern to scan directories which contains "),a("RouterLink",{attrs:{to:"/docs/services.html"}},[s._v("Services")]),s._v("\nor "),a("RouterLink",{attrs:{to:"/docs/middlewares.html"}},[s._v("Middlewares")]),s._v(".")],1),s._v(" "),a("h3",{attrs:{id:"middlewares"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#middlewares"}},[s._v("#")]),s._v(" middlewares")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("code",[s._v("PlatformMiddlewareSettings[]")])])]),s._v(" "),a("p",[s._v("A middleware list (Express.js, Ts.ED, Koa, etc...) must be loaded on the "),a("code",[s._v("$beforeRoutesInit")]),s._v(" hook or on the specified\nhook.\nIn addition, it's also possible to configure the environment for which the middleware should be loaded.")]),s._v(" "),a("p",[s._v("Since v7.4, the middlewares options accepts multiple format to register a native middleware (Express, Koa) and/or a\nTs.ED middleware:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n middlewares"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("use"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"helmet"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" hook"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$afterInit"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("contentSecurityPolicy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("use"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" EnsureHttpsMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" env"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("PROD")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cors"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cookieParser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"json-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// you can add also the text-parser")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("use"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"encodedurl-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("extended"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n AuthTokenMiddleware\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("Order priority")]),s._v(" "),a("p",[s._v("The middlewares added through "),a("code",[s._v("middlewares")]),s._v(" options will always be registered after the middlewares registered through\nthe hook methods!")])]),s._v(" "),a("p",[s._v("Here is an equivalent example to load middlewares with the hooks:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" bodyParser "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"body-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$afterInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("helmet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("contentSecurityPolicy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("PROD")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("EnsureHttpsMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("app\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cors")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cookieParser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bodyParser"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("json")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bodyParser"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("urlencoded")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("extended"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("compress")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("methodOverride")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("AuthTokenMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("Prefer the 1st example if you use "),a("ApiSymbolName",[s._v("RawBodyParams")]),s._v(" in your application. Ts.ED will automatically configure the json-parser and urlencoded parser with the rawBody parser.")],1)]),s._v(" "),a("h3",{attrs:{id:"rawbody"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#rawbody"}},[s._v("#")]),s._v(" rawBody "),a("Badge",{attrs:{text:"v7.4.0+"}})],1),s._v(" "),a("p",[s._v("This option force the rawBody parser if Ts.ED doesn't detect the "),a("ApiSymbolName",[s._v("RawBodyParams")]),s._v(" usage in your code.")],1),s._v(" "),a("div",{staticClass:"language-diff line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-diff"}},[a("code",[s._v("@Configuration({\n"),a("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[a("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" rawBody: true,\n")]),a("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" middlewares: [\n")]),a("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" {use: 'json-parser'},\n")]),a("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" {use: 'urlencoded-parser', options: {extended: true})\n")]),a("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" ]\n")])]),s._v("})\nexport class Server {\n"),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[s._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" @Inject()\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[s._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" protected app: PlatformApplication;\n")])]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[s._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" $beforeRoutesInit() {\n")])]),a("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[a("span",{pre:!0,attrs:{class:"token prefix deleted"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" this.app\n")]),a("span",{pre:!0,attrs:{class:"token prefix deleted"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" .use(bodyParser.json())\n")]),a("span",{pre:!0,attrs:{class:"token prefix deleted"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" .use(bodyParser.urlencoded({extended: true}));\n")])]),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[s._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[s._v(" }\n")])]),s._v("}\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("h3",{attrs:{id:"imports"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#imports"}},[s._v("#")]),s._v(" imports")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("code",[s._v("Type[]")])])]),s._v(" "),a("p",[s._v("Add providers or modules here. These modules or provider will be built before the server itself.")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Server.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MyModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./module/MyModule"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n imports"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("MyModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"MyModule.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MyController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/MyController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./services/MyService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest/module1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("MyController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n imports"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModule")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"exclude-deprecated"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#exclude-deprecated"}},[s._v("#")]),s._v(" "),a("s",[s._v("exclude")]),s._v(" (deprecated)")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("code",[s._v("string[]")])])]),s._v(" "),a("p",[s._v("List of glob patterns. Exclude all files that match with this list when the Server scans all components with the "),a("code",[s._v("mount")]),s._v("\nor "),a("code",[s._v("scanComponents")]),s._v(" options.")]),s._v(" "),a("h3",{attrs:{id:"scopes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#scopes"}},[s._v("#")]),s._v(" scopes")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("code",[s._v("{[key: string]: ProviderScope}")])])]),s._v(" "),a("p",[s._v("Change the default scope for a given provider. See "),a("RouterLink",{attrs:{to:"/docs/injection-scopes.html"}},[s._v("injection scopes")]),s._v(" for more details.")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n scopes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("ProviderType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONTROLLER")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REQUEST")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("h3",{attrs:{id:"logger"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#logger"}},[s._v("#")]),s._v(" logger")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("ApiSymbolName",[s._v("PlatformLoggerSettings")])],1)]),s._v(" "),a("p",[s._v("Logger configuration. See "),a("RouterLink",{attrs:{to:"/docs/logger.html"}},[s._v("logger section for more detail")]),s._v(".")],1),s._v(" "),a("h3",{attrs:{id:"resolvers-external-di"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#resolvers-external-di"}},[s._v("#")]),s._v(" resolvers - External DI")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("ApiSymbolName",[s._v("DIResolver")])],1)]),s._v(" "),a("p",[s._v("Ts.ED has its own DI container, but sometimes you have to work with other DI like Inversify or TypeDI. The version\n5.39.0+\nnow allows you to configure multiple external DI by using the "),a("code",[s._v("resolvers")]),s._v(" options.")]),s._v(" "),a("p",[s._v("The resolvers options can be configured as following:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("myContainer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./inversify.config"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n resolvers"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("token"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" myContainer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("p",[s._v("It's also possible to register resolvers with the "),a("ApiSymbolName",[s._v("Module")]),s._v(" decorator:")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("myContainer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./inversify.config"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n resolvers"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("token"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" myContainer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModule")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("h3",{attrs:{id:"views"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#views"}},[s._v("#")]),s._v(" views")]),s._v(" "),a("p",[s._v("Object to configure Views engines with Ts.ED engines or Consolidate (deprecated). See more\non "),a("RouterLink",{attrs:{to:"/docs/templating.html"}},[s._v("View engine")]),s._v(".")],1),s._v(" "),a("h3",{attrs:{id:"acceptmimes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#acceptmimes"}},[s._v("#")]),s._v(" acceptMimes")]),s._v(" "),a("p",[s._v("Configure the mimes accepted by default for each request by the server.")]),s._v(" "),a("h3",{attrs:{id:"responsefilters"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#responsefilters"}},[s._v("#")]),s._v(" responseFilters")]),s._v(" "),a("p",[s._v("A list of response filters must be called before returning a response to the consumer. See more\non "),a("RouterLink",{attrs:{to:"/docs/response-filter.html"}},[s._v("Response filters")]),s._v(".")],1),s._v(" "),a("h3",{attrs:{id:"multer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#multer"}},[s._v("#")]),s._v(" multer")]),s._v(" "),a("p",[s._v("Object configure Multer. See more on "),a("RouterLink",{attrs:{to:"/tutorials/serve-static-files.html"}},[s._v("Upload file")]),s._v(".")],1),s._v(" "),a("h2",{attrs:{id:"jsonmapper"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jsonmapper"}},[s._v("#")]),s._v(" jsonMapper")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n jsonMapper"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n additionalProperties"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n disableUnsecureConstructor"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("h3",{attrs:{id:"jsonmapper-additionalproperties"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jsonmapper-additionalproperties"}},[s._v("#")]),s._v(" jsonMapper.additionalProperties")]),s._v(" "),a("p",[s._v("Enable additional properties on model. By default, "),a("code",[s._v("false")]),s._v(". Enable this option is dangerous and may be a potential\nsecurity issue.")]),s._v(" "),a("h3",{attrs:{id:"jsonmapper-disableunsecureconstructor"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jsonmapper-disableunsecureconstructor"}},[s._v("#")]),s._v(" jsonMapper.disableUnsecureConstructor")]),s._v(" "),a("p",[s._v("Pass the plain object to the model constructor. By default, "),a("code",[s._v("true")]),s._v(".")]),s._v(" "),a("p",[s._v("It may be a potential security issue if you have as constructor with this followings code:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n Object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("assign")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// potential prototype pollution")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("Recommended: Set this options to "),a("code",[s._v("true")]),s._v(" in your new project.")]),s._v(" "),a("p",[s._v("In v7 this option will be set to true by default.")])]),s._v(" "),a("h2",{attrs:{id:"platform-options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#platform-options"}},[s._v("#")]),s._v(" Platform Options")]),s._v(" "),a("p",[s._v("These options are specific for each framework (Express.js, Koa.js, etc...):")]),s._v(" "),a("Tabs",[a("Tab",{attrs:{label:"Express.js"}},[a("h3",{attrs:{id:"express-bodyparser"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#express-bodyparser"}},[s._v("#")]),s._v(" express.bodyParser "),a("Badge",{attrs:{text:"6.111.0+"}})],1),s._v(" "),a("p",[s._v("This option let you configure the default bodyParser used by Ts.ED to parse the body request:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n express"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n bodyParser"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n text"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n json"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n urlencoded"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n extended"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// required")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h3",{attrs:{id:"express-router"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#express-router"}},[s._v("#")]),s._v(" express.router")]),s._v(" "),a("p",[s._v("The global configuration for the "),a("code",[s._v("Express.Router")]),s._v(". See\nexpress "),a("a",{attrs:{href:"http://expressjs.com/en/api.html#express.router",target:"_blank",rel:"noopener noreferrer"}},[s._v("documentation"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("h3",{attrs:{id:"statics"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#statics"}},[s._v("#")]),s._v(" statics")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("ApiSymbolName",[s._v("PlatformStaticsOptions")])],1)]),s._v(" "),a("p",[s._v("Object to mount all directories under an endpoint.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Express "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PlatformExpressStaticsOptions")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Enable or disable setting Cache-Control response header, defaults to true.\n * Disabling this will ignore the immutable and maxAge options.\n */")]),s._v("\n cacheControl"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Set how \"dotfiles\" are treated when encountered. A dotfile is a file or directory that begins with a dot (\".\").\n * Note this check is done on the path itself without checking if the path actually exists on the disk.\n * If root is specified, only the dotfiles above the root are checked (i.e. the root itself can be within a dotfile when when set to \"deny\").\n * The default value is 'ignore'.\n * 'allow' No special treatment for dotfiles\n * 'deny' Send a 403 for any request for a dotfile\n * 'ignore' Pretend like the dotfile does not exist and call next()\n */")]),s._v("\n dotfiles"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Enable or disable etag generation, defaults to true.\n */")]),s._v("\n etag"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Set file extension fallbacks. When set, if a file is not found, the given extensions will be added to the file name and search for.\n * The first that exists will be served. Example: ['html', 'htm'].\n * The default value is false.\n */")]),s._v("\n extensions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Let client errors fall-through as unhandled requests, otherwise forward a client error.\n * The default value is true.\n */")]),s._v("\n fallthrough"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Enable or disable the immutable directive in the Cache-Control response header.\n * If enabled, the maxAge option should also be specified to enable caching. The immutable directive will prevent supported clients from making conditional requests during the life of the maxAge option to check if the file has changed.\n */")]),s._v("\n immutable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/**\n * By default this module will send "index.html" files in response to a request on a directory.\n * To disable this set false or to supply a new index pass a string or an array in preferred order.\n */')]),s._v("\n index"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Enable or disable Last-Modified header, defaults to true. Uses the file system's last modified value.\n */")]),s._v("\n lastModified"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Provide a max-age in milliseconds for http caching, defaults to 0. This can also be a string accepted by the ms module.\n */")]),s._v("\n maxAge"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/**\n * Redirect to trailing "/" when the pathname is a dir. Defaults to true.\n */')]),s._v("\n redirect"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Function to set custom headers on response. Alterations to the headers need to occur synchronously.\n * The function is called as fn(res, path, stat), where the arguments are:\n * res the response object\n * path the file path that is being sent\n * stat the stat object of the file that is being sent\n */")]),s._v("\n setHeaders"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("res"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Express"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" stat"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br"),a("span",{staticClass:"line-number"},[s._v("73")]),a("br"),a("span",{staticClass:"line-number"},[s._v("74")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Koa.js"}},[a("h3",{attrs:{id:"koa-bodyparser"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#koa-bodyparser"}},[s._v("#")]),s._v(" koa.bodyParser "),a("Badge",{attrs:{text:"6.111.0+"}})],1),s._v(" "),a("p",[s._v("This option let you configure the default bodyParser used by Ts.ED to parse the body request:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n koa"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n bodyParser"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// See koa-bodyparser options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h3",{attrs:{id:"koa-router"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#koa-router"}},[s._v("#")]),s._v(" koa.router")]),s._v(" "),a("p",[s._v("The global configuration for the Koa.Router.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("KoaRouterOptions")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Prefix for all routes.\n */")]),s._v("\n prefix"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Methods which should be supported by the router.\n */")]),s._v("\n methods"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n routerPath"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Whether or not routing should be case-sensitive.\n */")]),s._v("\n sensitive"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Whether or not routes should matched strictly.\n *\n * If strict matching is enabled, the trailing slash is taken into\n * account when matching routes.\n */")]),s._v("\n strict"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("h3",{attrs:{id:"statics-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#statics-2"}},[s._v("#")]),s._v(" statics")]),s._v(" "),a("ul",[a("li",[s._v("type: "),a("ApiSymbolName",[s._v("PlatformStaticsOptions")])],1)]),s._v(" "),a("p",[s._v("Object to mount all directories under an endpoint.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("KoaStaticsOptions")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Browser cache max-age in milliseconds. (defaults to 0) */")]),s._v("\n maxage"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n maxAge"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SendOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"maxage"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Tell the browser the resource is immutable and can be cached indefinitely. (defaults to false) */")]),s._v("\n immutable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Allow transfer of hidden files. (defaults to false) */")]),s._v("\n hidden"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Root directory to restrict file access. (defaults to '') */")]),s._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Name of the index file to serve automatically when visiting the root location. (defaults to none) */")]),s._v("\n index"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Try to serve the gzipped version of a file automatically when gzip is supported by a client and if the requested file with .gz extension exists. (defaults to true). */")]),s._v("\n gzip"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Try to serve the brotli version of a file automatically when brotli is supported by a client and if the requested file with .br extension exists. (defaults to true). */")]),s._v("\n brotli"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** If not false (defaults to true), format the path to serve static file servers and not require a trailing slash for directories, so that you can do both /directory and /directory/. */")]),s._v("\n format"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Function to set custom headers on response. */")]),s._v("\n setHeaders"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SetHeaders"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Try to match extensions from passed array to search for file when no extension is sufficed in URL. First found is served. (defaults to false) */")]),s._v("\n extensions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"http-https-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#http-https-server"}},[s._v("#")]),s._v(" HTTP & HTTPs server")]),s._v(" "),a("h3",{attrs:{id:"change-address"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#change-address"}},[s._v("#")]),s._v(" Change address")]),s._v(" "),a("p",[s._v("It's possible to change the HTTP and HTTPS server address as follows:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n httpPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"127.0.0.1:8081"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n httpsPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"127.0.0.2:8082"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h3",{attrs:{id:"random-port"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#random-port"}},[s._v("#")]),s._v(" Random port")]),s._v(" "),a("p",[s._v("Random port assignment can be enabled with the value "),a("code",[s._v("0")]),s._v(". The port assignment will be delegated to the OS.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n httpPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"127.0.0.1:0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n httpsPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"127.0.0.2:0"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("Or:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n httpPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n httpsPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h3",{attrs:{id:"disable-http"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#disable-http"}},[s._v("#")]),s._v(" Disable HTTP")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n httpPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("h3",{attrs:{id:"disable-https"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#disable-https"}},[s._v("#")]),s._v(" Disable HTTPS")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n httpsPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("h2",{attrs:{id:"get-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-configuration"}},[s._v("#")]),s._v(" Get configuration")]),s._v(" "),a("p",[s._v("The configuration can be reused throughout your application in different ways.")]),s._v(" "),a("ul",[a("li",[s._v("With dependency injection in "),a("RouterLink",{attrs:{to:"/docs/controllers.html"}},[s._v("Controller")]),s._v(", "),a("RouterLink",{attrs:{to:"/docs/middlewares.html"}},[s._v("Middleware")]),s._v("\n, "),a("RouterLink",{attrs:{to:"/docs/pipes.html"}},[s._v("Pipe")]),s._v(" or any "),a("RouterLink",{attrs:{to:"/docs/services.html"}},[s._v("Injectable")]),s._v(" services.")],1),s._v(" "),a("li",[s._v("With the decorators "),a("ApiSymbolName",[s._v("Constant")]),s._v(" and "),a("ApiSymbolName",[s._v("Value")]),s._v(".")],1)]),s._v(" "),a("h3",{attrs:{id:"from-service-di"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#from-service-di"}},[s._v("#")]),s._v(" From service (DI)")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// or Controller or Middleware")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" configuration"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("h3",{attrs:{id:"from-decorators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#from-decorators"}},[s._v("#")]),s._v(" From decorators")]),s._v(" "),a("p",[s._v("Decorators "),a("ApiSymbolName",[s._v("Constant")]),s._v(" and "),a("ApiSymbolName",[s._v("Value")]),s._v(" can be used in all classes including:")],1),s._v(" "),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/docs/providers.html"}},[s._v("Provider")]),s._v(",")],1),s._v(" "),a("li",[a("RouterLink",{attrs:{to:"/docs/interceptors.html"}},[s._v("Interceptor")]),s._v(",")],1),s._v(" "),a("li",[a("RouterLink",{attrs:{to:"/docs/services.html"}},[s._v("Service")]),s._v(",")],1),s._v(" "),a("li",[a("RouterLink",{attrs:{to:"/docs/controllers.html"}},[s._v("Controller")]),s._v(",")],1),s._v(" "),a("li",[a("RouterLink",{attrs:{to:"/docs/middlewares.html"}},[s._v("Middleware")]),s._v(".")],1)]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Constant")]),s._v(" and "),a("ApiSymbolName",[s._v("Value")]),s._v(" accepts an expression as parameters to inspect the configuration object and return the value.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Constant"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyClass")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Constant")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"env"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n env"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Value")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"swagger.path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n swaggerPath"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Constant")]),s._v(" returns an Object.freeze() value.")],1)]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("NOTE")]),s._v(" "),a("p",[s._v("The values for the decorated properties aren't available on constructor. Use $onInit() hook to use the value.")])])],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/21.85cca76f.js b/assets/js/21.85cca76f.js new file mode 100644 index 00000000000..977e03d76aa --- /dev/null +++ b/assets/js/21.85cca76f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{763:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"custom-endpoint-decorator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-endpoint-decorator"}},[t._v("#")]),t._v(" Custom endpoint decorator")]),t._v(" "),a("p",[t._v("Custom endpoint decorator could be interesting when you want to handle a request and perform actions before or after the endpoint method.")]),t._v(" "),a("p",[t._v("Unlike "),a("RouterLink",{attrs:{to:"/docs/pipes.html"}},[t._v("Pipes")]),t._v(" that operate on the parameters of a method, the endpoint decorator will operate on the method itself.")],1),t._v(" "),a("p",[t._v("It's based on the middleware and use one of these decorators to work:")]),t._v(" "),a("ul",[a("li",[a("ApiSymbolName",[t._v("UseBefore")]),t._v(": use the given middleware before the method,")],1),t._v(" "),a("li",[a("ApiSymbolName",[t._v("Use")]),t._v(": use the given middleware after "),a("code",[t._v("UseBefore")]),t._v(" but before the method,")],1),t._v(" "),a("li",[a("ApiSymbolName",[t._v("UseAfter")]),t._v(": use the given middleware after the method.")],1)]),t._v(" "),a("h2",{attrs:{id:"built-in"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#built-in"}},[t._v("#")]),t._v(" Built-in")]),t._v(" "),a("p",[t._v("Many other decorators are implemented and can be taken as an example to build your own endpoint decorator. Just follow the links here and click on source link to see source code on Github:")]),t._v(" "),a("ApiList",{attrs:{query:"status.indexOf('operation') > -1 && status.indexOf('decorator') > -1"}}),t._v(" "),a("h2",{attrs:{id:"build-your-own-decorator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#build-your-own-decorator"}},[t._v("#")]),t._v(" Build your own decorator")]),t._v(" "),a("p",[t._v("One of the use cases already implemented by Ts.ED is the "),a("ApiSymbolName",[t._v("PlatformAcceptMimesMiddleware")]),t._v(":")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("uniq"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Constant"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("NotAcceptable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Middleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" MiddlewareMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * @middleware\n * @platform\n */")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PlatformAcceptMimesMiddleware")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MiddlewareMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Constant")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"acceptMimes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n acceptMimes"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" mimes "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uniq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("endpoint"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"acceptMimes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("concat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("acceptMimes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mimes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("accepts")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mimes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NotAcceptable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mimes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('", "')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])]),a("p",[t._v("You can see in this example the usage of "),a("code",[t._v("endpoint.get")]),t._v(" from "),a("ApiSymbolName",[t._v("EndpointInfo")]),t._v(". This method contains all options\nwhich can be passed to the decorator associated to PlatformAcceptMimesMiddleware.")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("AcceptMime"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/mypath"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("AcceptMime")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("This example uses "),a("ApiSymbolName",[t._v("AcceptMime")]),t._v(" decorator with one option, the "),a("code",[t._v("application/json")]),t._v(".\nThis option will be set to "),a("code",[t._v("endpoint.get")]),t._v(" seen before with PlatformAcceptMimesMiddleware example and can be retrieved by using\n"),a("code",[t._v("endpoint.get(PlatformAcceptMimesMiddleware)")]),t._v(".")],1)]),t._v(" "),a("p",[t._v("Ts.ED provides API to create your own decorator like "),a("ApiSymbolName",[t._v("AcceptMime")]),t._v(" which registers the options and at least one middleware\nwith these decorators and utils:")],1),t._v(" "),a("ul",[a("li",[a("ApiSymbolName",[t._v("Use")]),t._v(", "),a("ApiSymbolName",[t._v("UseBeforeEach")]),t._v(", "),a("ApiSymbolName",[t._v("UseBefore")]),t._v(", or "),a("ApiSymbolName",[t._v("UseAfter")]),t._v(" for middleware registration,")],1),t._v(" "),a("li",[a("ApiSymbolName",[t._v("applyDecorator")]),t._v(" if you want to combine different decorators,")],1),t._v(" "),a("li",[a("ApiSymbolName",[t._v("StoreMerge")]),t._v(" or "),a("ApiSymbolName",[t._v("StoreGet")]),t._v(" to register options.")],1)]),t._v(" "),a("p",[t._v("For example, we can take the "),a("ApiSymbolName",[t._v("AcceptMime")]),t._v(" decorator as an example and see how it works. Here is its code:")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformAcceptMimesMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseBefore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("useDecorators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" StoreSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("AcceptMime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("mimes"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDecorators")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("StoreSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformAcceptMimesMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" mimes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseBefore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformAcceptMimesMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("It is also possible to create a custom endpoint decorator without Ts.ED middleware. If your action is really small,\nyou can register a pure express middleware to reach better performance.")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseAfter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("useDecorators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CustomStatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("code"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDecorators")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAfter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("req"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("code"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])])])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/22.4fba64c6.js b/assets/js/22.4fba64c6.js new file mode 100644 index 00000000000..9023cbd9497 --- /dev/null +++ b/assets/js/22.4fba64c6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{764:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"custom-providers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-providers"}},[s._v("#")]),s._v(" Custom providers")]),s._v(" "),a("p",[s._v("There are a lot of scenarios where you might want to bind something directly to the IoC container.\nFor example, any constant values, configuration objects created based on the current environment,\nexternal libraries, or pre-calculated values that depend on few other defined providers.")]),s._v(" "),a("p",[s._v("Moreover, you are able to override default implementations, e.g. use different classes or make use of various test doubles (for testing purposes) when needed.")]),s._v(" "),a("p",[s._v("One essential thing that you should always keep in mind is that Ts.ED uses "),a("ApiSymbolName",[s._v("TokenProvider")]),s._v(" to identify a depencency.")],1),s._v(" "),a("p",[s._v("Usually, the auto-generated tokens are equal to classes. If you want to create a custom provider, you'd need to choose a token.\nMostly, the custom tokens are represented by either plain strings or symbols.")]),s._v(" "),a("p",[s._v("Let's go through the available options.")]),s._v(" "),a("h2",{attrs:{id:"use-value"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-value"}},[s._v("#")]),s._v(" Use Value")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("useValue")]),s._v(" syntax is useful when it comes to either define a constant value, put external library into DI container,\nor replace a real implementation with the mock object.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("registerProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"connection-lib"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CONNECTION"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useValue"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n hooks"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onDestroy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("close")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("p",[s._v("In order to inject custom provider, we use the "),a("ApiSymbolName",[s._v("Inject")]),s._v(" decorator. This decorator takes a single argument - the token.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./connection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h2",{attrs:{id:"use-factory"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-factory"}},[s._v("#")]),s._v(" Use Factory")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("useFactory")]),s._v(" is a way of creating providers dynamically.\nThe actual provider will be equal to a returned value of the factory function.\nThe factory function can either depend on several different providers or stay completely independent.\nIt means that factory may accept arguments, that DI will resolve and pass during the instantiation process.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" registerProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DatabaseConnection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"connection-lib"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CONNECTION"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("DatabaseConnection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n deps"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("useFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("configuration"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" options "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"myOptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DatabaseConnection")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n hooks"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onDestroy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("close")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("p",[s._v("In order to inject a custom provider, we use the "),a("ApiSymbolName",[s._v("Inject")]),s._v(" decorator. This decorator takes a single argument - the token.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./connection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("Since v6.110.0, factory and custom provider can register his own "),a("RouterLink",{attrs:{to:"/docs/hooks.html"}},[s._v("hooks")]),s._v("!")],1)]),s._v(" "),a("h2",{attrs:{id:"use-async-factory"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-async-factory"}},[s._v("#")]),s._v(" Use Async Factory")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("useAsyncFactory")]),s._v(" is a way of creating asynchronous providers dynamically.\nThe actual provider will be equal to a returned value of the factory function.\nThe factory function can either depend on several different providers or stay completely independent.\nIt means that factory may accept arguments, that DI will resolve and pass during the instantiation process.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" registerProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DatabaseConnection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"connection-lib"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CONNECTION"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n deps"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("useAsyncFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" options "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" settings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"myOptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" connection "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DatabaseConnection")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("connect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("p",[s._v("In order to inject a custom provider, we use the "),a("ApiSymbolName",[s._v("Inject")]),s._v(" decorator. This decorator takes a single argument - the token.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./connection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Async factory will always be considered as "),a("code",[s._v("SINGLETON")]),s._v(". It is not possible to use other scopes like "),a("code",[s._v("REQUEST")]),s._v(" and "),a("code",[s._v("INSTANCE")]),s._v(" because asynchronous providers are resolved on server loading.")])]),s._v(" "),a("h2",{attrs:{id:"use-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-class"}},[s._v("#")]),s._v(" Use Class")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("useClass")]),s._v(" syntax is similar to register provider via decorator. But it allows you to use different classes per chosen factors.\nFor example you can change the class depending on the environment profile "),a("code",[s._v("production")]),s._v(" or "),a("code",[s._v("development")]),s._v(".")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("EnvTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("registerProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ConfigService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DevConfigService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ConfigService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useClass"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("NODE_ENV")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" EnvTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("PROD")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" ConfigService "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" DevConfigService\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("registerProvider can be used to add a provider or override an existing provider (like "),a("ApiSymbolName",[s._v("OverrideProvider")]),s._v(" decorator).")],1)]),s._v(" "),a("p",[s._v("In this case, even if any class depends on ConfigService, Ts.ED will inject an instance of the provided class ("),a("code",[s._v("ConfigService")]),s._v(" or "),a("code",[s._v("DevConfigService")]),s._v(") instead.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ConfigService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./ConfigService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("configService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ConfigService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("NODE_ENV")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" configService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// DevConfigService or ConfigService")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/23.2dd7c9e5.js b/assets/js/23.2dd7c9e5.js new file mode 100644 index 00000000000..7b3573cd915 --- /dev/null +++ b/assets/js/23.2dd7c9e5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{765:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"exceptions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#exceptions"}},[t._v("#")]),t._v(" Exceptions")]),t._v(" "),a("p",[t._v("Ts.ED http exceptions provide classes to throw standard HTTP exceptions. These exceptions can be used on Controller, Middleware or injectable Service.\nEmitted exceptions will be handled by the "),a("ApiSymbolName",[t._v("PlatformExceptions")]),t._v(" and formatted to a response with the right status code and headers.")],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("This module can be used in standalone with a pure Express/Node.js application.")])]),t._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" @tsed/exceptions\n// or\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" @tsed/exceptions\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("h2",{attrs:{id:"throwing-standard-exceptions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#throwing-standard-exceptions"}},[t._v("#")]),t._v(" Throwing standard exceptions")]),t._v(" "),a("p",[t._v("Here is two examples to throw exceptions based on this package in Ts.ED context or Express.js context:")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Ts.ED"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("BadRequest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" NotFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CalendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/CalendarsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n calendarsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" CalendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("isNaN")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" error "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BadRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Not a number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Additionally")]),t._v("\n error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"x-header"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("message"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ID is not a number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" calendar "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("calendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("calendar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NotFound")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Calendar not found"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" calendar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Express.js"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("BadRequest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InternalServerError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" NotFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" Express "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("getCalendar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/CalendarService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" app "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Express")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\napp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/calendars/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("req"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n params"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("isNaN")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" error "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BadRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ID is not a number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Additionally")]),t._v("\n error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"x-header"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("message"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ID is not a number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Not a number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" calendar "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCalendar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("calendar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NotFound")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Calendar not found"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("json")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("calendar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("origin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InternalServerError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Oops! Something is wrong"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" origin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// GlobalHandler middleware catch exception and send response to the client")]),t._v("\napp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" response"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("instanceof")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// If errors is provided")]),t._v("\n response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"x-errors"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// If a body is provided")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("json")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("send")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("message"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br"),a("span",{staticClass:"line-number"},[t._v("55")]),a("br"),a("span",{staticClass:"line-number"},[t._v("56")]),a("br"),a("span",{staticClass:"line-number"},[t._v("57")]),a("br"),a("span",{staticClass:"line-number"},[t._v("58")]),a("br"),a("span",{staticClass:"line-number"},[t._v("59")]),a("br"),a("span",{staticClass:"line-number"},[t._v("60")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"custom-exception"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-exception"}},[t._v("#")]),t._v(" Custom exception")]),t._v(" "),a("p",[t._v("It's possible to create your own exception by creating a class which inherit from "),a("ApiSymbolName",[t._v("Exception")]),t._v(" or one of the built-in exception like "),a("ApiSymbolName",[t._v("BadRequest")]),t._v(".")],1),t._v(" "),a("p",[t._v("Example:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("BadRequest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IDFormatException")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BadRequest")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ID format is not valid"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("p",[t._v("Since IDFormatException extends the "),a("ApiSymbolName",[t._v("BadRequest")]),t._v(", it will work seamlessly with the built-in exception handler, and therefore we can use it inside a controller method.")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CalendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/CalendarsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("IDFormatException"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../errors/IDFormatException"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n calendarsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" CalendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("isNaN")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IDFormatException")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])]),a("h2",{attrs:{id:"built-in-exceptions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#built-in-exceptions"}},[t._v("#")]),t._v(" Built-in exceptions")]),t._v(" "),a("p",[t._v("Ts.ED provides a set of standard exceptions that inherit from the base "),a("ApiSymbolName",[t._v("Exception")]),t._v(".\nThese are exposed from the @tsed/exceptions package, and represent many of the most common HTTP exceptions:")],1),t._v(" "),a("h3",{attrs:{id:"redirections-3xx"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#redirections-3xx"}},[t._v("#")]),t._v(" Redirections (3xx)")]),t._v(" "),a("ApiList",{attrs:{query:"module == '@tsed/exceptions' && symbolType === 'class' && path.indexOf('redirections') > -1"}}),t._v(" "),a("h3",{attrs:{id:"client-errors-4xx"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#client-errors-4xx"}},[t._v("#")]),t._v(" Client errors (4xx)")]),t._v(" "),a("ApiList",{attrs:{query:"module == '@tsed/exceptions' && symbolType === 'class' && path.indexOf('clientErrors') > -1"}}),t._v(" "),a("h3",{attrs:{id:"server-errors-5xx"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#server-errors-5xx"}},[t._v("#")]),t._v(" Server errors (5xx)")]),t._v(" "),a("ApiList",{attrs:{query:"module == '@tsed/exceptions' && symbolType === 'class' && path.indexOf('serverErrors') > -1"}}),t._v(" "),a("h2",{attrs:{id:"exception-filter"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#exception-filter"}},[t._v("#")]),t._v(" Exception filter")]),t._v(" "),a("p",[t._v("All errors are intercepted by the "),a("ApiSymbolName",[t._v("PlatformExceptionMiddleware")]),t._v(".")],1),t._v(" "),a("p",[t._v("By default, all HTTP Exceptions are automatically sent to the client, and technical errors are\nsent as Internal Server Error.")]),t._v(" "),a("p",[t._v("The "),a("RouterLink",{attrs:{to:"/docs/platform-api.html"}},[t._v("Platform API")]),t._v(" provides "),a("ApiSymbolName",[t._v("Catch")]),t._v(" decorator to catch error.\nIt lets you control the exact flow of control and the content of the response sent back to the client.")],1),t._v(" "),a("p",[t._v("Let's create an exception filter that is responsible for catching exceptions which are an instance of the "),a("ApiSymbolName",[t._v("Exception")]),t._v(" class,\nand implementing custom response logic for them.")],1),t._v(" "),a("p",[t._v("To do this, we'll need to access the underlying platform Request and Response objects by using the "),a("ApiSymbolName",[t._v("Context")]),t._v(" decorator.\nWe'll access the Request object, so we can pull out the original url and include that in the logging information.\nWe'll use the Response object to take direct control of the response that is sent, using the "),a("code",[t._v("response.body()")]),t._v(" method.")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ResponseErrorObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Catch"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ExceptionFilterMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Catch")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HttpExceptionFilter")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExceptionFilterMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("catch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" error "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("mapError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" headers "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n error\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("mapError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("origin"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n message"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("message"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n status"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("500")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getErrors")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getErrors")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("origin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("filter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("reduce")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ResponseErrorObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("errs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("origin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("filter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("reduce")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ResponseErrorObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("headers "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("note")]),t._v(" "),a("p",[t._v("All exception filters should implement the generic "),a("code",[t._v("ExceptionFilterMethods")]),t._v(" interface. This requires you to provide the catch(exception: T, ctx: Context) method with its indicated signature. "),a("code",[t._v("T")]),t._v(" indicates the type of the exception.")])]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("@Catch(Exception)")]),t._v(" decorator binds the required metadata to the exception filter, telling Ts.ED that this particular filter is looking for exceptions of type "),a("ApiSymbolName",[t._v("Exception")]),t._v(" and nothing else.\nThe "),a("ApiSymbolName",[t._v("Catch")]),t._v(" decorator may take a single parameter, or a comma-separated list. This lets you set up the filter for several types of exceptions at once.")],1),t._v(" "),a("p",[t._v("If you want to catch all errors, just use the "),a("ApiSymbolName",[t._v("Catch")]),t._v(" decorator with the "),a("code",[t._v("Error")]),t._v(" class:")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ResponseErrorObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Catch"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ExceptionFilterMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Catch")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ErrorFilter")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExceptionFilterMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("catch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" error "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("mapError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" headers "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n error\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n response\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("500")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("mapError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("origin"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n message"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("message"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n status"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("500")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getErrors")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getErrors")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("origin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("filter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("reduce")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ResponseErrorObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("errs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("origin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("filter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("reduce")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ResponseErrorObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("headers "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br")])]),a("h2",{attrs:{id:"_404-resourcenotfound"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_404-resourcenotfound"}},[t._v("#")]),t._v(" 404 ResourceNotFound")]),t._v(" "),a("p",[t._v("Ts.ED throw a "),a("ApiSymbolName",[t._v("ResourceNotFound")]),t._v(" error when nothing routes are resolved by the router.\nBy using Exception filter, it is now possible to manage this error and customize the\nresponse sent to your consumer.")],1),t._v(" "),a("p",[t._v("Create a new ResourceNotFoundFilter in the filters directories and copy/paste this example:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ResourceNotFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Catch"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ExceptionFilterMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Catch")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ResourceNotFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceNotFoundFilter")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExceptionFilterMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("catch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ResourceNotFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n status"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n message"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("message"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n url"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Json response")]),t._v("\n response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Or with ejs/handlers/etc...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" html "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("render")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"404.ejs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[a("code",[t._v("response.render()")]),t._v(" requires to configure the template engine before. See our page over "),a("RouterLink",{attrs:{to:"/tutorials/templating.html#installation"}},[t._v("Templating engine")]),t._v(" installation for more details.")],1)]),t._v(" "),a("p",[t._v("Then import the custom filter in your server:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./filters/ResourceNotFoundFilter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Importing filter with ES6 import is enough")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/24.e6c2e4d4.js b/assets/js/24.e6c2e4d4.js new file mode 100644 index 00000000000..9b205bc05ea --- /dev/null +++ b/assets/js/24.e6c2e4d4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{766:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"factory"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#factory"}},[t._v("#")]),t._v(" Factory")]),t._v(" "),a("p",[t._v("Factory is similar to Service except that the factory uses an already instantiated object and you have to use\nthe "),a("code",[t._v("@Inject()")]),t._v(" decorator to inject the factory to other "),a("code",[t._v("Service")]),t._v(" or "),a("code",[t._v("Controller")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"declare-a-factory-from-an-instance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#declare-a-factory-from-an-instance"}},[t._v("#")]),t._v(" Declare a factory from an instance")]),t._v(" "),a("p",[t._v("This example shows you how you can add an already constructed service like a npm module.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// MyFooFactory.ts")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("registerProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyFooFactory")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFoo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" MyFooFactory "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Symbol")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MyFooFactory"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyFooFactory"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getFoo")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("p",[t._v("Then inject your factory in another service (or controller):")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyFooFactory"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./FooFactory.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OtherService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyFooFactory"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" myFooFactory"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyFooFactory"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("myFooFactory"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFoo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('/// "test"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Note TypeScript transforms and stores "),a("code",[t._v("MyFooFactory")]),t._v(" as "),a("code",[t._v("Function")]),t._v(" type in the metadata. So to inject a factory,\nyou must use the "),a("ApiSymbolName",[t._v("Inject")]),t._v(" decorator.")],1)]),t._v(" "),a("h2",{attrs:{id:"built-in-factory"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#built-in-factory"}},[t._v("#")]),t._v(" Built-in Factory")]),t._v(" "),a("p",[t._v("Some factories are built-in Ts.ED. These factories are :")]),t._v(" "),a("ul",[a("li",[t._v("HttpServer. This is an instance\nof "),a("a",{attrs:{href:"https://nodejs.org/dist/latest/docs/api/http.html#http_class_http_server",target:"_blank",rel:"noopener noreferrer"}},[t._v("Http.Server"),a("OutboundLink")],1),t._v(" from "),a("code",[t._v("http")]),t._v(" module.")]),t._v(" "),a("li",[t._v("HttpsServer. This is an instance\nof "),a("a",{attrs:{href:"https://nodejs.org/dist/latest/docs/api/https.html#https_class_https_server",target:"_blank",rel:"noopener noreferrer"}},[t._v("Https.Server"),a("OutboundLink")],1),t._v(" from "),a("code",[t._v("https")]),t._v(" module.")])]),t._v(" "),a("h2",{attrs:{id:"inject-http-server-or-https-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#inject-http-server-or-https-server"}},[t._v("#")]),t._v(" Inject Http.Server or Https.Server")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Http "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Https "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OtherService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Http"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n httpServer"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Http"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Server "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Https"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n httpsServer"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Https"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Server "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("httpServer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"HTTP"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("httpsServer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"HTTPS"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/25.5b2158da.js b/assets/js/25.5b2158da.js new file mode 100644 index 00000000000..1d35dc0b9ff --- /dev/null +++ b/assets/js/25.5b2158da.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{769:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"injection-scopes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#injection-scopes"}},[s._v("#")]),s._v(" Injection scopes")]),s._v(" "),a("p",[s._v("The scope of a "),a("RouterLink",{attrs:{to:"/docs/providers.html"}},[s._v("Provider")]),s._v(" defines the lifecycle and visibility of that bean in the context in which it is used.")],1),s._v(" "),a("p",[s._v("Ts.ED DI defines 3 types of "),a("ApiSymbolName",[s._v("Scope")]),s._v(": "),a("code",[s._v("singleton")]),s._v(", "),a("code",[s._v("request")]),s._v(" and "),a("code",[s._v("instance")]),s._v(" which can be used on "),a("code",[s._v("Provider")]),s._v(", "),a("code",[s._v("Service")]),s._v(", "),a("code",[s._v("Middleware")]),s._v(" and "),a("code",[s._v("Controller")]),s._v(".")],1),s._v(" "),a("h2",{attrs:{id:"singleton-scope"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#singleton-scope"}},[s._v("#")]),s._v(" Singleton scope")]),s._v(" "),a("p",[s._v("Singleton scope is the default behavior of all providers. That means all providers are created during server initialization.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Scope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Scope")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("SINGLETON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// OPTIONAL, leaving this annotation a the same behavior")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" rand "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("random")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/random"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("rand"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("In this example all requests on "),a("code",[s._v("/random")]),s._v(" endpoint return the same random value.")])]),s._v(" "),a("h2",{attrs:{id:"request-scope"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#request-scope"}},[s._v("#")]),s._v(" Request scope")]),s._v(" "),a("p",[s._v("Request scope will create a new instance of provider for each incoming request. A new container will be created\nand attached to the request. It will contain all providers annotated by "),a("code",[s._v("@Scope(ProviderScope.REQUEST)")]),s._v(".")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Scope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Scope")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REQUEST")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" rand "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("random")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/random"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("rand"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("p",[s._v("Each request on "),a("code",[s._v("/random")]),s._v(" will return a different random value.")]),s._v(" "),a("h3",{attrs:{id:"chain-with-service"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chain-with-service"}},[s._v("#")]),s._v(" Chain with Service")]),s._v(" "),a("p",[s._v("It is also possible to use "),a("code",[s._v("@Scope(ProviderScope.REQUEST)")]),s._v(" on a service if your service is injected on a controller\nwhich is annotated by "),a("code",[s._v("@Scope(ProviderScope.REQUEST)")]),s._v(" too.")]),s._v(" "),a("p",[s._v("Here is a working example:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Scope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Scope")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REQUEST")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" rand "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("random")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Scope")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REQUEST")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" myService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/random"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("myService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("rand"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("p",[s._v("And here is an unworking example:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Scope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Scope")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REQUEST")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" rand "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("random")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Scope")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("SINGLETON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// SINGLETON avoid all Scope("request") annotation')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" myService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/random"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("myService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("rand"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("SINGLETON")]),s._v(" annotation avoids the "),a("code",[s._v("@Scope(ProviderScope.REQUEST)")]),s._v(" annotation put on MyService.")])]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("@Scope(ProviderScope.REQUEST)")]),s._v(" annotation has no effect on Global middlewares.")])]),s._v(" "),a("h3",{attrs:{id:"performance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#performance"}},[s._v("#")]),s._v(" Performance")]),s._v(" "),a("p",[s._v("Using request-scoped providers will obviously affect application performance.\nEven though Ts.ED is trying to cache as much metadata as possible, it will still have to create an instance of your class on each request.\nHence, it will slow down your average response time and overall benchmarking result.\nIf your provider doesn't necessarily need to be request-scoped, you should rather stick with the singleton scope.")]),s._v(" "),a("h2",{attrs:{id:"instance-scope"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#instance-scope"}},[s._v("#")]),s._v(" Instance scope")]),s._v(" "),a("p",[s._v("Instance scope used on a provider tells the injector to create a new instance each time the provider is injected to another one.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Scope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Scope")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("INSTANCE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyInstanceService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" rand "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("random")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/random"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("rand"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Scope")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("SINGLETON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("instance1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyInstanceService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" instance2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyInstanceService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"IsSame"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" instance1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" instance2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"instance1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" instance1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"instance2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" instance2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/26.0eef393b.js b/assets/js/26.0eef393b.js new file mode 100644 index 00000000000..e818938397b --- /dev/null +++ b/assets/js/26.0eef393b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{768:function(t,s,n){"use strict";n.r(s);var a=n(1),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"interceptors"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#interceptors"}},[t._v("#")]),t._v(" Interceptors")]),t._v(" "),n("p",[t._v("An interceptor is a class annotated with the "),n("ApiSymbolName",[t._v("Interceptor")]),t._v(" decorator. Interceptors should implement the "),n("ApiSymbolName",[t._v("InterceptorMethods")]),t._v(" interface.")],1),t._v(" "),n("p",[t._v("Interceptors have a set of useful capabilities which are inspired by the "),n("a",{attrs:{href:"https://en.wikipedia.org/wiki/Aspect-oriented_programming",target:"_blank",rel:"noopener noreferrer"}},[t._v("Aspect Oriented Programming"),n("OutboundLink")],1),t._v(" (AOP) technique.")]),t._v(" "),n("p",[t._v("Creating and consuming an interceptor is a two-step process:")]),t._v(" "),n("ol",[n("li",[t._v("Create and annotate the interceptor class that will intercept calls to service methods")]),t._v(" "),n("li",[t._v("Decide which methods will be "),n("strong",[t._v("intercepted")]),t._v(" by which "),n("strong",[t._v("interceptor")])])]),t._v(" "),n("p",[t._v("They make it possible to:")]),t._v(" "),n("ul",[n("li",[t._v("bind extra logic before / after method execution")]),t._v(" "),n("li",[t._v("transform the result returned from a function")]),t._v(" "),n("li",[t._v("transform the exception thrown from a function")]),t._v(" "),n("li",[t._v("extend the basic function behavior")]),t._v(" "),n("li",[t._v("completely override a function depending on specific conditions")])]),t._v(" "),n("h2",{attrs:{id:"decorators"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[t._v("#")]),t._v(" Decorators")]),t._v(" "),n("ApiList",{attrs:{query:"module == '@tsed/di' && symbolType === 'decorator'"}}),t._v(" "),n("h2",{attrs:{id:"interceptor-class"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#interceptor-class"}},[t._v("#")]),t._v(" Interceptor class")]),t._v(" "),n("p",[t._v("To create an interceptor class you need to implement the "),n("code",[t._v("IInterceptor")]),t._v(" interface and implement the\n"),n("code",[t._v("intercept(context: IInterceptorContext, next?: IInterceptorNextHandler)")]),t._v(" method, and use the "),n("code",[t._v("@Interceptor()")]),t._v(" annotation to register your interceptor class.\nInside your "),n("code",[t._v("src/interceptors/MyInterceptor.ts")]),t._v(" folder, create the following simple interceptor.")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("InterceptorMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InterceptorContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InterceptorNext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Interceptor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Interceptor")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyInterceptor")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InterceptorMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * ctx: The context that holds the dynamic data related to the method execution and the proceed method\n * to proceed with the original method execution\n *\n * opts: Static params that can be provided when the interceptor is attached to a specific method\n */")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("intercept")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" InterceptorContext"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" next"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" InterceptorNext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("the method ")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("propertyKey"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v(" will be executed with args ")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("args"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v(" and static data ")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("options"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// let the original method by calling next function")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" result "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("the method was executed, and returned ")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("result"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// must return the returned value back to the caller")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br")])]),n("h2",{attrs:{id:"use-the-interceptor"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#use-the-interceptor"}},[t._v("#")]),t._v(" Use the interceptor")]),t._v(" "),n("p",[t._v("Now that your interceptor logic is in place, you can use it in any other service. You need to use the "),n("code",[t._v("@Intercept(InterceptorClass, opts)")]),t._v(" annotation to register which interceptor should be used for the specific method you want to intercept. An example service in "),n("code",[t._v("src/services/MyService.ts")]),t._v(":")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Intercept"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyInterceptor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../interceptors/MyInterceptor"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// MyInterceptor is going to be used to intercept this method whenever called")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 'simple data' is static data that will be passed as second arg to the interceptor.intercept method")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Intercept")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyInterceptor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"simple data"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mySimpleMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"the simple method is executed"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// on class")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Intercept")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyInterceptor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"simple data"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService2")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mySimpleMethod1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"the simple method is executed"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("mySimpleMethod2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"the simple method is executed"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br")])]),n("p",[t._v("If the service method is executed like "),n("code",[t._v("myServiceInstance.mySimpleMethod()")]),t._v(" we will get the following output:")]),t._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[t._v("the method mySimpleMethod will be executed with args and static data simple data\nthe simple method is executed\nthe method was executed, and returned undefined\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/27.1bc5b845.js b/assets/js/27.1bc5b845.js new file mode 100644 index 00000000000..a7686f40054 --- /dev/null +++ b/assets/js/27.1bc5b845.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{770:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"jsonmapper"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jsonmapper"}},[s._v("#")]),s._v(" JsonMapper")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("@tsed/json-mapper")]),s._v(" package is responsible to map a plain object to a model and a model to a plain object.")]),s._v(" "),a("p",[s._v("It provides two functions "),a("ApiSymbolName",[s._v("serialize")]),s._v(" and "),a("ApiSymbolName",[s._v("deserialize")]),s._v(" to transform object depending on which operation you want to perform.\nIt uses all decorators from "),a("code",[s._v("@tsed/schema")]),s._v(" package and TypeScript metadata to work.")],1),s._v(" "),a("p",[s._v("Ts.ED use this package to transform any input parameters sent by your consumer to a class and transform returned value by your endpoint\nto a plain javascript object to your consumer.")]),s._v(" "),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[s._v("#")]),s._v(" Configuration")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n jsonMapper"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n additionalProperties"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n disableUnsecureConstructor"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("h3",{attrs:{id:"jsonmapper-additionalproperties"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jsonmapper-additionalproperties"}},[s._v("#")]),s._v(" jsonMapper.additionalProperties")]),s._v(" "),a("p",[s._v("Enable additional properties on model. By default, "),a("code",[s._v("false")]),s._v(". Enable this option is dangerous and may be a potential security issue.")]),s._v(" "),a("h3",{attrs:{id:"jsonmapper-disableunsecureconstructor"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jsonmapper-disableunsecureconstructor"}},[s._v("#")]),s._v(" jsonMapper.disableUnsecureConstructor")]),s._v(" "),a("p",[s._v("Pass the plain object to the model constructor. By default, "),a("code",[s._v("true")]),s._v(".")]),s._v(" "),a("p",[s._v("It may be a potential security issue if you have as constructor with this followings code:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n Object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("assign")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// potential prototype pollution")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),a("p",[s._v("JsonMapper works with a class and decorators. Use decorators on properties to describe a model and use this model as an input parameter or return value by your endpoint. Here is a model example:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Person.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Age in years"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("deserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should deserialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" input "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Person\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should serialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" person "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("firstName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("lastName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("person "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("skills "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("not"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("deserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should deserialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" input "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Person\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("instanceof")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should serialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" person "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("firstName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("lastName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("person "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("skills "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("not"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("Take a look on Jest/Mocha tabs to see "),a("ApiSymbolName",[s._v("serialize")]),s._v(" and "),a("ApiSymbolName",[s._v("deserialize")]),s._v(" functions usage.")],1)]),s._v(" "),a("p",[s._v("Now we can use the "),a("code",[s._v("Person")]),s._v(" model on a controller:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonsCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("person "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("instanceof")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// true")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will be serialized according to your annotation on Person class.")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// OR")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("person "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("instanceof")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// true")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will be serialized according to your annotation on Person class.")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Add the correct json schema for swagger essentially.")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getPersons")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("In the previous example, we can see "),a("ApiSymbolName",[s._v("Returns")]),s._v(" decorator usage.\nIn all case, Ts.ED infer the returned value and apply the correct transformation on your response.")],1),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Returns")]),s._v(" decorator is used to generate the correct swagger documentation only.")],1)]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("When a model is provided, JsonMapper will follow exactly the JsonSchema generated by "),a("code",[s._v("@tsed/schema")]),s._v(" package.")]),s._v(" "),a("p",[s._v("It means, if you missed decorating one or more properties on your model, these properties won't be appear after the transformation.")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"User.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should serialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("_id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"12345"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("firstName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"John"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("lastName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Doe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("password "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"secretpassword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"John"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Doe"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should serialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("_id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"12345"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("firstName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"John"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("lastName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Doe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("password "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"secretpassword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"John"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Doe"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])])])],1),s._v(" "),a("blockquote",[a("p",[s._v("Note: Result is displayed in Jest/Mocha tabs.")])])],1),s._v(" "),a("h2",{attrs:{id:"ignore-properties"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ignore-properties"}},[s._v("#")]),s._v(" Ignore properties")]),s._v(" "),a("h3",{attrs:{id:"usage-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage-2"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Ignore")]),s._v(" decorator can be used to ignore explicitly a property when a transformation have been performed.")],1),s._v(" "),a("p",[s._v("For example, you have a base model to create a User named "),a("code",[s._v("UserCreation")]),s._v(" where the "),a("code",[s._v("password")]),s._v(" is required, but\nyou don't want to expose this field in other cases. One of the solution is to use class inheritance to solve this problem.")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"User.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Ignore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserCreation")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ignore")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserCreation")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ignore")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should serialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("_id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"12345"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("firstName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"John"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("lastName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Doe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("password "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"secretpassword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"John"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Doe"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should serialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("_id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"12345"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("firstName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"John"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("lastName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Doe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("password "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"secretpassword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"John"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Doe"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"with-a-callback"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#with-a-callback"}},[s._v("#")]),s._v(" With a callback")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Ignore")]),s._v(" decorator since v6.13.0 accept a callback which will be called when a property have been serialized or deserialized.\nThe callback will give you more control over the way to ignore a property.")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Name")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ignore")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// should not serialized when the object is returned by an endpoint.")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ignore")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("mongoose"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// should be serialized when the object is returned by an endpoint.")]),s._v("\n scopes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ignore")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n alwaysIgnored"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("p",[s._v("Here is the available options on ctx:")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("Prop")]),s._v(" "),a("th",[s._v("Type")]),s._v(" "),a("th",[s._v("Description")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("endpoint")]),s._v(" "),a("td",[s._v("boolean")]),s._v(" "),a("td",[s._v("It's an endpoint context")])]),s._v(" "),a("tr",[a("td",[s._v("mongoose")]),s._v(" "),a("td",[s._v("boolean")]),s._v(" "),a("td",[s._v("It's a mongoose context")])])])]),s._v(" "),a("h2",{attrs:{id:"additional-properties"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#additional-properties"}},[s._v("#")]),s._v(" Additional properties")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("AdditionalProperties")]),s._v(" decorator can be used to accept any additional properties on a specific model.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Person.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AdditionalProperties"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("AdditionalProperties")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Age in years"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("deserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should deserialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" input "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n job"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Tech lead"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Person\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n job"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Tech lead"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("deserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should deserialize a model"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" input "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n job"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Tech lead"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Person\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("instanceof")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"skill1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n job"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Tech lead"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"alias"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#alias"}},[s._v("#")]),s._v(" Alias")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Name")]),s._v(" decorator lets you to rename the exposed property in your json schema.")],1),s._v(" "),a("p",[s._v("For example mongo db uses the "),a("code",[s._v("_id")]),s._v(" property.\nIn order not to give any indication to our consumer about the nature of the database, it's better to rename the property to "),a("code",[s._v("id")]),s._v(".")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Name")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Object ID"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Example")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5ce7ad3028890bd71749d477"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// same example with mongoose")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model2")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("h2",{attrs:{id:"onserialize"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#onserialize"}},[s._v("#")]),s._v(" OnSerialize")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("OnSerialize")]),s._v(" decorator can be used to intercept and change the property value when a serialization is performed on class.")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OnSerialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OnSerialize")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("v"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" v "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n property"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("h2",{attrs:{id:"ondeserialize"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ondeserialize"}},[s._v("#")]),s._v(" OnDeserialize")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("OnDeserialize")]),s._v(" decorator can be used to intercept and change the property value when a deserialization is performed on class.")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OnDeserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OnDeserialize")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("v"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" v "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n property"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("h2",{attrs:{id:"type-mapper"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#type-mapper"}},[s._v("#")]),s._v(" Type mapper")]),s._v(" "),a("p",[a("code",[s._v("@tsed/json-mapper")]),s._v(" use classes to transform an input value to the expected value:")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("Type")]),s._v(" "),a("th",[s._v("Mapper")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[s._v("Primitives")]),s._v(" "),a("td",[a("ApiSymbolName",[s._v("PrimitiveMapper")]),s._v(",")],1)]),s._v(" "),a("tr",[a("td",[s._v("Symbol")]),s._v(" "),a("td",[a("ApiSymbolName",[s._v("SymbolMapper")]),s._v(",")],1)]),s._v(" "),a("tr",[a("td",[s._v("Objects")]),s._v(" "),a("td",[a("ApiSymbolName",[s._v("DateMapper")]),s._v(",")],1)]),s._v(" "),a("tr",[a("td",[s._v("Collections")]),s._v(" "),a("td",[a("ApiSymbolName",[s._v("ArrayMapper")]),s._v(", "),a("ApiSymbolName",[s._v("MapMapper")]),s._v(" and "),a("ApiSymbolName",[s._v("SetMapper")]),s._v(".")],1)])])]),s._v(" "),a("p",[s._v("It's possible to add your own type mapper by using the "),a("ApiSymbolName",[s._v("JsonMapper")]),s._v(" decorator on a class. Just copy a mapper implementation\nand import the mapper in your application.")],1),s._v(" "),a("h3",{attrs:{id:"primitives"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#primitives"}},[s._v("#")]),s._v(" Primitives")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("PrimitiveMapper")]),s._v(" is responsible to map the primitive value like "),a("code",[s._v("Boolean")]),s._v(", "),a("code",[s._v("Number")]),s._v(" or "),a("code",[s._v("String")]),s._v(".")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"PrimitiveMapper"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/jsonMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapperMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../interfaces/JsonMapperMethods"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isNullish")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"null"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("includes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CastError")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Error")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CAST_ERROR"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("message"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("Cast error. ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("message"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Mapper for the `String`, `Number`, `BigInt` and `Boolean` types.\n * @jsonmapper\n * @component\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonMapper")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BigInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" BigInt "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("switch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("case")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("case")]),s._v(" BigInt"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isNullish")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BigInt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("case")]),s._v(" Number"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isNullish")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isNaN")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CastError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Expression value is not a number."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("case")]),s._v(" Boolean"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"true"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("includes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("includes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isNullish")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("object"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" BigInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" BigInt "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Spec"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("catchError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Sinon "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sinon"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PrimitiveMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./PrimitiveMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PrimitiveMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deserialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value (number => string)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value (string => string)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value (null => number)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("\"should return value ('null' => number)\"")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"null"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value (string => number)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value (number => number)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value (wrong number => number)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"t1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("let")]),s._v(" actualError"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("catchError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("actualError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("message"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Cast error. Expression value is not a number."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value (truthy => boolean)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"true"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value (falsy => boolean)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"false"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeUndefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value (null => boolean)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"null"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"serialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PrimitiveMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br"),a("span",{staticClass:"line-number"},[s._v("73")]),a("br"),a("span",{staticClass:"line-number"},[s._v("74")]),a("br"),a("span",{staticClass:"line-number"},[s._v("75")]),a("br"),a("span",{staticClass:"line-number"},[s._v("76")]),a("br"),a("span",{staticClass:"line-number"},[s._v("77")]),a("br"),a("span",{staticClass:"line-number"},[s._v("78")]),a("br"),a("span",{staticClass:"line-number"},[s._v("79")]),a("br"),a("span",{staticClass:"line-number"},[s._v("80")]),a("br"),a("span",{staticClass:"line-number"},[s._v("81")]),a("br"),a("span",{staticClass:"line-number"},[s._v("82")]),a("br"),a("span",{staticClass:"line-number"},[s._v("83")]),a("br"),a("span",{staticClass:"line-number"},[s._v("84")]),a("br"),a("span",{staticClass:"line-number"},[s._v("85")]),a("br"),a("span",{staticClass:"line-number"},[s._v("86")]),a("br"),a("span",{staticClass:"line-number"},[s._v("87")]),a("br"),a("span",{staticClass:"line-number"},[s._v("88")]),a("br"),a("span",{staticClass:"line-number"},[s._v("89")]),a("br"),a("span",{staticClass:"line-number"},[s._v("90")]),a("br"),a("span",{staticClass:"line-number"},[s._v("91")]),a("br"),a("span",{staticClass:"line-number"},[s._v("92")]),a("br"),a("span",{staticClass:"line-number"},[s._v("93")]),a("br"),a("span",{staticClass:"line-number"},[s._v("94")]),a("br"),a("span",{staticClass:"line-number"},[s._v("95")]),a("br"),a("span",{staticClass:"line-number"},[s._v("96")]),a("br"),a("span",{staticClass:"line-number"},[s._v("97")]),a("br"),a("span",{staticClass:"line-number"},[s._v("98")]),a("br"),a("span",{staticClass:"line-number"},[s._v("99")]),a("br"),a("span",{staticClass:"line-number"},[s._v("100")]),a("br"),a("span",{staticClass:"line-number"},[s._v("101")]),a("br"),a("span",{staticClass:"line-number"},[s._v("102")]),a("br"),a("span",{staticClass:"line-number"},[s._v("103")]),a("br"),a("span",{staticClass:"line-number"},[s._v("104")]),a("br"),a("span",{staticClass:"line-number"},[s._v("105")]),a("br"),a("span",{staticClass:"line-number"},[s._v("106")]),a("br"),a("span",{staticClass:"line-number"},[s._v("107")]),a("br"),a("span",{staticClass:"line-number"},[s._v("108")]),a("br"),a("span",{staticClass:"line-number"},[s._v("109")]),a("br"),a("span",{staticClass:"line-number"},[s._v("110")]),a("br"),a("span",{staticClass:"line-number"},[s._v("111")]),a("br"),a("span",{staticClass:"line-number"},[s._v("112")]),a("br"),a("span",{staticClass:"line-number"},[s._v("113")]),a("br"),a("span",{staticClass:"line-number"},[s._v("114")]),a("br"),a("span",{staticClass:"line-number"},[s._v("115")]),a("br"),a("span",{staticClass:"line-number"},[s._v("116")]),a("br"),a("span",{staticClass:"line-number"},[s._v("117")]),a("br"),a("span",{staticClass:"line-number"},[s._v("118")]),a("br"),a("span",{staticClass:"line-number"},[s._v("119")]),a("br"),a("span",{staticClass:"line-number"},[s._v("120")]),a("br"),a("span",{staticClass:"line-number"},[s._v("121")]),a("br"),a("span",{staticClass:"line-number"},[s._v("122")]),a("br"),a("span",{staticClass:"line-number"},[s._v("123")]),a("br"),a("span",{staticClass:"line-number"},[s._v("124")]),a("br"),a("span",{staticClass:"line-number"},[s._v("125")]),a("br"),a("span",{staticClass:"line-number"},[s._v("126")]),a("br"),a("span",{staticClass:"line-number"},[s._v("127")]),a("br"),a("span",{staticClass:"line-number"},[s._v("128")]),a("br"),a("span",{staticClass:"line-number"},[s._v("129")]),a("br"),a("span",{staticClass:"line-number"},[s._v("130")]),a("br"),a("span",{staticClass:"line-number"},[s._v("131")]),a("br"),a("span",{staticClass:"line-number"},[s._v("132")]),a("br"),a("span",{staticClass:"line-number"},[s._v("133")]),a("br"),a("span",{staticClass:"line-number"},[s._v("134")]),a("br"),a("span",{staticClass:"line-number"},[s._v("135")]),a("br"),a("span",{staticClass:"line-number"},[s._v("136")]),a("br"),a("span",{staticClass:"line-number"},[s._v("137")]),a("br"),a("span",{staticClass:"line-number"},[s._v("138")]),a("br"),a("span",{staticClass:"line-number"},[s._v("139")]),a("br"),a("span",{staticClass:"line-number"},[s._v("140")]),a("br"),a("span",{staticClass:"line-number"},[s._v("141")]),a("br"),a("span",{staticClass:"line-number"},[s._v("142")]),a("br"),a("span",{staticClass:"line-number"},[s._v("143")]),a("br"),a("span",{staticClass:"line-number"},[s._v("144")]),a("br"),a("span",{staticClass:"line-number"},[s._v("145")]),a("br"),a("span",{staticClass:"line-number"},[s._v("146")]),a("br"),a("span",{staticClass:"line-number"},[s._v("147")]),a("br")])])])],1),s._v(" "),a("h4",{attrs:{id:"cheat-sheet"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cheat-sheet"}},[s._v("#")]),s._v(" Cheat sheet")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("Input")]),s._v(" "),a("th",[s._v("Type")]),s._v(" "),a("th",[s._v("Output")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[a("code",[s._v("1")])]),s._v(" "),a("td",[s._v("String")]),s._v(" "),a("td",[a("code",[s._v('"1"')])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('"1"')])]),s._v(" "),a("td",[s._v("String")]),s._v(" "),a("td",[a("code",[s._v('"1"')])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("null")])]),s._v(" "),a("td",[s._v("Number")]),s._v(" "),a("td",[a("code",[s._v("null")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('"null"')])]),s._v(" "),a("td",[s._v("Number")]),s._v(" "),a("td",[a("code",[s._v("null")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('"1"')])]),s._v(" "),a("td",[s._v("Number")]),s._v(" "),a("td",[a("code",[s._v("1")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("1")])]),s._v(" "),a("td",[s._v("Number")]),s._v(" "),a("td",[a("code",[s._v("1")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('"to1"')])]),s._v(" "),a("td",[s._v("Number")]),s._v(" "),a("td",[s._v("Throw Bad Request. This is the only case where JsonMapper throw a cast type error.")])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("true")])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("true")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('"true"')])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("true")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('"1"')])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("true")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("1")])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("true")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("false")])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("false")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('"false"')])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("false")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('"0"')])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("false")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("0")])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("false")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('""')])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("false")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v('"null"')])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("null")])])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("undefined")])]),s._v(" "),a("td",[s._v("Boolean")]),s._v(" "),a("td",[a("code",[s._v("undefined")])])])])]),s._v(" "),a("h3",{attrs:{id:"symbol"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#symbol"}},[s._v("#")]),s._v(" Symbol")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("SymbolMapper")]),s._v(" is responsible to map a "),a("code",[s._v("String")]),s._v(" to "),a("code",[s._v("Symbol")]),s._v(" or a "),a("code",[s._v("Symbol")]),s._v(" to a "),a("code",[s._v("String")]),s._v(".")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"SymbolMapper"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/jsonMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapperMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../interfaces/JsonMapperMethods"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Mapper for the `Symbol` type.\n *\n * @jsonmapper\n * @component\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonMapper")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SymbolMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("symbol")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("object"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("replace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Symbol("')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("replace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('")"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Spec"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("SymbolMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./SymbolMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SymbolMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deserialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SymbolMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SYMBOL"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("typeof")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"symbol"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Symbol(SYMBOL)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"serialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SymbolMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SYMBOL"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SYMBOL"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"date"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#date"}},[s._v("#")]),s._v(" Date")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("DateMapper")]),s._v(" is responsible to map a "),a("code",[s._v("Number")]),s._v(", "),a("code",[s._v("String")]),s._v(" to a "),a("code",[s._v("Date")]),s._v(" or a "),a("code",[s._v("Date")]),s._v(" to a "),a("code",[s._v("String")]),s._v(".")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"DateMapper"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("isBoolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/jsonMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapperMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../interfaces/JsonMapperMethods"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Mapper for `Date` type.\n * @jsonmapper\n * @component\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonMapper")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DateMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// don't convert unexpected data. In normal case, Ajv reject unexpected data.")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// But by default, we have to skip data deserialization and let user to apply")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// the right mapping")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBoolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("object"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toISOString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Spec"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DateMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./DateMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"DateMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deserialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return a Date when the data is a string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DateMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toISOString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return a Date when the data is a number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DateMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getTime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value when the data is a boolean/null/undefined"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DateMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeUndefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"serialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DateMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toISOString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br")])])])],1),s._v(" "),a("p",[s._v("::: warn\nTs.ED doesn't transform Date to date format or hours format because it depends on each project guidelines.")]),s._v(" "),a("p",[s._v("But you can easily implement a Date mapper for each format with the Date API or moment:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("isBoolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DateFormat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapperContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapperMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../src/index"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonMapper")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DateMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// don't convert unexpected data. In normal case, Ajv reject unexpected data.")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// But by default, we have to skip data deserialization and let user to apply")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// the right mapping")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isBoolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("object"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("switch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("case")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" y "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getUTCFullYear")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" m "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getUTCMonth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("slice")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" d "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getUTCDate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("slice")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("y"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("m"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("-")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("d"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toISOString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br")])]),a("p",[s._v(":::")]),s._v(" "),a("h3",{attrs:{id:"array"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#array"}},[s._v("#")]),s._v(" Array")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("ArrayMapper")]),s._v(" is responsible to map any data to an "),a("code",[s._v("Array")]),s._v(".")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"ArrayMapper"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/jsonMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapperMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../interfaces/JsonMapperMethods"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Mapper for `Array` type.\n * @jsonmapper\n * @component\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonMapper")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("concat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("concat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Spec"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Sinon "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sinon"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapperContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../domain/JsonMapperContext"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ArrayMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./ArrayMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ArrayMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deserialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callsFake")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" arrayMapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arrayMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"serialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callsFake")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" arrayMapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ArrayMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arrayMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"map"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#map"}},[s._v("#")]),s._v(" Map")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("MapMapper")]),s._v(" is responsible to map an "),a("code",[s._v("Object")]),s._v(" to a "),a("code",[s._v("Map")]),s._v(".")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"SetMapper"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("objectKeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/jsonMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapperMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../interfaces/JsonMapperMethods"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Mapper for `Map` type.\n * @jsonmapper\n * @component\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonMapper")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Map"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MapMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("C")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Map"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("C")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Map"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Map"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("objectKeys")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("forEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Map"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("forEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" key"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Example"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Skill"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Skill"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Skill"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Map"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Skill"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Spec"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Sinon "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sinon"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapperContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../domain/JsonMapperContext"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MapMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./MapMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MapMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deserialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Map"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callsFake")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MapMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n test"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n ctx\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Map"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"serialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callsFake")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MapMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" map "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n map"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("map"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("test"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"set"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set"}},[s._v("#")]),s._v(" Set")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("SetMapper")]),s._v(" is responsible to map an "),a("code",[s._v("Array")]),s._v(" to a "),a("code",[s._v("Set")]),s._v(".")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"SetMapper"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("objectKeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/jsonMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapperMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../interfaces/JsonMapperMethods"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Mapper for the `Set` Type.\n * @jsonmapper\n * @component\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonMapper")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Set"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SetMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Set"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Set"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("objectKeys")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("forEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Set"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" array"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("forEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" array"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("push")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" array"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Example"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n \n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n skills"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Set"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Spec"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Sinon "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sinon"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapperContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../domain/JsonMapperContext"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("SetMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./SetMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SetMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deserialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Set"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callsFake")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SetMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Set"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("from")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("values")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"serialize()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Set"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callsFake")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" arrayMapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SetMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" arrayMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testMap"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"create-your-own-type-mapper"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-your-own-type-mapper"}},[s._v("#")]),s._v(" Create your own type mapper")]),s._v(" "),a("p",[s._v("It's possible de to change add your own type mapper by using the "),a("ApiSymbolName",[s._v("JsonMapper")]),s._v(" decorator on a class. Just copy a mapper implementation\nand import the mapper in your application.")],1),s._v(" "),a("p",[s._v("A mapper must declare the type it must work on and implement two methods: serialize and deserialize.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapperMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonMapper")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TheTypeMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('":deserialize"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('":serialize"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("p",[s._v("Then import your new mapper in your Server.ts as following:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./mappers/TheTypeMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("h3",{attrs:{id:"moment"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#moment"}},[s._v("#")]),s._v(" Moment")]),s._v(" "),a("p",[a("a",{attrs:{href:"https://momentjs.com",target:"_blank",rel:"noopener noreferrer"}},[s._v("Moment.js"),a("OutboundLink")],1),s._v(" is a powerful library to transform any formatted date string to a Moment instance.")]),s._v(" "),a("p",[s._v("You can change the Date mapper behavior to transform string to a Moment instance.")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"MomentMapper"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonMapperMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" moment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Moment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"moment"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonMapper")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Moment"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MomentMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JsonMapperMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Moment "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("moment")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"YYYY-MM-DD hh:mm:ss"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" Moment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonMapperCtx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" format "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?.")]),s._v("format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("switch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("case")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("moment")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("format")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"YYYY-MM-DD"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("moment")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("format")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"YYYY-MM-DD hh:mm:ss"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Configuration"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./mappers/MomentMapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// just import mapper to be available")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Example"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Moment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"moment"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// or @Property(String) + @DateTime()")]),s._v("\n birthdate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Moment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/28.52da8139.js b/assets/js/28.52da8139.js new file mode 100644 index 00000000000..59ff3421ecb --- /dev/null +++ b/assets/js/28.52da8139.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{774:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"logger"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#logger"}},[t._v("#")]),t._v(" Logger")]),t._v(" "),a("p",[t._v("Ts.ED has its own logger available through "),a("a",{attrs:{href:"https://logger.tsed.io",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("@tsed/logger")]),a("OutboundLink")],1),t._v(" package.")]),t._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[t._v("#")]),t._v(" Features")]),t._v(" "),a("p",[t._v("Ts.ED logger supports many features, and is optimized to be used in production.")]),t._v(" "),a("ul",[a("li",[t._v("Many "),a("a",{attrs:{href:"https://logger.tsed.io/layouts",target:"_blank",rel:"noopener noreferrer"}},[t._v("layout"),a("OutboundLink")],1),t._v(" formats are supported:")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/layouts/colored.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Colored console"),a("OutboundLink")],1),t._v(" logging to stdout or stderr.")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/layouts/json.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Json layout"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[t._v("Many appender (stream) formats are supported:\n"),a("ul",[a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/console.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Console"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/file.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("File"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/file-date.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("File date"),a("OutboundLink")],1),t._v(", with configurable log rolling based on file size or date.")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/stdout.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Stdout"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/stderr.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Stderr"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/insight.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Insight"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/logentries.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("LogEntries"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/logstash-http.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("LogStash HTTP"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/logstash-udp.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("LogStash UDP"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/loggly.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Loggly"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/rabbitmq.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("RabbitMQ"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://tsed.io/tutorials/seq.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Seq"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/slack.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Slack"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/smtp.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Smtp"),a("OutboundLink")],1),t._v(".")])])]),t._v(" "),a("li",[a("ApiSymbolName",[t._v("ContextLogger")]),t._v(", in "),a("strong",[t._v("production")]),t._v(" mode, caches all request logs until the response is sent to your consumer. See "),a("RouterLink",{attrs:{to:"/docs/logger.html#request-logger"}},[t._v("request logger")]),t._v(" section bellow.")],1)]),t._v(" "),a("p",[t._v("You can create your own layout/appender:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://logger.tsed.io/appenders/custom.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Customize appender (chanel)"),a("OutboundLink")],1),t._v(",")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://logger.tsed.io/layouts/custom.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Customize layout"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),a("p",[t._v("Logger can be configured through the "),a("ApiSymbolName",[t._v("Configuration")]),t._v(" decorator:")],1),t._v(" "),a("div",{staticClass:"table-features"},[a("table",[a("thead",[a("tr",[a("th",[t._v("Props")]),t._v(" "),a("th",[t._v("Description")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",[t._v("logger.level")])]),t._v(" "),a("td",[t._v("Change the default log level displayed in the terminal. Values: "),a("code",[t._v("debug")]),t._v(", "),a("code",[t._v("info")]),t._v(", "),a("code",[t._v("warn")]),t._v(" or "),a("code",[t._v("error")]),t._v(". By default: "),a("code",[t._v("info")]),t._v(".")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("logger.logRequest")])]),t._v(" "),a("td",[t._v("Log all incoming requests. By default, it's true and prints the configured "),a("code",[t._v("logger.requestFields")]),t._v(".")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("logger.requestFields")])]),t._v(" "),a("td",[t._v("Fields displayed when a request is logged. Possible values: "),a("code",[t._v("reqId")]),t._v(", "),a("code",[t._v("method")]),t._v(", "),a("code",[t._v("url")]),t._v(", "),a("code",[t._v("headers")]),t._v(", "),a("code",[t._v("body")]),t._v(", "),a("code",[t._v("query")]),t._v(","),a("code",[t._v("params")]),t._v(", "),a("code",[t._v("duration")]),t._v(".")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("logger.reqIdBuilder")])]),t._v(" "),a("td",[t._v("A function called for each incoming request to create a request id.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("logger.jsonIndentation")])]),t._v(" "),a("td",[t._v("The number of space characters to use as white space in JSON output. Default is 2 (0 in production).")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("logger.disableRoutesSummary")])]),t._v(" "),a("td",[t._v("Disable routes table displayed in the logger.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("logger.format")])]),t._v(" "),a("td",[t._v("Specify log format. Example: "),a("code",[t._v("%[%d{[yyyy-MM-dd hh:mm:ss,SSS}] %p%] %m")]),t._v(". See "),a("a",{attrs:{href:"https://logger.tsed.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("@tsed/logger configuration"),a("OutboundLink")],1),t._v(".")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("logger.ignoreUrlPatterns")])]),t._v(" "),a("td",[t._v("("),a("code",[t._v("String")]),t._v(" or "),a("code",[t._v("RegExp")]),t._v(") List of patterns to ignore logged request according to the "),a("code",[t._v("request.url")]),t._v(".")])])])])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("It is recommended to disable logRequest in production. Logger has a cost on the performance.")])]),t._v(" "),a("h2",{attrs:{id:"use-json-layout-in-production"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-json-layout-in-production"}},[t._v("#")]),t._v(" Use Json Layout in production")]),t._v(" "),a("p",[t._v("You add this code to switch the logger to Json layout in production mode:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" isProduction "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NODE_ENV")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" Env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("PROD")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("isProduction"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("appenders"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stdout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stdout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n levels"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"info"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"debug"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"json"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("appenders"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stderr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n levels"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"trace"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fatal"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"error"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"warn"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stderr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n layout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"json"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n disableRoutesSummary"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" isProduction "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// remove table with routes summary")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br")])]),a("p",[t._v("This configuration will display the log as following:")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"startTime"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2017-06-05T22:23:08.479Z"')]),t._v(","),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"categoryName"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"json-test"')]),t._v(","),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"data"')]),t._v(":"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"this is just a test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(","),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"level"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"INFO"')]),t._v(","),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"context"')]),t._v(":"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("It's more useful if you planed to parse the log with LogStash or any log tool parser.")]),t._v(" "),a("h2",{attrs:{id:"inject-logger"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#inject-logger"}},[t._v("#")]),t._v(" Inject logger")]),t._v(" "),a("p",[t._v("Logger can be injected in any injectable provider as follows:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n logger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Prefer the "),a("ApiSymbolName",[t._v("ContextLogger")]),t._v(" usage if you want to attach your log the current request. See the next section.")],1)]),t._v(" "),a("h2",{attrs:{id:"request-logger"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#request-logger"}},[t._v("#")]),t._v(" Request logger")]),t._v(" "),a("p",[t._v("For each Request, a logger will be attached to the "),a("ApiSymbolName",[t._v("PlatformContext")]),t._v(" and can be used like here:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/logger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/MyService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n myService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("customData"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// parameter is optional")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("customData"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("warn")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("customData"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("customData"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("trace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("customData"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// forward ctx object to the service and use logger inside.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// All request")]),t._v("\n myService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSomething")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br")])]),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSomething")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("input"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("All log use through ctx.logger will be associated with the uniq request id generated by Ts.ED.")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[a("ApiSymbolName",[t._v("ContextLogger")]),t._v(", in "),a("strong",[t._v("production")]),t._v(" mode, caches all request logs until the response is sent to your consumer.")],1)]),t._v(" "),a("p",[t._v("A call with one of these methods will generate a log according to the "),a("code",[t._v("logger.requestFields")]),t._v(" configuration:")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2017")]),t._v("-09-01 "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),t._v(":12:46.994"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("INFO "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("TSED"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" - "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"status"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"reqId"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"method"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GET"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"url"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/api-doc/swagger.json"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"duration"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("92")]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"headers"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"host"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.0.0.0:8001"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"connection"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"keep-alive"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"upgrade-insecure-requests"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user-agent"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accept"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accept-encoding"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"gzip, deflate"')]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accept-language"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"body"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"query"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"customData"')]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])]),a("p",[t._v("You can configure the displayed fields from the server configuration:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n requestFields"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"reqId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"method"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"url"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"headers"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"body"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"query"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"duration"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("p",[t._v("or you can override the middleware with "),a("ApiSymbolName",[t._v("OverrideProvider")]),t._v(".")],1),t._v(" "),a("p",[t._v("Example:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" OverrideProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformLogMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("OverrideProvider")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformLogMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomPlatformLogMiddleware")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PlatformLogMiddleware")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// do something")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// required")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("requestToObject")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NOTE: request => PlatformRequest. To get Express.Request use ctx.getRequest();")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n method"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("method"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n url"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n headers"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n body"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n query"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n params"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])]),a("h2",{attrs:{id:"shutdown-logger"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#shutdown-logger"}},[t._v("#")]),t._v(" Shutdown logger")]),t._v(" "),a("p",[t._v("Shutdown returns a Promise that will be resolved when @tsed/logger has closed all appenders and finished writing log events.\nUse this when your program exits to make sure all your logs are written to files, sockets are closed, etc.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/logger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("shutdown")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("then")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Complete"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/29.fc67d3c6.js b/assets/js/29.fc67d3c6.js new file mode 100644 index 00000000000..d545121604e --- /dev/null +++ b/assets/js/29.fc67d3c6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{771:function(t,s,e){"use strict";e.r(s);var i=e(1),r=Object(i.a)({},(function(){var t=this.$createElement,s=this._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[s("h1",{attrs:{id:"migration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#migration"}},[this._v("#")]),this._v(" Migration")]),this._v(" "),s("p",[this._v("See release note on Github: https://github.com/tsedio/ts-express-decorators/releases")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/3.945dde24.js b/assets/js/3.945dde24.js new file mode 100644 index 00000000000..ca072dbf2cc --- /dev/null +++ b/assets/js/3.945dde24.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{733:function(t,e,s){},734:function(t,e,s){"use strict";s(733)},737:function(t,e,s){"use strict";s(26),s(12),s(27);var o=s(96),r=s(11),a={name:"Page",components:{PageNav:o.PageNav,PageHeader:o.PageHeader,PageSidebar:o.PageSidebar},props:["sidebarItems"],data:function(){return{headerFixed:!1}},computed:{repoUrl:function(){return this.editUrl.replace("/edit","/blob")},hashTags:function(){return this.$frontmatter.hashTags||this.$site.themeConfig.defaultHashTags||[]},createIssueUrl:function(){var t=this.$site.themeConfig,e=t.repo,s=t.docsRepo,o=void 0===s?e:s,a=Object(r.k)(this.$page.path),n=r.l.test(o)?o:"https://github.com/".concat(o);return"".concat(n,"/issues/new?title=").concat(encodeURIComponent("[BUG] Page ".concat(this.$page.title," - ").concat(a)))},editUrl:function(){var t=this.$site.themeConfig,e=t.repo,s=t.editLinks,a=t.docsDir,n=void 0===a?"":a,i=t.docsBranch,l=void 0===i?"master":i,u=t.docsRepo,c=void 0===u?e:u,h=Object(r.k)(this.$page.path);if(r.a.test(h)?h+="README.md":h+=".md",c&&s)return Object(o.createEditLink)(e,c,n,l,h)},lastUpdated:function(){return this.$page.lastUpdated},lastUpdatedText:function(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},shouldShowOtherTopics:function(){var t=this.$page.frontmatter;return!t.layout&&!this.isLandingPage&&!1!==t.otherTopics&&this.otherTopicsItems.length},shouldShowPageSidebar:function(){return!1!==this.$page.frontmatter.pageSidebar},otherTopicsItems:function(){return Object(o.resolveOtherTopicsItems)(this.$page,this.$page.regularPath,this.$site,this.$localePath)}},mounted:function(){var t=this;window.addEventListener("scroll",(function(){t.headerFixed=window.pageYOffset>140}))},methods:{}},n=(s(734),s(1)),i=Object(n.a)(a,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"page"},[s("div",[s("div",{staticClass:"relative"},[s("PageHeader",{attrs:{fixed:t.headerFixed,title:t.$page.title||"Not found","repo-url":t.repoUrl,hashTags:t.hashTags,"create-issue-url":t.createIssueUrl,"edit-url":t.editUrl}})],1),t._v(" "),s("div",{staticClass:"px-5 md:px-10 max-w-site m-auto"},[s("div",{staticClass:"page-content"},[s("article",[t._t("page-top"),t._v(" "),s("Content"),t._v(" "),t._t("page-bottom")],2),t._v(" "),s("div",{staticClass:"pt-5"},[t.lastUpdated?s("div",{staticClass:"py-5 flex justify-end text-sm"},[s("p",[s("span",{staticClass:"font-bold pr-1"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),s("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])])]):t._e(),t._v(" "),s("PageNav",{attrs:{sidebarItems:t.sidebarItems}})],1),t._v(" "),t.shouldShowOtherTopics?s("OtherTopics",{staticClass:"px-3",attrs:{slot:"page-bottom",items:t.otherTopicsItems},slot:"page-bottom"},[s("h4",{staticClass:"text-xl mb-4 mt-2 font-semibold",attrs:{slot:"top"},slot:"top"},[t._v("\n Other topics\n ")])]):t._e()],1)]),t._v(" "),t.shouldShowPageSidebar?s("PageSidebar",{staticClass:"fixed overflow-auto",class:{"-mini-header":t.headerFixed},attrs:{page:t.$page}}):t._e()],1)])}),[],!1,null,null,null);e.a=i.exports},740:function(t,e,s){},744:function(t,e,s){"use strict";s(740)},752:function(t,e,s){"use strict";s.r(e);var o=s(96),r=s(4),a=s(176),n={name:"Home",components:{HeroBanner:o.HeroBanner,HeroBannerCta:o.HeroBannerCta,WordsSlider:o.WordsSlider,Feature:o.Feature,GithubContributors:o.GithubContributors,OpenCollectiveBackers:o.OpenCollectiveBackers,Button:o.Button,Showcase:o.Showcase},computed:{gettingStartedUrl:function(){var t=this.$page.frontmatter.gettingStartedUrl;return t},gettingStartedText:function(){var t=this.$page.frontmatter.gettingStartedText;return t},messengerUrl:function(){var t=this.$page.frontmatter.messengerUrl;return t},messengerText:function(){var t=this.$page.frontmatter.messengerText;return t},messengerIcon:function(){var t=this.$page.frontmatter.messengerIcon;return t},sponsorUrl:function(){var t=this.$page.frontmatter.sponsorUrl;return t},sponsorText:function(){var t=this.$page.frontmatter.sponsorText;return t},sponsorIcon:function(){var t=this.$page.frontmatter.sponsorIcon;return t},features:function(){var t=this.$page.frontmatter.features,e=void 0===t?[]:t;return e},contributors:function(){var t=this.$page.frontmatter.contributors;return t},liveDemoUrl:function(){var t=this.$page.frontmatter.liveDemoUrl;return t}}},i=s(1),l=Object(i.a)(n,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[s("HeroBanner",[s("template",{slot:"hero-brand"},[s("Content",{attrs:{"slot-key":"hero-brand"}})],1),t._v(" "),s("template",{slot:"hero-slogan"},[s("Content",{attrs:{"slot-key":"hero-slogan"}})],1),t._v(" "),s("template",{slot:"hero-content"},[s("Content",{attrs:{"slot-key":"hero-content"}})],1),t._v(" "),s("template",{slot:"hero-cta"},[s("HeroBannerCta",{attrs:{"getting-started-text":t.gettingStartedText,"getting-started-url":t.gettingStartedUrl,"messenger-text":t.messengerText,"messenger-icon":t.messengerIcon,"messenger-url":t.messengerUrl,"sponsor-text":t.sponsorText,"sponsor-icon":t.sponsorIcon,"sponsor-url":t.sponsorUrl}})],1)],2),t._v(" "),s("div",{staticClass:"bg-gray-lighter py-10"},[s("div",{staticClass:"container flex flex-col w-full max-w-md mx-auto px-3 pb-5 text-center"},[s("h2",{staticClass:"text-2xl mb-5 normal-case"},[s("Content",{attrs:{"slot-key":"testimonial-title"}})],1),t._v(" "),s("Content",{attrs:{"slot-key":"testimonial-content"}})],1)]),t._v(" "),t.features.length?s("div",[s("div",{staticClass:"container flex flex-col w-full max-w-site mx-auto px-5 py-5"},[s("div",[s("div",{staticClass:"flex flex-wrap align-center justify-center"},t._l(t.features,(function(e){return s("Feature",{staticClass:"w-full sm:w-1/2 md:w-1/3 mb-5",attrs:{title:e.title,icon:e.icon}},[s("div",{domProps:{innerHTML:t._s(e.details)}})])})),1),t._v(" "),s("div",{staticClass:"flex items-center justify-center pt-5 mb-5"},[s("div",[s("Button",{staticClass:"m-2",attrs:{rounded:"medium",href:t.gettingStartedUrl}},[t._v("\n See more\n ")]),t._v(" "),t.liveDemoUrl?s("Button",{staticClass:"m-2",attrs:{href:t.liveDemoUrl,rounded:"medium","bg-color":"white-button",color:"blue"}},[t._v("\n Live demo\n ")]):t._e()],1)]),t._v(" "),s("Content",{attrs:{"slot-key":"features-footer"}})],1)])]):t._e(),t._v(" "),t._t("page-top"),t._v(" "),s("Content"),t._v(" "),t.contributors?s("Showcase",t._b({class:t.contributors.classes,scopedSlots:t._u([{key:"showcase-cta",fn:function(){return[s("Button",{attrs:{"bg-color":t.contributors.cta.bgColor,color:t.contributors.cta.color,rounded:"medium",href:t.contributors.cta.url}},[t._v("\n "+t._s(t.contributors.cta.label)+"\n ")])]},proxy:!0}],null,!1,3949236416)},"Showcase",t.contributors,!1),[s("GithubContributors",t._b({},"GithubContributors",t.contributors.badge,!1))],1):t._e(),t._v(" "),s("SupportUsBlock"),t._v(" "),t._t("page-bottom")],2)}),[],!1,null,null,null).exports,u=s(737),c={name:"WarehousePage",components:{Warehouse:o.Warehouse}},h=Object(i.a)(c,(function(){var t=this.$createElement,e=this._self._c||t;return e("Warehouse",{attrs:{url:this.$site.themeConfig.warehouseUrl||"https://api.tsed.io/rest/warehouse","initial-plugins":this.$site.themeConfig.warehouseItems}},[e("Content",{attrs:{"slot-key":"warehouse-header"}})],1)}),[],!1,null,null,null).exports,d={name:"OffersPage",components:{Offers:o.Offers},methods:{getConfig:function(){var t=this.$frontmatter.config;if(t){var e=this.$site.themeConfig.offers[t];if(e)return e}return this.$frontmatter}}},p=Object(i.a)(d,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",[e("Offers",this._b({staticClass:"bg-gray-200"},"Offers",this.getConfig(),!1)),this._v(" "),e("div",[e("Content",{attrs:{"slot-key":"header-raw-content"}})],1),this._v(" "),e("div",{staticClass:"px-5 md:px-10 max-w-site m-auto"},[e("div",{staticClass:"page-content"},[e("Content")],1)]),this._v(" "),e("div",[e("Content",{attrs:{"slot-key":"footer-raw-content"}})],1)],1)}),[],!1,null,null,null).exports;r.a.use(a.a);var g={components:{Home:l,Page:u.a,WarehousePage:h,OffersPage:p,Navbar:o.Navbar,Sidebar:o.Sidebar,Footer:o.Footer,SupportUs:o.SupportUs},data:function(){return{isSidebarOpen:!1}},computed:{navLinks:function(){return Object(o.getUserNavLinks)(this)},repoUrl:function(){var t=this.$site.themeConfig.repo;return/^https?:/.test(t)?t:"https://github.com/".concat(t)},siteTitle:function(){return this.$site.themeConfig.shortTitle||this.$siteTitle},htmlTitle:function(){return this.$site.themeConfig.htmlTitle||this.$siteTitle},logoSrc:function(){return this.$site.themeConfig.logo&&this.$withBase(this.$site.themeConfig.logo)},shouldShowSupportUs:function(){return!1!==this.$page.frontmatter.supportUs&&!this.isLandingPage},isLandingPage:function(){return"Home"===this.$page.frontmatter.layout},isCustomLayout:function(){return this.$page.frontmatter.layout&&!this.isLandingPage},shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return this.isSidebarOpen||!1!==t.sidebar&&this.sidebarItems.length},shouldShowPageSidebar:function(){return!1!==this.$page.frontmatter.pageSidebar},sidebarItems:function(){return Object(o.resolveSidebarItems)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},footer:function(){return this.$themeLocaleConfig.footer||this.$site.themeConfig.footer||{}},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar,"with-sidebar":this.shouldShowSidebar},t]},algolia:function(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}}},mounted:function(){var t=this;this.$router.afterEach((function(){t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,s=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(s)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},f=(s(744),Object(i.a)(g,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"init",class:{"full-page":!t.shouldShowPageSidebar}},[s("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?s("Navbar",{attrs:{"site-title":t.siteTitle,"html-title":t.htmlTitle,"logo-src":t.logoSrc,href:t.$localePath,"repo-url":t.repoUrl,"social-urls":t.$site.themeConfig,items:t.navLinks,algolia:t.algolia},scopedSlots:t._u([{key:"sidebar-before",fn:function(){return[s("div",{staticClass:"flex cursor-pointer text-xl mr-4",on:{click:t.toggleSidebar}},[s("i",{staticClass:"bx bx-menu"})])]},proxy:!0}],null,!1,1102263417)}):t._e(),t._v(" "),s("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),s("main",{staticClass:"main-content relative z-2 pt-16"},[t.isCustomLayout?s("div",{staticClass:"custom-layout"},[s(t.$page.frontmatter.layout,{tag:"component"})],1):t.isLandingPage?s("Home"):s("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1),t._v(" "),t.shouldShowSidebar?s("Sidebar",{class:{"-translate-x-100 md:shadow-sidebar md:translate-x-0":!t.isSidebarOpen,"translate-0 shadow-sidebar":t.isSidebarOpen},attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}):t._e(),t._v(" "),s("Footer",{attrs:{"repo-url":t.repoUrl,author:t.$site.themeConfig.author,"license-type":t.$site.themeConfig.licenseType,"copyright-dates":t.$site.themeConfig.copyrightDates,sections:t.footer.sections,"social-urls":t.$site.themeConfig},scopedSlots:t._u([{key:"top",fn:function(){return[t.shouldShowSupportUs?s("SupportUs",{attrs:{brand:t.$site.themeConfig.shortTitle,"sponsor-url":t.$site.themeConfig.sponsorUrl,"license-type":t.$site.themeConfig.licenseType}}):t._e(),t._v(" "),t._t("footer-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("footer-bottom")]},proxy:!0}],null,!0)})],1)])}),[],!1,null,null,null));e.default=f.exports}}]); \ No newline at end of file diff --git a/assets/js/30.3485fd17.js b/assets/js/30.3485fd17.js new file mode 100644 index 00000000000..5394b6f1099 --- /dev/null +++ b/assets/js/30.3485fd17.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{775:function(s,t,a){"use strict";a.r(t);var n=a(1),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"model"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#model"}},[s._v("#")]),s._v(" Model")]),s._v(" "),a("p",[s._v("The classes can be used as a model in your application. Ts.ED uses these models to convert JSON objects to their class\nequivalents.")]),s._v(" "),a("p",[s._v("The classes models can be used in the following cases:")]),s._v(" "),a("ul",[a("li",[s._v("Data serialization and deserialization with the ("),a("RouterLink",{attrs:{to:"/docs/json-mapper.html"}},[s._v("Json mapper")]),s._v("),")],1),s._v(" "),a("li",[s._v("Data validation with "),a("RouterLink",{attrs:{to:"/tutorials/ajv.html"}},[s._v("AJV")]),s._v(" or any library compatible with "),a("a",{attrs:{href:"https://json-schema.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("JsonSchema"),a("OutboundLink")],1),s._v(",")],1),s._v(" "),a("li",[s._v("Generating documentation with "),a("RouterLink",{attrs:{to:"/tutorials/swagger.html"}},[s._v("Swagger")]),s._v(".")],1)]),s._v(" "),a("p",[s._v("To create a model, Ts.ED provides decorators which will store and generate a\nstandard "),a("a",{attrs:{href:"http://json-schema.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("JsonSchema"),a("OutboundLink")],1),s._v(" model.")]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Validation is only available when you import "),a("code",[s._v("@tsed/ajv")]),s._v(" package in your server.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("Without this package, decorators like "),a("ApiSymbolName",[s._v("Email")]),s._v(" won't have any effect.")],1)]),s._v(" "),a("h2",{attrs:{id:"example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[s._v("#")]),s._v(" Example")]),s._v(" "),a("p",[s._v("The example below uses decorators to describe a property of the class and store metadata such as the description of the\nfield.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Maximum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MaxLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Pattern"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" Categories "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CAT1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cat1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CAT2")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cat2"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n unique"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("50")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n indexed"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Maximum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n rate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Number "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Categories"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// or @Enum("type1", "type2")')]),s._v("\n category"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Categories"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Pattern")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token regex"}},[a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[s._v("[a-z]")]),a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[s._v("/")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n pattern"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Format")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date-time"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("now"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n dateCreation"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("The Model will generate a JsonSchema which can be used by modules supporting JsonSchema spec")])]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("The schema generated by Ts.ED lists only properties decorated by at least one decorator. In the previous\nexample, the "),a("code",[s._v("_id")]),s._v(" won't be displayed in the JsonSchema. It's very important to understand that "),a("strong",[s._v("TypeScript")]),s._v(" only\ngenerates metadata on properties with at least one of these decorators:")]),s._v(" "),a("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('schema') && status.includes('input')"}})],1),s._v(" "),a("p",[s._v("Our model is now described, we can use it inside a "),a("ApiSymbolName",[s._v("Controller")]),s._v(" as input type parameter for our methods. Ts.ED will\nuse the model to convert the raw data to an instance of your model.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonsCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" model"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("model "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("instanceof")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will be serialized according to your annotation on PersonModel class.")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// OR")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"person"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" model"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("model "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("instanceof")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will be serialized according to your annotation on PersonModel class.")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("h2",{attrs:{id:"primitives"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#primitives"}},[s._v("#")]),s._v(" Primitives")]),s._v(" "),a("p",[s._v("Just use at least "),a("ApiSymbolName",[s._v("Property")]),s._v(" decorator any other "),a("code",[s._v("schema")]),s._v(" decorator (like "),a("ApiSymbolName",[s._v("Email")]),s._v("), to create a new property on a\nmodel. Ts.ED will get the type from Typescript metadata and transform this type to a valid Json type.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Maximum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Won't be displayed on the Json schema")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Displayed with the right type")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Maximum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop2"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"maximum"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minimum"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"integer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#integer"}},[s._v("#")]),s._v(" Integer")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("Integer")]),s._v(" decorator is used to set integer type for integral numbers.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"integer"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"any-types"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#any-types"}},[s._v("#")]),s._v(" Any types")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("Any")]),s._v(", decorator is used to set one or more types on property. Use this method when you want to set explicitly the\njson type or when you use a mixed TypeScript types.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Any"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Any")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Any")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"boolean"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// mixed type")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Any")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop3"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"integer"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"boolean"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"null"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop2"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"boolean"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop3"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"null"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"nullable"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#nullable"}},[s._v("#")]),s._v(" Nullable")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("Nullable")]),s._v(" decorator is used allow a null value on a field while preserving the original Typescript type.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Nullable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MyModel2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./MyModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// allow null")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Nullable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// can be used with models (JsonSchema and OS3 only)")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Nullable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MyModel2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop3"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" MyModel2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop2"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"null"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"any"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#any"}},[s._v("#")]),s._v(" Any")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("Any")]),s._v(" decorator is used to allow any types:")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Any"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Any")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"integer"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"boolean"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"null"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"OS3"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"nullable"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"oneOf"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"integer"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"boolean"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"regular-expressions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#regular-expressions"}},[s._v("#")]),s._v(" Regular expressions")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("Pattern")]),s._v(" decorator is used to restrict a string to a particular regular expression. The regular expression syntax\nis the one defined in JavaScript ("),a("a",{attrs:{href:"https://www.ecma-international.org/publications/standards/Ecma-262.htm",target:"_blank",rel:"noopener noreferrer"}},[s._v("ECMA 262"),a("OutboundLink")],1),s._v("\nspecifically).\nSee "),a("a",{attrs:{href:"https://json-schema.org/understanding-json-schema/reference/regular_expressions.html#regular-expressions",target:"_blank",rel:"noopener noreferrer"}},[s._v("Regular Expressions"),a("OutboundLink")],1),s._v("\nfor more information.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Pattern"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Pattern")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token regex"}},[a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[s._v("^(\\\\([0-9]{3}\\\\))?[0-9]{3}-[0-9]{4}$")]),a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[s._v("/")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n phone"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"phone"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"pattern"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^(\\\\([0-9]{3}\\\\))?[0-9]{3}-[0-9]{4}$"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"format"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#format"}},[s._v("#")]),s._v(" Format")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("Format")]),s._v(" decorator allows basic semantic validation on certain kinds of string values that are commonly used. This\nallows values to be constrained beyond what the other tools in JSON Schema,\nincluding "),a("a",{attrs:{href:"https://json-schema.org/understanding-json-schema/reference/regular_expressions.html#regular-expressions",target:"_blank",rel:"noopener noreferrer"}},[s._v("Regular Expressions"),a("OutboundLink")],1),s._v("\ncan do.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Email")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Format")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date-time"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n dateCreation"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"format"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"dateCreation"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"format"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date-time"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])])])],1),s._v(" "),a("p",[s._v("The following formats are supported for string validation with "),a("code",[s._v("format")]),s._v(" keyword by "),a("a",{attrs:{href:"https://ajv.js.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("AJV"),a("OutboundLink")],1),s._v(":")]),s._v(" "),a("ul",[a("li",[a("strong",[s._v("date")]),s._v(": full-date according to "),a("a",{attrs:{href:"https://json-schema.org/latest/json-schema-validation.html#RFC3339",target:"_blank",rel:"noopener noreferrer"}},[s._v("RFC3339"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("li",[a("strong",[s._v("time")]),s._v(": time with optional time-zone.")]),s._v(" "),a("li",[a("strong",[s._v("date-time")]),s._v(": date-time from the same source (time-zone is mandatory).")]),s._v(" "),a("li",[a("strong",[s._v("uri")]),s._v(": full uri with optional protocol.")]),s._v(" "),a("li",[a("strong",[s._v("email")]),s._v(": email address.")]),s._v(" "),a("li",[a("strong",[s._v("hostname")]),s._v(": host name according to "),a("a",{attrs:{href:"https://tools.ietf.org/html/rfc1034#section-3.1",target:"_blank",rel:"noopener noreferrer"}},[s._v("RFC1034"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("li",[a("strong",[s._v("ipv4")]),s._v(": IP address v4.")]),s._v(" "),a("li",[a("strong",[s._v("ipv6")]),s._v(": IP address v6.")]),s._v(" "),a("li",[a("strong",[s._v("regex")]),s._v(": tests whether a string is a valid regular expression by passing it to RegExp constructor.")])]),s._v(" "),a("p",[s._v("See built-in formats types\non "),a("a",{attrs:{href:"https://json-schema.org/understanding-json-schema/reference/string.html#built-in-formats",target:"_blank",rel:"noopener noreferrer"}},[s._v("Jsonp-schema.org"),a("OutboundLink")],1),s._v(" for more\ndetails:")]),s._v(" "),a("h2",{attrs:{id:"multipleof"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#multipleof"}},[s._v("#")]),s._v(" MultipleOf")]),s._v(" "),a("p",[s._v("Numbers can be restricted to a multiple of a given number, using the "),a("ApiSymbolName",[s._v("MultipleOf")]),s._v(" decorator. It may be set to any\npositive number.\nSee "),a("a",{attrs:{href:"https://json-schema.org/understanding-json-schema/reference/numeric.html#multiples",target:"_blank",rel:"noopener noreferrer"}},[s._v("json-schema documentation"),a("OutboundLink")],1),s._v(" for\nmore details.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MultipleOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MultipleOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"multipleOf"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"ranges"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ranges"}},[s._v("#")]),s._v(" Ranges")]),s._v(" "),a("p",[s._v("Ranges of numbers are specified using a combination of the "),a("ApiSymbolName",[s._v("Minimum")]),s._v(" and "),a("ApiSymbolName",[s._v("Maximum")]),s._v(" decorators, (or\n"),a("ApiSymbolName",[s._v("ExclusiveMinimum")]),s._v(" and "),a("ApiSymbolName",[s._v("ExclusiveMaximum")]),s._v(" for expressing exclusive range).\nSee "),a("a",{attrs:{href:"https://json-schema.org/understanding-json-schema/reference/numeric.html#multiples",target:"_blank",rel:"noopener noreferrer"}},[s._v("json-schema documentation"),a("OutboundLink")],1),s._v(" for\nmore details.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ExclusiveMaximum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ExclusiveMaximum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"exclusiveMaximum"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minimum"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"enumerated-values"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#enumerated-values"}},[s._v("#")]),s._v(" Enumerated values")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("Enum")]),s._v(" decorator is used to restrict a value to a fixed set of values. It must be an array with at least one\nelement, where each element is unique or a TypeScript enum.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Any"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" Colors "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("RED")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"red"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("AMBER")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"amber"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("GREEN")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"green"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" Days "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("MONDAY")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("TUESDAY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("WEDNESDAY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("THURSDAY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("FRIDAY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("SATURDAY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("SUNDAY")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"red"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"amber"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"green"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Colors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Colors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Days"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop3"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Days"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"red"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"amber"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"green"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("42")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Any")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"null"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// in v6 not required")]),s._v("\n prop4"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"enum"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"red"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"amber"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"green"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop2"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"enum"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"red"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"amber"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"green"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop3"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"enum"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop4"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"enum"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"red"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"amber"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"green"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("42")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])])])],1),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Enum")]),s._v(" decorator can be also in combination with "),a("ApiSymbolName",[s._v("BodyParams")]),s._v(" or @QueryParams@@:")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyEnum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyEnum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("h3",{attrs:{id:"set-label-to-an-enum"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-label-to-an-enum"}},[s._v("#")]),s._v(" Set label to an enum "),a("Badge",{attrs:{text:"7.17.0+"}})],1),s._v(" "),a("p",[s._v("With OpenSpec 3 it's now possible to create shared enum for many models in "),a("code",[s._v("components.schemas")]),s._v(" instead of having its inlined values in\neach model.")]),s._v(" "),a("p",[s._v("Ts.ED introduce a new function "),a("code",[s._v("enums()")]),s._v(" to declare the enum schema as follows:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("enums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" ProductTypes "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("ALL")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ALL"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("ASSETS")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ASSETS"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("FOOD")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"FOOD"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("enums")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProductTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("label")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ProductTypes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// in models")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProductTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ProductTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// in controller")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/products"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ProductsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:type"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProductTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ProductTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br")])]),a("h2",{attrs:{id:"constant-values"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#constant-values"}},[s._v("#")]),s._v(" Constant values")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("Const")]),s._v(" decorator is used to restrict a value to a single value. For example, if you only support shipping to the\nUnited States for export reasons:")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Const"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Const")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"United States of America"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" country"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"United States of America"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"country"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"const"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"United States of America"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"collections"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#collections"}},[s._v("#")]),s._v(" Collections")]),s._v(" "),a("p",[s._v("Declaring a property that uses a collection is a bit different than declaring a simple property. TypeScript stores only\nthe "),a("code",[s._v("Array")]),s._v("/"),a("code",[s._v("Set")]),s._v("/"),a("code",[s._v("Map")]),s._v(" type when you declare the type of your property. The type used by the collection is lost.")]),s._v(" "),a("p",[s._v("To tell Ts.ED (and other third party which uses JsonSchema) that a property uses a collection with a specific type, you\nmust use "),a("ApiSymbolName",[s._v("CollectionOf")]),s._v(" (before v5.62.0, use "),a("ApiSymbolName",[s._v("PropertyType")]),s._v(") decorator as following:")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./primitives"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Role"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Security"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Security"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n roles"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Security"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n securities"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Map"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Security"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n scopes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Set"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"roles"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"items"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/definitions/Role"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"securities"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"additionalProperties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/definitions/Security"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scopes"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"items:"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Security"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Role"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br")])])])],1),s._v(" "),a("p",[s._v("Ts.ED provides others related collection decorators:")]),s._v(" "),a("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('schema') && status.includes('collections')"}}),s._v(" "),a("h2",{attrs:{id:"required-properties"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#required-properties"}},[s._v("#")]),s._v(" Required properties")]),s._v(" "),a("p",[s._v("By default, the properties defined with a decorator are not "),a("code",[s._v("required")]),s._v(". However, one can use "),a("ApiSymbolName",[s._v("Required")]),s._v(" decorator to\nadd a required property to the json schema:")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("p",[s._v("You can also add a custom ajv error message with the "),a("code",[s._v(".Error(msg)")]),s._v(" function:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"custom message"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("h2",{attrs:{id:"custom-ajv-error-messages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-ajv-error-messages"}},[s._v("#")]),s._v(" Custom AJV error messages")]),s._v(" "),a("p",[s._v("If you don't like AJV's default error messages, you can customize them with these decorators:")]),s._v(" "),a("h3",{attrs:{id:"defaultmsg"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#defaultmsg"}},[s._v("#")]),s._v(" DefaultMsg")]),s._v(" "),a("p",[s._v("This is a class decorator "),a("ApiSymbolName",[s._v("DefaultMsg")]),s._v(" that is used to define a default message as the name suggests:")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DefaultMsg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("DefaultMsg")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"an error occured"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("h3",{attrs:{id:"typeerror"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#typeerror"}},[s._v("#")]),s._v(" TypeError")]),s._v(" "),a("p",[s._v("This is a property decorator "),a("ApiSymbolName",[s._v("TypeError")]),s._v(" that is used to define a custom error message for a specific type:")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TypeError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("TypeError")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop1 should be a string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("h3",{attrs:{id:"errormsg"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#errormsg"}},[s._v("#")]),s._v(" ErrorMsg")]),s._v(" "),a("p",[s._v("If none of the above work for you, you can use the "),a("ApiSymbolName",[s._v("ErrorMsg")]),s._v(" decorator to define your own custom error message schema using the "),a("a",{attrs:{href:"https://ajv.js.org/packages/ajv-errors.html#ajv-errors",target:"_blank",rel:"noopener noreferrer"}},[s._v("ajv-errors documentation"),a("OutboundLink")],1),s._v(":")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ErrorMsg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ErrorMsg")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop1 should be a string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("h2",{attrs:{id:"additional-properties"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#additional-properties"}},[s._v("#")]),s._v(" Additional properties")]),s._v(" "),a("p",[s._v("Sometimes, it can be useful to create model with additional properties. By default, Json schema is strict over extra\nproperties not declared in a model (\nsee "),a("a",{attrs:{href:"https://json-schema.org/understanding-json-schema/reference/object.html#properties",target:"_blank",rel:"noopener noreferrer"}},[s._v("Properties json schema documentation"),a("OutboundLink")],1),s._v(").")]),s._v(" "),a("p",[s._v("Use "),a("ApiSymbolName",[s._v("AdditionalProperties")]),s._v(" on your model to allow this behavior:")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AdditionalProperties"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("AdditionalProperties")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"additionalProperties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])])])],1),s._v(" "),a("p",[s._v("It is also possible to add contraint on additional properties, by giving a raw Json schema:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AdditionalProperties"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("AdditionalProperties")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"additionalProperties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])])])],1),s._v(" "),a("p",[s._v("Or by using "),a("ApiSymbolName",[s._v("getJsonSchema")]),s._v(" in combination with "),a("ApiSymbolName",[s._v("AdditionalProperty")]),s._v(" as following:")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AdditionalProperties"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AnotherModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("AdditionalProperties")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("AnotherModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" AnotherModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"additionalProperties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"circular-ref"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#circular-ref"}},[s._v("#")]),s._v(" Circular ref")]),s._v(" "),a("p",[s._v("Circular reference can be resolved by using arrow with a "),a("ApiSymbolName",[s._v("Property")]),s._v(" and "),a("ApiSymbolName",[s._v("CollectionOf")]),s._v(" decorators:")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Photo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n owner"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Photo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.roles"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n photos"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Photo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("h2",{attrs:{id:"custom-keys"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-keys"}},[s._v("#")]),s._v(" Custom Keys")]),s._v(" "),a("p",[s._v("Ts.ED introduces the "),a("ApiSymbolName",[s._v("Keyword")]),s._v(" decorator to declare a new custom validator for Ajv. Combined with the "),a("ApiSymbolName",[s._v("CustomKey")]),s._v("\ndecorator to add keywords to a property of your class, you can use more complex scenarios than what basic JsonSchema\nallows.")],1),s._v(" "),a("p",[s._v("For example, we can create a custom validator to support the "),a("code",[s._v("range")]),s._v(" validation over a number. To do that, we have to\ndefine the custom validator by using "),a("ApiSymbolName",[s._v("Keyword")]),s._v(" decorator:")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Keyword"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" KeywordMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("array"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Keyword")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n keyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n schemaType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"exclusiveRange"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n metaSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("minItems")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("additionalItems")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RangeKeyword")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("KeywordMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("min"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" max"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("exclusiveRange "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" min "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[s._v("max")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" min "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<=")]),s._v(" max"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("Then we can declare a model using the standard decorators from "),a("code",[s._v("@tsed/schema")]),s._v(":")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Product.ts"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CustomKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Range"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ExclusiveRange"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/Range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// custom decorator")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CustomKey")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CustomKey")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"exclusiveRange"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n price"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// OR")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Range")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ExclusiveRange")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n price2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Range.ts"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CustomKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Range")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("min"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" max"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CustomKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("min"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" max"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ExclusiveRange")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bool"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CustomKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"exclusiveRange"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" bool"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])])],1),s._v(" "),a("p",[s._v("Finally, we can create a unit test to verify if our example works properly:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../keywords/RangeKeyword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should call custom keyword validation (compile)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ajv "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Ajv"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("customKeys"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" validate "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n properties"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n price"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n exclusiveRange"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n range"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("price"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10.01")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("price"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("99.99")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("price"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("price"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br")])]),a("h2",{attrs:{id:"groups"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#groups"}},[s._v("#")]),s._v(" Groups")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Groups")]),s._v(" decorator allows you to manage your serialized/deserialized fields by using group label. For example, with a\nCRUD controller, you can have many methods like "),a("code",[s._v("POST")]),s._v(", "),a("code",[s._v("PUT")]),s._v(", "),a("code",[s._v("GET")]),s._v(" or "),a("code",[s._v("PATCH")]),s._v(" to manage "),a("code",[s._v("creation")]),s._v(", "),a("code",[s._v("update")]),s._v("\nand "),a("code",[s._v("read")]),s._v(" usecases for the exposed resource.")],1),s._v(" "),a("p",[s._v("For the creation, you don't need to have the "),a("code",[s._v("id")]),s._v(" field but for the update, you need to have it. With the previous\nversion for Ts.ED, you had to create the model twice, one for the "),a("code",[s._v("creation")]),s._v(" (without "),a("code",[s._v("id")]),s._v(") and another one for "),a("code",[s._v("update")]),s._v("\nand "),a("code",[s._v("read")]),s._v(" (with "),a("code",[s._v("id")]),s._v("). Managing many models can be a pain point for the developer, this is why the "),a("ApiSymbolName",[s._v("Groups")]),s._v(" decorator\nexists.")],1),s._v(" "),a("p",[s._v("For example, we have a User model with the following properties:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.roles"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n roles"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("p",[a("strong",[s._v("Explanation:")])]),s._v(" "),a("ul",[a("li",[a("code",[s._v("!creation")]),s._v(": This annotation indicates that the field will never be exposed when using the "),a("code",[s._v("creation")]),s._v(" group.")]),s._v(" "),a("li",[a("code",[s._v("group.email")]),s._v(": This annotation indicates that the field will be exposed only if the group match with "),a("code",[s._v("group.email")]),s._v(" or\nwith a glob pattern like "),a("code",[s._v("group.*")]),s._v(".")])]),s._v(" "),a("p",[s._v("So by using the "),a("ApiSymbolName",[s._v("deserialize")]),s._v(" function with the extra groups options, we can map data to the expected user instance:")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Creation"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" deserialize "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@tsed/json-mapper'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will be ignored because creation doesn't include `id` field")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email@tsed.io"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" groups"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// User {firstName, lastName, email, password}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"With group"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" deserialize "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@tsed/json-mapper'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email@tsed.io"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n roles"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" groups"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// User {id, firstName, lastName, email, password}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"With glob pattern"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" deserialize "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'@tsed/json-mapper'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email@tsed.io"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n roles"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" groups"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// User {id, firstName, lastName, email, password, roles}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("The same principle works with the "),a("ApiSymbolName",[s._v("serialize")]),s._v(" and "),a("ApiSymbolName",[s._v("getJsonSchema")]),s._v(" functions!")],1)]),s._v(" "),a("p",[s._v("Now let's see how groups work with controllers.")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"UsersCtrl.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// User {firstName, lastName, email, password}")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("uuid")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will return Object {id, firstName, lastName, email}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"User.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.roles"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n roles"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"OpenSpec"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"paths"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"/{id}"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"get"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"operationId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"usersCtrlGet"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"responses"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"200"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"content"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/components/schemas/UserGroup"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Success"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"parameters"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"in"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"UsersCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"post"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"operationId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"usersCtrlPost"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"responses"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"201"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"content"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/components/schemas/UserUser"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Created"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"parameters"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"requestBody"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"content"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/components/schemas/UserCreation"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"UsersCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"UsersCtrl"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"components"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schemas"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"UserGroup"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"roles"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"items"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"UserCreation"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br"),a("span",{staticClass:"line-number"},[s._v("73")]),a("br"),a("span",{staticClass:"line-number"},[s._v("74")]),a("br"),a("span",{staticClass:"line-number"},[s._v("75")]),a("br"),a("span",{staticClass:"line-number"},[s._v("76")]),a("br"),a("span",{staticClass:"line-number"},[s._v("77")]),a("br"),a("span",{staticClass:"line-number"},[s._v("78")]),a("br"),a("span",{staticClass:"line-number"},[s._v("79")]),a("br"),a("span",{staticClass:"line-number"},[s._v("80")]),a("br"),a("span",{staticClass:"line-number"},[s._v("81")]),a("br"),a("span",{staticClass:"line-number"},[s._v("82")]),a("br"),a("span",{staticClass:"line-number"},[s._v("83")]),a("br"),a("span",{staticClass:"line-number"},[s._v("84")]),a("br"),a("span",{staticClass:"line-number"},[s._v("85")]),a("br"),a("span",{staticClass:"line-number"},[s._v("86")]),a("br"),a("span",{staticClass:"line-number"},[s._v("87")]),a("br"),a("span",{staticClass:"line-number"},[s._v("88")]),a("br"),a("span",{staticClass:"line-number"},[s._v("89")]),a("br"),a("span",{staticClass:"line-number"},[s._v("90")]),a("br"),a("span",{staticClass:"line-number"},[s._v("91")]),a("br"),a("span",{staticClass:"line-number"},[s._v("92")]),a("br"),a("span",{staticClass:"line-number"},[s._v("93")]),a("br"),a("span",{staticClass:"line-number"},[s._v("94")]),a("br"),a("span",{staticClass:"line-number"},[s._v("95")]),a("br"),a("span",{staticClass:"line-number"},[s._v("96")]),a("br"),a("span",{staticClass:"line-number"},[s._v("97")]),a("br"),a("span",{staticClass:"line-number"},[s._v("98")]),a("br"),a("span",{staticClass:"line-number"},[s._v("99")]),a("br"),a("span",{staticClass:"line-number"},[s._v("100")]),a("br"),a("span",{staticClass:"line-number"},[s._v("101")]),a("br"),a("span",{staticClass:"line-number"},[s._v("102")]),a("br"),a("span",{staticClass:"line-number"},[s._v("103")]),a("br"),a("span",{staticClass:"line-number"},[s._v("104")]),a("br"),a("span",{staticClass:"line-number"},[s._v("105")]),a("br"),a("span",{staticClass:"line-number"},[s._v("106")]),a("br"),a("span",{staticClass:"line-number"},[s._v("107")]),a("br"),a("span",{staticClass:"line-number"},[s._v("108")]),a("br"),a("span",{staticClass:"line-number"},[s._v("109")]),a("br"),a("span",{staticClass:"line-number"},[s._v("110")]),a("br"),a("span",{staticClass:"line-number"},[s._v("111")]),a("br"),a("span",{staticClass:"line-number"},[s._v("112")]),a("br"),a("span",{staticClass:"line-number"},[s._v("113")]),a("br"),a("span",{staticClass:"line-number"},[s._v("114")]),a("br"),a("span",{staticClass:"line-number"},[s._v("115")]),a("br"),a("span",{staticClass:"line-number"},[s._v("116")]),a("br"),a("span",{staticClass:"line-number"},[s._v("117")]),a("br"),a("span",{staticClass:"line-number"},[s._v("118")]),a("br")])])])],1),s._v(" "),a("p",[s._v("We can see that the "),a("ApiSymbolName",[s._v("Groups")]),s._v(" decorator can be used on parameter level as well as on the method through the "),a("ApiSymbolName",[s._v("Returns")]),s._v("\ndecorator. The generated OpenSpec will create automatically the appropriate JsonSchema according to the "),a("code",[s._v("groups")]),s._v("\nconfiguration!")],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("You can combine different group labels or use a glob pattern to match multiple group labels. It's also possible\nto use negation by prefixing the group label with "),a("code",[s._v("!")]),s._v(".")])]),s._v(" "),a("h2",{attrs:{id:"groups-name"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#groups-name"}},[s._v("#")]),s._v(" Groups Name")]),s._v(" "),a("p",[s._v("By default, Groups decorator generate automatically a name for each model impacted by the given groups list.\nIf you use a typed client http generator based on Swagger (OAS3) to generate the client code, this behavior can be a constraint for your consumer when you change the group list.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"summary"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("In this example, the Groups annotation "),a("code",[s._v('@Groups("creation", "summary") user: User')]),s._v(" will generate a new model name "),a("code",[s._v("UserCreationSummary")]),s._v(".\nIf you change the groups list by this one:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v(' @Groups("creation", "summary", "extra") user: User\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("The new model name will be "),a("code",[s._v("UserCreationSummaryExtra")]),s._v(". This change will break the entire consumer code by removing the "),a("code",[s._v("UserCreationSummary")]),s._v(" type and giving a new "),a("code",[s._v("UserCreationSummaryExtra")]),s._v(" type.\nIn fact, "),a("code",[s._v("UserCreationSummary")]),s._v(" and "),a("code",[s._v("UserCreationSummaryExtra")]),s._v(" are the same model with more fields!")]),s._v(" "),a("p",[s._v("In order to minimize the impact of this kind of change Ts.ED allows to configure the postfix added to each model impacted by the groups.")]),s._v(" "),a("p",[s._v("Here is an example with a configured GroupsName:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Details"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Details"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"summary"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("Now, "),a("code",[s._v('@Groups("Creation", ["creation", "summary"]) user: User')]),s._v(" will generate a "),a("code",[s._v("UserCreation")]),s._v(" type and\n"),a("code",[s._v('@Returns(200, User).Groups("Details", ["group.*"])')]),s._v(" will generate a "),a("code",[s._v("UserDetails")]),s._v(" type.")]),s._v(" "),a("h2",{attrs:{id:"groups-class-definition"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#groups-class-definition"}},[s._v("#")]),s._v(" Groups class definition")]),s._v(" "),a("p",[s._v("It's also possible to define all groups on class instead of declaring it on each property.")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"UsersCtrl.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"update"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"update"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("uuid")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/change-password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("changePassword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"changePassword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"User.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" RequiredGroups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will generate UserCreate")]),s._v("\n create"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will generate UserUpdate")]),s._v("\n update"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will generate UserChangePassword")]),s._v("\n changePassword"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"newPassword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RequiredGroups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RequiredGroups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RequiredGroups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RequiredGroups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"create"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"changePassword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RequiredGroups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"changePassword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n newPassword"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Creation"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Update"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"ChangePassword"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"newPassword"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"newPassword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"forwardgroups"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#forwardgroups"}},[s._v("#")]),s._v(" ForwardGroups")]),s._v(" "),a("p",[s._v("Groups configuration isn't forwarded to the nested models to avoid side effect on model generation.\nWith "),a("ApiSymbolName",[s._v("ForwardGroups")]),s._v(" decorator, you are able to tell if a property should use or not the Groups configuration to generate correctly\na nested model.")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ChildModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.summary"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.extended"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop3"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ChildModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ForwardGroups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop4"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ChildModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])]),a("p",[s._v("Now "),a("code",[s._v("prop4")]),s._v(" will have a "),a("code",[s._v("ChildModel")]),s._v(" generated along to groups configuration.")]),s._v(" "),a("h2",{attrs:{id:"requiredgroups"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requiredgroups"}},[s._v("#")]),s._v(" RequiredGroups")]),s._v(" "),a("p",[s._v("As "),a("ApiSymbolName",[s._v("Groups")]),s._v(" decorator, "),a("ApiSymbolName",[s._v("RequiredGroups")]),s._v(" allow you to define when a field is "),a("code",[s._v("required")]),s._v(" depending on the given groups strategy.")],1),s._v(" "),a("p",[s._v("The usage is the same as Groups:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RequiredGroups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RequiredGroups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!patch"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RequiredGroups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"patch"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop3"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("h2",{attrs:{id:"allowedgroups"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#allowedgroups"}},[s._v("#")]),s._v(" AllowedGroups")]),s._v(" "),a("p",[s._v("This feature let your API consumer to define which field he wants to consume. The server will filter automatically fields based on the "),a("ApiSymbolName",[s._v("Groups")]),s._v("\nstrategy.")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"summary"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// not display by default")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"details"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// not display by default")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n sensitiveProp"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// not displayed because it's a sensitive props")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/controllers"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("AllowedGroups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"summary"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"details"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n prop1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n prop2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n sensitiveProp"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sensitiveProp"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br")])]),a("p",[s._v("The AllowedGroups is enabled while "),a("code",[s._v("includes")]),s._v(" query params is given in the request. Here the different scenario with this parameter:")]),s._v(" "),a("Tabs",[a("Tab",{attrs:{label:"Basic usage"}},[a("p",[s._v("Request:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("GET http://host/rest/controllers/1?includes=summary\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("The response will be:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop1"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Multiple includes"}},[a("p",[s._v("Request:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("GET http://host/rest/controllers/1?includes=summary&includes=details\n\nOR\n\nGET http://host/rest/controllers/1?includes=summary,details\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("Expected json:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop2"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop2"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Without includes"}},[a("p",[s._v("Request:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("GET http://host/rest/controllers/1\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Expected json:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop2"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop2"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Unexpected includes"}},[a("p",[s._v("If a given value isn't listed in the allowed groups, the value will be ignored!")]),s._v(" "),a("p",[s._v("Request:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("GET http://host/rest/controllers/1?includes=admin\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Expected json:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop2"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"prop2"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"partial"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#partial"}},[s._v("#")]),s._v(" Partial")]),s._v(" "),a("p",[s._v("Partial allow you to create a Partial model on an endpoint:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Patch"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Partial"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./bodyParams"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Patch")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"group.*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("patch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Partial")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payload"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("h2",{attrs:{id:"advanced-validation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#advanced-validation"}},[s._v("#")]),s._v(" Advanced validation")]),s._v(" "),a("h3",{attrs:{id:"beforedeserialize"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#beforedeserialize"}},[s._v("#")]),s._v(" BeforeDeserialize")]),s._v(" "),a("p",[s._v("If you want to validate or manipulate data before the model has been deserialized you can use the "),a("ApiSymbolName",[s._v("BeforeDeserialize")]),s._v(" decorator.")],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("Don't forget to return the data in your callback function otherwise an error will occur.")])]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BeforeDeserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BadRequest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" AnimalType "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("DOG")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"DOG"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CAT")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CAT"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BeforeDeserialize")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Record"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!==")]),s._v(" AnimalType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("DOG")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BadRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Sorry, we\'re only responsible for dogs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("Our dog ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Animal")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("AnimalType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" AnimalType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("h3",{attrs:{id:"afterdeserialize"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#afterdeserialize"}},[s._v("#")]),s._v(" AfterDeserialize")]),s._v(" "),a("p",[s._v("If you want to validate or manipulate data after the model has been deserialized you can use the "),a("ApiSymbolName",[s._v("AfterDeserialize")]),s._v(" decorator.")],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("Don't forget to return the data in your callback function otherwise an error will occur.")])]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AfterDeserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BadRequest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" AnimalType "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("DOG")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"DOG"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CAT")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CAT"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("AfterDeserialize")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Animal"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!==")]),s._v(" AnimalType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CAT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BadRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Sorry, we\'re only responsible for cats"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("Our cat ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Animal")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("AnimalType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" AnimalType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("h3",{attrs:{id:"custom-validation-decorator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-validation-decorator"}},[s._v("#")]),s._v(" Custom validation decorator")]),s._v(" "),a("p",[s._v("Validation can quickly become complex and therefore confusing. In this case you can use your own validation decorator.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BeforeDeserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonEntityFn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BadRequest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Company")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RequiredIf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tsed"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!==")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n location"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RequiredIf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("cb"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PropertyDecorator "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("JsonEntityFn")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("store"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("target"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" propertyKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BeforeDeserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cb")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("propertyKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BadRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("propertyKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v(" is required")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("target"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("h2",{attrs:{id:"discriminator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#discriminator"}},[s._v("#")]),s._v(" Discriminator "),a("Badge",{attrs:{text:"v7.8.0+"}})],1),s._v(" "),a("p",[s._v("The discriminator feature allows polymorphism with JsonSchema and OpenAPI.\nAlthough "),a("ApiSymbolName",[s._v("OneOf")]),s._v(" already allows polymorphism in terms of validation, the latter doesn't allow the "),a("code",[s._v("@tsed/json-mapper")]),s._v(" to render the correct class type during the deserialization (plain object to class).")],1),s._v(" "),a("p",[s._v("By declaring a discriminatorKey, "),a("code",[s._v("@tsed/json-mapper")]),s._v(" will be able to determine the correct class which should be used.")]),s._v(" "),a("p",[s._v("Here is an example:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Discriminator"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" DiscriminatorKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" DiscriminatorValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OneOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Event")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("DiscriminatorKey")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// declare this property as discriminator key")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("DiscriminatorValue")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"page_view"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// or @DiscriminatorValue() value can be inferred by the class name (ex: "page_view")')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PageView")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Event")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n url"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("DiscriminatorValue")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"action"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"click_action"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Action")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Event")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n event"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Tracking")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OneOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Action"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PageView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Action "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" PageView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br")])]),a("p",[s._v("And now we can use "),a("code",[s._v("deserialize")]),s._v(" to map plain object to a class:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("deserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Tracking"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Tracking"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" list "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"page_view"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n url"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"https://url"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"action"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n event"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"event"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"click_action"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n event"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"event"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Tracking\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PageView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Action"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Action"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("CustomAction"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Shortcut")]),s._v(" "),a("p",[s._v("Declaring each time the list of children class using "),a("ApiSymbolName",[s._v("OneOf")]),s._v(" decorator can be a pain point, so Ts.ED provide a way to simplify your code:")],1),s._v(" "),a("p",[s._v("Instead of declaring all classes:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Tracking")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OneOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Action"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PageView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Action "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" PageView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("p",[s._v("Give the parent class to "),a("code",[s._v("OneOf")]),s._v(" decorator:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("type")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EventsType")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Action "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" PageView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Tracking")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OneOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" EventsType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])]),a("p",[s._v("Ts.ED will automatically infer the children classes!")])]),s._v(" "),a("p",[s._v("Discriminator model can be used also on controller:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Test")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Put")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OneOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("put")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('":id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OneOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" event"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" EventsType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("h2",{attrs:{id:"generics"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#generics"}},[s._v("#")]),s._v(" Generics")]),s._v(" "),a("h3",{attrs:{id:"declaring-a-generic-model"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#declaring-a-generic-model"}},[s._v("#")]),s._v(" Declaring a generic model")]),s._v(" "),a("p",[s._v("Sometimes, it might be useful to use generic models. TypeScript doesn't store the generic type in the metadata. This is\nwhy we need to declare explicitly the generic models with the decorators.")]),s._v(" "),a("p",[s._v("One of the generic's usage can be a paginated list. With Returns decorator, it's now possible to declare generic type\nand generate the appropriate OpenSpec documentation.")]),s._v(" "),a("p",[s._v("Starting with the pagination model, by using "),a("ApiSymbolName",[s._v("Generics")]),s._v(" and "),a("ApiSymbolName",[s._v("CollectionOf")]),s._v(":")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n totalCount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("p",[s._v("Now, we need a model to be used with the generic Pagination model:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("p",[s._v("Finally, we can use our models on a method as following:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"MyController.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Pagination"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"OpenSpec 2"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Product"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Submission"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"_id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"data"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/definitions/Product"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"paths"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"post"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"operationId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"myControllerMethod"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"parameters"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"in"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"body"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"body"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/definitions/Submission"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"responses"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"200"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Success"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"OpenSpec 3"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"components"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schemas"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Product"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Submission"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"_id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"data"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/components/schemas/Product"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"paths"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"post"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"operationId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"myControllerMethod"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"parameters"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"requestBody"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"content"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/components/schemas/Submission"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"responses"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"200"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Success"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"declaring-nested-generic-models"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#declaring-nested-generic-models"}},[s._v("#")]),s._v(" Declaring nested generic models")]),s._v(" "),a("p",[s._v("It's also possible to declare nested generic models in order to have this type "),a("code",[s._v("Pagination>")]),s._v(":")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"MyController.ts"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Submission"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Nested")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Submission"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Submission.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Submission"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Pagination.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n totalCount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Product.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"OpenSpec 2"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Product"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"paths"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"post"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"operationId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"myControllerMethod"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"parameters"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"produces"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"responses"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"200"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"data"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"items"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"_id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"data"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/definitions/Product"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"totalCount"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"OpenSpec 3"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"components"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schemas"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Product"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"paths"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"post"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"operationId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"myControllerMethod"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"parameters"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"responses"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"200"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"content"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"data"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"items"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"_id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"data"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/components/schemas/Product"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"totalCount"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"number"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"generics-with-types"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#generics-with-types"}},[s._v("#")]),s._v(" Generics with Types")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"String"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("GenericOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Adjustment")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("GenericOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n adjustment"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Adjustment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/* OUTPUT:\n{\n "properties": {\n "adjustment": {\n "properties": {\n "value": {\n "type": "string"\n }\n },\n "type": "object"\n }\n },\n "type": "object"\n}\n*/')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Date"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("GenericOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Adjustment")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("GenericOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n adjustment"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Adjustment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/* OUTPUT:\n{\n "properties": {\n "adjustment": {\n "properties": {\n "value": {\n "format": "date-time",\n "type": "string"\n }\n },\n "type": "object"\n }\n },\n "type": "object"\n}\n*/')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Date"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("GenericOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" AdjustmentType "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("PRICE")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"price"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("DELAY")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"delay"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Adjustment")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("GenericOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("AdjustmentType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n adjustment"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("AdjustmentType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Adjustment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/* OUTPUT:\n{\n "properties": {\n "adjustment": {\n "properties": {\n "value": {\n "enum": [\n "price"\n "delay"\n ],\n "type": "string"\n }\n },\n "type": "object"\n }\n },\n "type": "object"\n}\n*/')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"generics-with-functional-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#generics-with-functional-api"}},[s._v("#")]),s._v(" Generics with Functional API")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"String"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("GenericOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Adjustment")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("GenericOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("pattern")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token regex"}},[a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[s._v("[a-z]")]),a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[s._v("/")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n adjustment"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Adjustment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/* OUTPUT:\n{\n "properties": {\n "adjustment": {\n "properties": {\n "value": {\n "type": "string",\n "pattern": "[a-z]"\n }\n },\n "type": "object"\n }\n },\n "type": "object"\n}\n*/')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Date"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" GenericOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Adjustment")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("GenericOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("format")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date-time"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n adjustment"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Adjustment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/* OUTPUT:\n{\n "properties": {\n "adjustment": {\n "properties": {\n "value": {\n "type": "string",\n "format": "date-time"\n }\n },\n "type": "object"\n }\n },\n "type": "object"\n}\n*/')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"pagination"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pagination"}},[s._v("#")]),s._v(" Pagination")]),s._v(" "),a("p",[s._v("The following advanced example will show you how you can combine the different Ts.ED features to describe Pagination.\nThe used features are the following:")]),s._v(" "),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/docs/model.html#generics"}},[s._v("Generics")])],1),s._v(" "),a("li",[a("RouterLink",{attrs:{to:"/docs/model.html#using-functions"}},[s._v("Function programming to declare models")])],1),s._v(" "),a("li",[a("ApiSymbolName",[s._v("For")]),s._v(" decorator to declare a custom model for JsonSchema, OS2 or OS3.")],1),s._v(" "),a("li",[a("RouterLink",{attrs:{to:"/docs/response-filter.html"}},[s._v("Response Filter")]),s._v(" to manage paginated response.")],1)]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"ProductsCtrl.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Pageable"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Pagination"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/pageable"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ProductsCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("206")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PaginatedProduct"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PaginatedProduct"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" pageableOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"all"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" all"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"100"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CANON D3000"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n totalCount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" all "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// just for test,")]),s._v("\n pageable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" pageableOptions\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Pageable.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("isString"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OnDeserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("array"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" For"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Min"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" oneOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" SpecTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Pageable")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Min")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Page number."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n page"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Min")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Number of objects per page."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n size"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("For")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("SpecTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("oneOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxItems")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("For")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("SpecTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("OPENAPI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxItems")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OnDeserialize")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("split")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('","')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Sorting criteria: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n sort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Pageable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("page "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("page "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("size "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("size "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("size"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sort "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sort "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sort"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("get")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("offset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("page "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("page "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("limit "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("get")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("limit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("size"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Pagination.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Pageable"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Pageable")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n totalCount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" totalCount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("pageable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n totalCount "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("totalCount "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" totalCount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Product.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n title "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("title "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"PaginationFilter.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ResponseFilter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ResponseFilterMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-response-filter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Pagination"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ResponseFilter")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PaginationFilter")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ResponseFilterMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("instanceof")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Pagination")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// get the unserialized data")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("isPaginated"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("206")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"ProductsCtrl.spec.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n title "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("title "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"deep-object-on-query"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#deep-object-on-query"}},[s._v("#")]),s._v(" Deep object on query")]),s._v(" "),a("p",[s._v("With OpenAPI 3, it's possible to describe and use a "),a("a",{attrs:{href:"https://swagger.io/docs/specification/serialization/#query",target:"_blank",rel:"noopener noreferrer"}},[s._v("deepObject"),a("OutboundLink")],1),s._v(" "),a("code",[s._v("style")]),s._v(" as Query params.\nIt means, a consumer can call your endpoint with the following url:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("/users?id[role]=admin&id[firstName]=Alex\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Ts.ED will determine automatically the appropriate "),a("code",[s._v("style")]),s._v(" parameter based on the given "),a("code",[s._v("User")]),s._v(" model.\nHere is an example with a DeepQueryObject model:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DeepQueryObject")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n condition"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Path")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TestDeepObjectCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OperationPath")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"GET"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"s"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" q"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" DeepQueryObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("p",[s._v("The url to be called will be:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("/test?s[path]=title&s[condition]=eq&s[value]=tsed\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("And the generated swagger will be:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"components"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schemas"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"DeepQueryObject"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"condition"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"path"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"value"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"paths"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"/test"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"get"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"operationId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"testDeepObjectCtrlGet"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"parameters"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"in"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"query"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"s"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"style"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deepObject"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/components/schemas/DeepQueryObject"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("Ts.ED support also Generics Deep object style!")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("FindQuery")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n tableColumnNameA"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n tableColumnNameB"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PaginationQuery"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n offset"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Maximum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("50")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n limit"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n where"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Path")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TestDeepObjectCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OperationPath")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"GET"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("GenericOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("FindQuery"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" q"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PaginationQuery"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("FindQuery"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])])]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("This feature is only available for OpenAPI 3.")])]),s._v(" "),a("h2",{attrs:{id:"annotations"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#annotations"}},[s._v("#")]),s._v(" Annotations")]),s._v(" "),a("p",[s._v("JSON Schema includes a few keywords and Ts.ED provide also theses corresponding decorators like "),a("ApiSymbolName",[s._v("Title")]),s._v(",\n"),a("ApiSymbolName",[s._v("Description")]),s._v(", "),a("ApiSymbolName",[s._v("Default")]),s._v(", "),a("ApiSymbolName",[s._v("Example")]),s._v(" that aren’t strictly used for validation, but are used to describe parts of a\nschema.")],1),s._v(" "),a("p",[s._v("None of these "),a("code",[s._v("annotation")]),s._v(" keywords are required, but they are encouraged for good practice, and can make your\nschema "),a("code",[s._v("self-documenting")]),s._v(".")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Title")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Example")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"example"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prop"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"examples"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"example"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"alias"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#alias"}},[s._v("#")]),s._v(" Alias")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Name")]),s._v(" decorator lets you rename the exposed property in your json schema.")],1),s._v(" "),a("p",[s._v("For example mongo db uses the "),a("code",[s._v("_id")]),s._v(" property. In order not to give any indication to our consumer about the nature of\nthe database, it's better to rename the property to "),a("code",[s._v("id")]),s._v(".")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Name")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Object ID"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Example")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5ce7ad3028890bd71749d477"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// same example with mongoose")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model2")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("h2",{attrs:{id:"set-schema"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-schema"}},[s._v("#")]),s._v(" Set Schema")]),s._v(" "),a("p",[s._v("If Ts.ED doesn't provide the expected decorator to describe your json schema, you can use the "),a("ApiSymbolName",[s._v("Schema")]),s._v(" decorator\nfrom "),a("code",[s._v("@tsed/common")]),s._v(" to set a custom schema.")],1),s._v(" "),a("h3",{attrs:{id:"using-jsonschemaobject"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-jsonschemaobject"}},[s._v("#")]),s._v(" Using JsonSchemaObject")]),s._v(" "),a("p",[s._v("You can declare schema by using the "),a("ApiSymbolName",[s._v("JsonSchemaObject")]),s._v(" interface:")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonSchemaObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ProductSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonSchemaObject "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n properties"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Schema")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n contains"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n prop"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Schema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProductSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Schema")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProductSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br")])]),a("h3",{attrs:{id:"using-functions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-functions"}},[s._v("#")]),s._v(" Using functions")]),s._v(" "),a("p",[s._v("It's also possible to write a valid JsonSchema by using the functional approach (Joi like):")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("array"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" ProductSchema "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("required")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Product ID"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("required")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("minLength")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("example")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CANON D300"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Product title"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n price"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("minimum")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("example")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Product price"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Product description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n tags"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("minItems")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("minLength")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("maxLength")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Product tag"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Product tags"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("label")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ProductModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Schema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProductSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Schema")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProductSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("p",[s._v("Here is the list of available functions:")]),s._v(" "),a("ApiList",{attrs:{query:"status.includes('schemaFunctional')"}}),s._v(" "),a("h2",{attrs:{id:"recordof"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#recordof"}},[s._v("#")]),s._v(" RecordOf")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("RecordOf")]),s._v(" decorator constructs a json schema object type which property keys are set by a given set of keys\nand which property values are of a given type.")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RecordOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("type")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("keys")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tech"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Department")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n employeeSize"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("type")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Departments")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Record"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("keys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Department"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Company")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RecordOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tech"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n departments"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Departments"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Department"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Departments"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tech"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/definitions/Department"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"hr"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/definitions/Department"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"get-json-schema"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-json-schema"}},[s._v("#")]),s._v(" Get Json schema")]),s._v(" "),a("p",[s._v("In some cases, it may be useful to retrieve the JSON Schema from a Model to use with another library. This is possible\nby using "),a("ApiSymbolName",[s._v("getJsonSchema")]),s._v(". Here is a small example:")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Model"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Json schema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"expose-a-jsonschema"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#expose-a-jsonschema"}},[s._v("#")]),s._v(" Expose a JsonSchema")]),s._v(" "),a("p",[s._v("You can create a controller, or an endpoint to expose a specific schema with the custom keys. This can allow your\nconsumers to retrieve a validation template so that they can use it to validate a form.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/products"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ProductsCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/.schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"customKeys"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" customKeys"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"groups"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" groups"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("customKeys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h2",{attrs:{id:"get-openspec"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-openspec"}},[s._v("#")]),s._v(" Get OpenSpec")]),s._v(" "),a("p",[s._v("In some cases, it may be useful to retrieve the OpenSpec from a Controller to generate the Swagger OpenSpec. This is\npossible by using "),a("ApiSymbolName",[s._v("getSpec")]),s._v(". Here is a small example:")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"MyController"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("getSpec"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" SpecTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Pagination"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" spec "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getSpec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("specType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SpecTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("OPENAPI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("spec"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"OpenSpec"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"components"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schemas"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Product"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"Submission"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"_id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"data"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/components/schemas/Product"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"paths"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"post"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"operationId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"myControllerMethod"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"parameters"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"requestBody"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"content"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/components/schemas/Submission"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"responses"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"200"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Success"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyController"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"decorators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[s._v("#")]),s._v(" Decorators")]),s._v(" "),a("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('schema')"}})],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/31.5da33bc5.js b/assets/js/31.5da33bc5.js new file mode 100644 index 00000000000..e4fb2f4388a --- /dev/null +++ b/assets/js/31.5da33bc5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{772:function(t,e,n){"use strict";n.r(e);var s=n(1),l=Object(s.a)({},(function(){var t=this.$createElement;return(this._self._c||t)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file diff --git a/assets/js/32.10ed95ca.js b/assets/js/32.10ed95ca.js new file mode 100644 index 00000000000..d764e1790f3 --- /dev/null +++ b/assets/js/32.10ed95ca.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{778:function(t,s,n){"use strict";n.r(s);var a=n(1),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"customize-404"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#customize-404"}},[t._v("#")]),t._v(" Customize 404")]),t._v(" "),n("p",[t._v("The guide shows you how you can customize the 404 response error when a resource or route isn't resolved by\nthe router.")]),t._v(" "),n("p",[t._v("Customizing error is possible by using the "),n("RouterLink",{attrs:{to:"/docs/exceptions.html#exception-filter"}},[t._v("Exception filter feature")]),t._v(" and by catching\nthe "),n("ApiSymbolName",[t._v("ResourceNotFound")]),t._v(" error class. This error is thrown by Ts.ED when nothing routes are resolved.")],1),t._v(" "),n("p",[t._v("Create a new ResourceNotFoundFilter in the filters directories and copy/paste this example:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ResourceNotFound"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Catch"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ExceptionFilterMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-exceptions"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Catch")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ResourceNotFound"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceNotFoundFilter")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExceptionFilterMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("catch")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ResourceNotFound"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" obj "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n status"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" exception"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n message"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" exception"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("message"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n url"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" exception"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Json response")]),t._v("\n response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Or with ejs/handlers/etc...")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" html "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("render")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"404.ejs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" obj"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("exception"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("html"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br")])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),n("p",[n("code",[t._v("response.render()")]),t._v(" require to configure the template engine before. See our page over "),n("RouterLink",{attrs:{to:"/tutorials/templating.html#installation"}},[t._v("Templating engine")]),t._v(" installation for more details.")],1)]),t._v(" "),n("p",[t._v("Then import the custom filter in your server:")]),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformApplication"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./filters/ResourceNotFoundFilter"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Importing filter with ES6 import is enough")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/33.58c8cb00.js b/assets/js/33.58c8cb00.js new file mode 100644 index 00000000000..8c87b6bd126 --- /dev/null +++ b/assets/js/33.58c8cb00.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{777:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"pipes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pipes"}},[s._v("#")]),s._v(" Pipes")]),s._v(" "),a("p",[s._v("A pipe is a class annotated with the "),a("ApiSymbolName",[s._v("Injectable")]),s._v(" decorator.\nPipes should implement the "),a("ApiSymbolName",[s._v("IPipe")]),s._v(" interface.")],1),s._v(" "),a("p",[s._v("Pipes have two typical use cases:")]),s._v(" "),a("ul",[a("li",[a("strong",[s._v("transformation")]),s._v(": transform input data to the desired output")]),s._v(" "),a("li",[a("strong",[s._v("validation")]),s._v(": evaluate input data and if valid, simply pass it through unchanged; otherwise, throw an exception when the data is incorrect")])]),s._v(" "),a("p",[s._v("Pipes are called when an Incoming request is handled by the controller route handler and operate on "),a("strong",[s._v("the method's parameters")]),s._v(". It takes "),a("strong",[s._v("Request")]),s._v(" or "),a("strong",[s._v("Response")]),s._v(" object and transform theses object to the expected value.")]),s._v(" "),a("p",[s._v("Pipe receives the argument where it is placed. This means that each parameter can invoke a list of pipes, which can be different for each parameter.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getMethod")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePipe")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePipe")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyPipe2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePipe")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyPipe3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" value2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("Finally, both transformation and validation must implement a "),a("code",[s._v("transform()")]),s._v(" method and return the expected value.")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("Pipes run inside an exception zone. It means that when a Pipe throws an exception, it will be handled by the "),a("ApiSymbolName",[s._v("GlobalExceptionHandler")]),s._v(". Given the above, it should be clear that when an exception is thrown in a Pipe, no controller method is subsequently executed.")],1)]),s._v(" "),a("h2",{attrs:{id:"built-in-pipes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#built-in-pipes"}},[s._v("#")]),s._v(" Built-in pipes")]),s._v(" "),a("p",[s._v("Ts.ED comes with the following pipes:")]),s._v(" "),a("ul",[a("li",[a("ApiSymbolName",[s._v("ParseExpressionPipe")]),s._v(",")],1),s._v(" "),a("li",[a("ApiSymbolName",[s._v("ValidationPipe")]),s._v(",")],1),s._v(" "),a("li",[a("ApiSymbolName",[s._v("DeserializerPipe")])],1)]),s._v(" "),a("p",[s._v("These pipes are exported to allow pipes overriding. These decorators are commonly used by "),a("ApiSymbolName",[s._v("BodyParams")]),s._v(", "),a("ApiSymbolName",[s._v("QueryParams")]),s._v(", etc.\nIn this case, the pipes are added by using "),a("ApiSymbolName",[s._v("UseParam")]),s._v(" on a parameter.")],1),s._v(" "),a("p",[s._v("For example, the use of "),a("ApiSymbolName",[s._v("BodyParams")]),s._v(" on a parameter calls the "),a("ApiSymbolName",[s._v("UseParams")]),s._v(" with some options, and "),a("ApiSymbolName",[s._v("UseParams")]),s._v(" calls also different decorators\nto add Pipes:")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"BodyParams"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("mapParamsOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ParamTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UseParam"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ParameterDecorator "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" useType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" useMapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" useValidation "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("mapParamsOptions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseParam")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n paramType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ParamTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("BODY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n dataPath"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$ctx.request.body"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useMapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useValidation\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"UseParams"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ParamOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UseDeserialization"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UseParamType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UseType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UseValidation"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("useDecorators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseParam")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ParamOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ParameterDecorator "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("useDecorators")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseParamType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("useType "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("useType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("useValidation "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseValidation")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("useMapper "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseDeserialization")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" ParameterDecorator"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])])])],1),s._v(" "),a("p",[s._v("The "),a("strong",[s._v("main idea")]),s._v(" is, you are able to combine any pipes to reach the expected behavior !")]),s._v(" "),a("p",[s._v("Now let's build a validation pipe from scratch to understand the pipe mechanism.")]),s._v(" "),a("p",[s._v("Initially, we'll have it simply take an input value and immediately return the same value, behaving like an identity function.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PipeMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ValidationPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PipeMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[a("code",[s._v("IPipe")]),s._v(" is a generic interface in which "),a("code",[s._v("T")]),s._v(" indicates the type of the input value, and "),a("code",[s._v("R")]),s._v(" indicates the return type of the "),a("code",[s._v("transform()")]),s._v(" method.")])]),s._v(" "),a("p",[s._v("Every pipe has to provide the "),a("code",[s._v("transform()")]),s._v(" method. This method has two parameters:")]),s._v(" "),a("ul",[a("li",[a("code",[s._v("value")])]),s._v(" "),a("li",[a("code",[s._v("metadata")])])]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("value")]),s._v(" is the currently processed argument (before it is received by the route handling method), while metadata is its "),a("code",[s._v("metadata")]),s._v(".\nThe metadata object has these properties (see also "),a("ApiSymbolName",[s._v("ParamMetadata")]),s._v("):")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ParamMetadata")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n target"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n propertyKey"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("symbol")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n index"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n required"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n paramType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" ParamTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n expression"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n pipes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("IPipe"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n store"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Store"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("p",[s._v("These properties describe the current processed argument.")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",[s._v("Property")]),s._v(" "),a("th",[s._v("Description")])])]),s._v(" "),a("tbody",[a("tr",[a("td",[a("code",[s._v("target")])]),s._v(" "),a("td",[s._v("The parameter's class")])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("propertyKey")])]),s._v(" "),a("td",[s._v("The parameter's method")])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("index")])]),s._v(" "),a("td",[s._v("The position of the parameter in the method signature")])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("required")])]),s._v(" "),a("td",[s._v("Indicates whether the parameter is required or not")])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("paramType")])]),s._v(" "),a("td",[a("ApiSymbolName",[s._v("ParamTypes")]),s._v(" represents the starting object used by the first pipe")],1)]),s._v(" "),a("tr",[a("td",[a("code",[s._v("expression")])]),s._v(" "),a("td",[s._v("Expression used to get the property from the object injected with paramType")])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("type")])]),s._v(" "),a("td",[s._v("Class used to deserialize the plain object")])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("collectionType")])]),s._v(" "),a("td",[s._v("Collection type used to deserialize a collection of plain object")])]),s._v(" "),a("tr",[a("td",[a("code",[s._v("store")])]),s._v(" "),a("td",[a("ApiSymbolName",[s._v("Store")]),s._v(" contains extra options collected by the decorators used on the parameter.")],1)])])]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("TypeScript interfaces disappear during transpilation. Thus, if a method parameter's "),a("code",[s._v("type")]),s._v(" is declared as an interface instead of a class, the type value will be "),a("code",[s._v("Object")]),s._v(".")])]),s._v(" "),a("h2",{attrs:{id:"validation-use-case"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#validation-use-case"}},[s._v("#")]),s._v(" Validation use case")]),s._v(" "),a("p",[s._v("The goal of validation use case is to ensure that the input parameter is valid before using it in a method.")]),s._v(" "),a("p",[s._v("Officially, Ts.ED has two way to declare a "),a("ApiSymbolName",[s._v("JsonShema")]),s._v(" validation:")],1),s._v(" "),a("ul",[a("li",[s._v("With "),a("RouterLink",{attrs:{to:"/docs/model.html"}},[s._v("model")]),s._v(" decorators,")],1),s._v(" "),a("li",[s._v("With "),a("ApiSymbolName",[s._v("UseSchema")]),s._v(" decorator, it's a decorator Pipe provided by @tsed/ajv package.")],1)]),s._v(" "),a("p",[s._v("We'll take the model declaration to explain the Validation pipe use case. Let's focus on the "),a("code",[s._v("PersonModel")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("p",[a("code",[s._v("PersonModel")]),s._v(" will generate the following JsonSchema:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("p",[s._v("We want to ensure that any incoming request to the create method contains a valid body.\nSo we have to validate the two members of the "),a("code",[s._v("PersonModel")]),s._v(" object, used as type parameter:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./body-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/persons"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("p",[s._v("By using a pipe, we are able to handle the parameter, get its schema and use a validation library (here AJV)\nand throw an exception when the payload is not valid.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ValidationError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PipeMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" Ajv "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AjvValidationPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PipeMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ajv "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Ajv")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ValidationError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Oops something is wrong"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("p",[s._v("The validation pipe is a very specific use case because Ts.ED uses it automatically when a parameter is handled\nby the "),a("strong",[s._v("routing request")]),s._v(". The previous pipe example, in order to work, needs to be registered with the "),a("ApiSymbolName",[s._v("OverrideProvider")]),s._v(" decorator instead of "),a("ApiSymbolName",[s._v("Injectable")]),s._v(".")],1),s._v(" "),a("p",[s._v("See more details on the "),a("RouterLink",{attrs:{to:"/docs/validation.html"}},[s._v("validation page")]),s._v(".")],1),s._v(" "),a("h2",{attrs:{id:"transformation-use-case"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#transformation-use-case"}},[s._v("#")]),s._v(" Transformation use case")]),s._v(" "),a("p",[s._v("Validation isn't the sole use case for "),a("strong",[s._v("Pipes")]),s._v(".\nAt the beginning of this chapter, we mentioned that a pipe can also "),a("strong",[s._v("transform")]),s._v(" the input data to the desired output.\nThis is possible because the value returned from the transform function completely overrides the previous value of the argument.")]),s._v(" "),a("p",[s._v("When is this useful? Consider that sometimes the data passed from the client needs to undergo some changes - "),a("em",[s._v("for example converting plain object javascript to class")]),s._v(" - before it can be properly handled by the route handler method.\nFurthermore, some required data fields may be missing, and we would like to apply default values.")]),s._v(" "),a("p",[s._v("Transformer pipes can perform these functions by interposing a processing function between the client request and the request handler.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ValidationError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PipeMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ParseIntPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PipeMethods"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" val "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("parseInt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isNaN")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("val"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ValidationError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Value must an integer or a parsable integer"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" val"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("We can simply tie this pipe to the selected param as shown below:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RawPathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UsePipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ParseIntPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../pipes/ParseIntPipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/PersonsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/persons"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" personsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('":id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RawPathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePipe")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ParseIntPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("personsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("On the previous example, we use "),a("ApiSymbolName",[s._v("RawPathParams")]),s._v(" to get the raw value, without transformation or validation from existing Ts.ED Pipe.")],1)]),s._v(" "),a("h2",{attrs:{id:"async-transformation-use-case"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#async-transformation-use-case"}},[s._v("#")]),s._v(" Async transformation use case")]),s._v(" "),a("p",[s._v("Pipe transformation also supports "),a("code",[s._v("async")]),s._v(" and promise as a returned value.\nThis is useful when you have to get data from "),a("strong",[s._v("database")]),s._v(" based on an input data like an ID.")]),s._v(" "),a("p",[s._v("Given this "),a("code",[s._v("PersonModel")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./property"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("We can implement the following pipe to get Person data from database:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PipeMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("NotFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PipeMethods"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n personsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" person "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("personsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("NotFound")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Person not found"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("p",[s._v("Then, we can use this pipe on a parameter with "),a("ApiSymbolName",[s._v("UsePipe")]),s._v(":")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RawPathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UsePipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Put"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/PersonPipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/persons"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Put")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RawPathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePipe")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("h2",{attrs:{id:"custom-pipe-decorator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-pipe-decorator"}},[s._v("#")]),s._v(" Custom pipe decorator")]),s._v(" "),a("p",[s._v("In the previous section, we show you how to use a Pipe on a parameter:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RawPathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UsePipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Put"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/PersonPipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/persons"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Put")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RawPathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePipe")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("p",[s._v("In this example, our pipe need to be called with "),a("ApiSymbolName",[s._v("RawPathParams")]),s._v(" two work properly, because our pipe return an instance of "),a("code",[s._v("PersonModel")]),s._v(". "),a("ApiSymbolName",[s._v("PathParams")]),s._v(" call automatically the "),a("ApiSymbolName",[s._v("DeserializerPipe")]),s._v(" and it's not what we want. This is why we using "),a("ApiSymbolName",[s._v("RawPathParams")]),s._v(".")],1),s._v(" "),a("p",[s._v("To avoid future mistakes, it could be a good idea to summarize these two decorators in one as following:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RawPathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UsePipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("useDecorators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/PersonPipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePersonParam")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ParameterDecorator "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("useDecorators")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RawPathParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePipe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("Now, we can use our custom decorator on parameter:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Put"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" RawPathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UsePipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/PersonPipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/persons"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Put")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePersonParam")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("h2",{attrs:{id:"get-options-from-decorator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-options-from-decorator"}},[s._v("#")]),s._v(" Get options from decorator")]),s._v(" "),a("p",[s._v("Sometimes it might be useful to forward options from a decorator used on parameters to the registered Pipe.")]),s._v(" "),a("p",[s._v("Let's focus on our previous decorator example, by adding extra parameter options:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RawPathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UsePipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("useDecorators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/PersonPipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IUsePersonParamOptions")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n optional"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePersonParam")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" IUsePersonParamOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ParameterDecorator "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("useDecorators")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("RawPathParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePipe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// UsePipe accept second parameter to store your options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("p",[s._v("Now, we can retrieve the options by using the "),a("code",[s._v("metadata.store")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("NotFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PipeMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("IUsePersonParamOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/UsePersonParam"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PipeMethods"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n personsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" person "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("personsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" options "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("store"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("IUsePersonParamOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("person "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("optional"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("NotFound")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Person not found"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("p",[s._v("And finally, we can use our new decorator on a parameter:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Put"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" RawPathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UsePipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PersonPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/PersonPipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/persons"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Put")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UsePersonParam")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("optional"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])])],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/34.6d94427e.js b/assets/js/34.6d94427e.js new file mode 100644 index 00000000000..a02aefba2f5 --- /dev/null +++ b/assets/js/34.6d94427e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{776:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"platform-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#platform-api"}},[t._v("#")]),t._v(" Platform API")]),t._v(" "),a("p",[t._v("Ts.ED uses now the Platform API to create an application. Platform API gives an abstraction layer between your code written with Ts.ED and the "),a("a",{attrs:{href:"https://expressjs.com/fr/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Express.js"),a("OutboundLink")],1),t._v(" code.\nIt means that a large part of your code isn't coupled with Express.js itself and can be used with another Platform like "),a("a",{attrs:{href:"https://koajs.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Koa.js"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("There are some changes between ServerLoader API (v4/v5) and Platform API (v5.56.0+/v6), to get the original Express Application, Request or Response.\nThis page will describe how you can get these instances with the new API.")]),t._v(" "),a("h2",{attrs:{id:"platform-classes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#platform-classes"}},[t._v("#")]),t._v(" Platform classes")]),t._v(" "),a("Tabs",[a("Tab",{attrs:{label:"Abstraction"}},[a("ApiList",{attrs:{query:"status.includes('platform') && ['@tsed/common', '@tsed/platform-views', '@tsed/platform-params', '@tsed/platform-response-filter', '@tsed/platform-exceptions'].includes(module)"}})],1),t._v(" "),a("Tab",{attrs:{label:"Express.js"}},[a("ApiList",{attrs:{query:"status.includes('platform') && module.includes('@tsed/platform-express')"}})],1),t._v(" "),a("Tab",{attrs:{label:"Koa.js"}},[a("ApiList",{attrs:{query:"status.includes('platform') && module.includes('@tsed/platform-koa')"}})],1),t._v(" "),a("Tab",{attrs:{label:"Serverless"}},[a("ApiList",{attrs:{query:"status.includes('platform') && module.includes('@tsed/platform-serverless')"}})],1)],1),t._v(" "),a("h2",{attrs:{id:"create-application"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-application"}},[t._v("#")]),t._v(" Create application")]),t._v(" "),a("p",[t._v("The way to create a Ts.ED application, add "),a("RouterLink",{attrs:{to:"/docs/middlewares.html"}},[t._v("middlewares")]),t._v(", configure Express or Koa, all are impacted by the new Platform API.")],1),t._v(" "),a("p",[t._v("If you use "),a("code",[t._v("ServerLoader")]),t._v(", you'll probably know this example to create a Ts.ED application:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ServerLoader"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ServerSettings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./MyMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n viewsDir"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cwd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("/views")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n middlewares"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("MyMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ServerLoader")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// configure express app")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"views"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("settings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"viewsDir"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("engine")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ejs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ejs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("p",[t._v("With Platform API you have to inject "),a("ApiSymbolName",[t._v("PlatformApplication")]),t._v(" to register a middleware and set configuration to "),a("code",[t._v("Express.Application")]),t._v(":")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Constant"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./MyMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n views"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cwd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("/views")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n viewEngine"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ejs"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n middlewares"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("MyMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Constant")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"viewsDir"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n viewsDir"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("viewsDir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("With Platform API, the Server class is considered as a "),a("ApiSymbolName",[t._v("Provider")]),t._v(". It means that you can use decorators like "),a("ApiSymbolName",[t._v("Constant")]),t._v(" and "),a("ApiSymbolName",[t._v("Inject")]),t._v(" to get any configuration, provider or service from the DI registry.")],1)]),t._v(" "),a("h2",{attrs:{id:"inject-service-in-the-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#inject-service-in-the-server"}},[t._v("#")]),t._v(" Inject service in the Server")]),t._v(" "),a("p",[t._v("With "),a("code",[t._v("ServerLoader")]),t._v(", injecting a provider can be done as follows:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ServerLoader"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ServerSettings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./services/MyService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ServerLoader")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ServerLoader")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" myService "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("injector"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("MyService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n myService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSomething")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("Now with Platform API, the Server class is considered as a "),a("ApiSymbolName",[t._v("Provider")]),t._v(".\nIt means that you can use decorators like "),a("ApiSymbolName",[t._v("Constant")]),t._v(" and "),a("ApiSymbolName",[t._v("Inject")]),t._v(" to get any configuration, provider or service from the DI registry.")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./services/MyService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" myService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("myService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSomething")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("h2",{attrs:{id:"bootstrap-application"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bootstrap-application"}},[t._v("#")]),t._v(" Bootstrap application")]),t._v(" "),a("p",[t._v("In v5, boostrap a "),a("code",[t._v("Server")]),t._v(" can be done with the "),a("code",[t._v("ServerLoader.boostrap")]),t._v(" method:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ServerLoader"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Start server..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" ServerLoader"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// extra settings")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("listen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Server initialized"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])]),a("p",[t._v("Now with Platform API, you have to install "),a("code",[t._v("@tsed/platform-express")]),t._v(" (or "),a("code",[t._v("@tsed/platform-koa")]),t._v(") and change the code by the following example:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Start server..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// extra settings")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("listen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Server initialized"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])]),a("h2",{attrs:{id:"get-application"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-application"}},[t._v("#")]),t._v(" Get Application")]),t._v(" "),a("p",[t._v("Before with v5, to get "),a("code",[t._v("Express.Application")]),t._v(", you had to use "),a("code",[t._v("ExpressApplication")]),t._v(" decorator:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ExpressApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ExpressApplication")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" app"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ExpressApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getExpressApp")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("With Platform API, you have to inject "),a("ApiSymbolName",[t._v("PlatformApplication")]),t._v(" and use the "),a("code",[t._v("app.raw")]),t._v(" or "),a("code",[t._v("app.getApp()")]),t._v(" to get the "),a("code",[t._v("Express.Application")]),t._v(":")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../middlewares/MyMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" app"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Express"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Application"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getExpressApp")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getApp")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// GET Express raw Application. E.g.: const app = express()")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// With Platform API, it is also possible to add middlewares with a service, module, etc...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])]),a("h2",{attrs:{id:"request-and-response"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#request-and-response"}},[t._v("#")]),t._v(" Request and Response")]),t._v(" "),a("p",[t._v("There is no big change over Response and Request, you can always get "),a("ApiSymbolName",[t._v("Request")]),t._v(" and "),a("ApiSymbolName",[t._v("Response")]),t._v(" by using decorators.\nWith the Platform API, you are also able to use "),a("ApiSymbolName",[t._v("Context")]),t._v(" decorator to deal with the "),a("ApiSymbolName",[t._v("PlatformRequest")]),t._v(" or "),a("ApiSymbolName",[t._v("PlatformResponse")]),t._v(" high level API.")],1),t._v(" "),a("p",[t._v("See "),a("RouterLink",{attrs:{to:"/docs/request-context.html#request-and-response-abstraction"}},[t._v("Request context")]),t._v(" page to get more details.")],1),t._v(" "),a("h2",{attrs:{id:"statics-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#statics-files"}},[t._v("#")]),t._v(" Statics files")]),t._v(" "),a("p",[t._v("Since v5.65.0, Platform API manages also the statics files. The "),a("ApiSymbolName",[t._v("ServeStaticService")]),t._v(" is now deprecated in favor of "),a("code",[t._v("PlatformApplication.statics()")]),t._v(" method.")],1),t._v(" "),a("p",[t._v("Before:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ServeStaticService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("join"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" service"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ServeStaticService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onReady")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("statics")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/endpoint"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cwd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../publics"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("p",[t._v("After:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("join"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" app"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onReady")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("statics")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/endpoint"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("root"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cwd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../publics"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("h2",{attrs:{id:"catch-exceptions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#catch-exceptions"}},[t._v("#")]),t._v(" Catch exceptions")]),t._v(" "),a("p",[t._v("The new "),a("RouterLink",{attrs:{to:"/docs/platform-api.html"}},[t._v("Platform API")]),t._v(" introduces a new way to catch an exception with the "),a("ApiSymbolName",[t._v("Catch")]),t._v(" decorator, and\nto let you control the exact flow of control and the response's content sent back to the client.")],1),t._v(" "),a("p",[t._v("See "),a("RouterLink",{attrs:{to:"/docs/exceptions.html#exception-filter"}},[t._v("Exception filter")]),t._v(" page to get more details.")],1)],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/35.96078734.js b/assets/js/35.96078734.js new file mode 100644 index 00000000000..01cd545b1b8 --- /dev/null +++ b/assets/js/35.96078734.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{779:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"lazy-loading-provider"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#lazy-loading-provider"}},[t._v("#")]),t._v(" Lazy-loading provider")]),t._v(" "),a("Badge",{attrs:{text:"6.81.0+"}}),t._v(" "),a("p",[t._v("By default, modules are eagerly loaded, which means that as soon as the application loads, so do all the modules,\nwhether or not they are immediately necessary. While this is fine for most applications, it may become a bottleneck for\napps running in the "),a("strong",[t._v("serverless environment")]),t._v(", where the startup latency "),a("code",[t._v('("cold start")')]),t._v(" is crucial.")]),t._v(" "),a("p",[t._v('Lazy loading can help decrease bootstrap time by loading only modules required by the specific serverless function\ninvocation. In addition, you could also load other modules asynchronously once the serverless function is "warm" to\nspeed-up the bootstrap time for subsequent calls even further (deferred modules registration).')]),t._v(" "),a("h2",{attrs:{id:"getting-started"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[t._v("#")]),t._v(" Getting started")]),t._v(" "),a("p",[t._v("To load a provider on-demand, Ts.ED provide decorators "),a("ApiSymbolName",[t._v("LazyInject")]),t._v(" and "),a("ApiSymbolName",[t._v("OptionalLazyInject")]),t._v(". Here is an example\nwith a "),a("ApiSymbolName",[t._v("PlatformExceptions")]),t._v(":")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" LazyInject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformExceptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyInjectable")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("LazyInject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PlatformException"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" platformExceptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("PlatformExceptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/// do something")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" exceptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platformExceptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n platformExceptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("catch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])]),a("p",[t._v("The LazyInject decorator will load the "),a("code",[t._v("node_module")]),t._v(" and invoke automatically the "),a("code",[t._v("PlatformException")]),t._v(" exported class,\nonly when the decorated property will be used by your code.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Lazy-loaded provider is "),a("code",[t._v("cached")]),t._v(" on the first call.\nThat means, each consecutive call will be very fast and will return a cached instance, instead of loading the provider again.")])]),t._v(" "),a("p",[t._v("Create you own lazy injectable doesn't require special things, just declare a module or an injectable service is enough:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Module")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// works also with @Injectable")]),t._v("\n imports"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Use the imports field if you have services to build")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyModule")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The hook will be called once the module is loaded")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("Then use it:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" LazyInject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../MyModule.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyInjectable")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("LazyInject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MyModule"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../MyModule.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" myModule"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("MyModule"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" myModule "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("myModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n myModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSomething")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("If you use Webpack, make sure to update your "),a("code",[t._v("tsconfig.json")]),t._v(" file - setting "),a("code",[t._v("compilerOptions.module")]),t._v(" to "),a("code",[t._v('"esnext"')]),t._v(" and adding "),a("code",[t._v("compilerOptions.moduleResolution")]),t._v(" property with "),a("code",[t._v('"node"')]),t._v(" as a value:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"compilerOptions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"module"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"esnext"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"moduleResolution"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])])]),t._v(" "),a("h2",{attrs:{id:"lazy-loading-programmatically"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#lazy-loading-programmatically"}},[t._v("#")]),t._v(" Lazy loading programmatically")]),t._v(" "),a("p",[t._v("Ts.ED provide also a way to lazy load a provider programmatically. You just need to inject the "),a("ApiSymbolName",[t._v("InjectorService")]),t._v(" in service:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InjectorService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" injector"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" InjectorService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("load")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../lazy/my-module.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" myModule "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("injector"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("lazyInvoke")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n myModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSomething")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("h2",{attrs:{id:"limitation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#limitation"}},[t._v("#")]),t._v(" Limitation")]),t._v(" "),a("p",[t._v("Some providers cannot be lazy loaded:")]),t._v(" "),a("ul",[a("li",[t._v("Controllers,")]),t._v(" "),a("li",[t._v("Middlewares,")]),t._v(" "),a("li",[t._v("All providers that need to run a specific hook (excepted "),a("code",[t._v("$onInit")]),t._v(" hook).")])])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/36.4ffecd56.js b/assets/js/36.4ffecd56.js new file mode 100644 index 00000000000..067de954ab1 --- /dev/null +++ b/assets/js/36.4ffecd56.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{781:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"context"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#context"}},[t._v("#")]),t._v(" Context")]),t._v(" "),a("p",[t._v("Ts.ED provides an util to get request, response, to store and share data along all middlewares/endpoints during a\nrequest with "),a("ApiSymbolName",[t._v("PlatformContext")]),t._v(". This context is created by Ts.ED when the request is handled by the server.")],1),t._v(" "),a("p",[t._v("It contains some information as following:")]),t._v(" "),a("ul",[a("li",[t._v("The request and response abstraction layer with "),a("ApiSymbolName",[t._v("PlatformRequest")]),t._v(" and "),a("ApiSymbolName",[t._v("PlatformResponse")]),t._v(" (since v5.64.0+),")],1),t._v(" "),a("li",[t._v("The request id,")]),t._v(" "),a("li",[t._v("The request container used by the Ts.ED DI. It contains all services annotated with "),a("code",[t._v("@Scope(ProviderScope.REQUEST)")]),t._v(",")]),t._v(" "),a("li",[t._v("The current "),a("ApiSymbolName",[t._v("EndpointMetadata")]),t._v(" context resolved by Ts.ED during the request,")],1),t._v(" "),a("li",[t._v("The data returned by the previous endpoint if you use multiple handlers on the same route. By default data is empty.")]),t._v(" "),a("li",[t._v("The "),a("ApiSymbolName",[t._v("ContextLogger")]),t._v(" to log some information related to the request and his id.")],1)]),t._v(" "),a("p",[t._v("Here is an example:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Middleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseBefore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Forbidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("AuthToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../domain/auth/AuthToken"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AuthTokenMiddleware")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("has")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"auth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"auth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AuthToken")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"auth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("claims")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// check token")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Forbidden")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Access forbidden - Bad token"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseBefore")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("AuthTokenMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// protect all routes for this controller")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"auth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" auth"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AuthToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"auth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" auth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Attach log to the request")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[a("ApiSymbolName",[t._v("ContextLogger")]),t._v(" is attached to the context "),a("code",[t._v("ctx.logger")]),t._v(". The ContextLogger stores all logs and Ts.ED prints (\nflushes) all logs after the response is sent by the server. The approach optimizes performance by first sending in the\nresponse and then printing all logs.")],1)]),t._v(" "),a("h2",{attrs:{id:"endpoint-metadata"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#endpoint-metadata"}},[t._v("#")]),t._v(" Endpoint metadata")]),t._v(" "),a("p",[a("ApiSymbolName",[t._v("EndpointMetadata")]),t._v(" is the current controller method executed by the request. Middleware can access to this endpoint\nmetadata when you use the middleware over a controller method. By accessing to the "),a("ApiSymbolName",[t._v("EndpointMetadata")]),t._v(" you are able to:")],1),t._v(" "),a("ul",[a("li",[t._v("Get endpoint information,")]),t._v(" "),a("li",[t._v("Create "),a("RouterLink",{attrs:{to:"/docs/custom-endpoint-decorators.html"}},[t._v("custom middleware and decorator")]),t._v(",")],1),t._v(" "),a("li",[t._v("Get the controller class name and propertyKey.")])]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("StoreSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Middleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" EndpointInfo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Use"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Resource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./Resource"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyMiddleware")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Endpoint Metadata")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("targetName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// MyCtrl")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("propertyKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// getMethod")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Resource")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("store"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"options"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// options")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/resources"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Use")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Resource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("StoreSet")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"options"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"options"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getMethod")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Resource "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Resource")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br")])]),a("h2",{attrs:{id:"request-and-response-abstraction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#request-and-response-abstraction"}},[t._v("#")]),t._v(" Request and Response abstraction")]),t._v(" "),a("p",[a("ApiSymbolName",[t._v("PlatformContext")]),t._v(" provide a "),a("ApiSymbolName",[t._v("PlatformRequest")]),t._v(" and "),a("ApiSymbolName",[t._v("PlatformResponse")]),t._v(" classes which are an abstraction layer of the\ntargeted platform (Express.js, Koa.js, etc...).")],1),t._v(" "),a("p",[t._v("By using the PlatformContext interface, your code will be compatible with any platform. But, the abstraction doesn't or\ncannot provide all necessaries properties or methods. It's also possible to get the original request or response by\ndifferent ways.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Middleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyMiddleware")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" req"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Res")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" res"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// abstraction")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// PlatformRequest")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// PlatformResponse")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// by decorator")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Express.Request")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Express.Response")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// by")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("raw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Express.Request")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("raw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Express.Request")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// by method")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRequest")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Express"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Express.Request")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResponse")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Express"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Response"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Express.Response")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br")])]),a("h2",{attrs:{id:"platformrequest"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#platformrequest"}},[t._v("#")]),t._v(" PlatformRequest")]),t._v(" "),a("p",[a("ApiSymbolName",[t._v("PlatformRequest")]),t._v(" provide high level methods and properties to get request information. His interface is the\nfollowing:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PlatformRequest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("T")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Req"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n raw"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("secure")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("url")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("route")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("headers")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IncomingHttpHeaders"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("rawBody")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cookies")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("params")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("session")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get header")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getHeader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get header")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("accepts")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mime"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("isAborted")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br")])]),a("h3",{attrs:{id:"get-request-headers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-request-headers"}},[t._v("#")]),t._v(" Get request headers")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return all headers")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"host"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return host header")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getHeader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"host"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return host header")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("h3",{attrs:{id:"get-request-params-body-query-cookies-session"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-request-params-body-query-cookies-session"}},[t._v("#")]),t._v(" Get request params/body/query/cookies/session")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return body payload")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("params"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return path params")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return query params")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cookies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return cookies")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return session")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("h2",{attrs:{id:"platformresponse"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#platformresponse"}},[t._v("#")]),t._v(" PlatformResponse")]),t._v(" "),a("p",[a("ApiSymbolName",[t._v("PlatformResponse")]),t._v(" provide high level methods like "),a("code",[t._v(".body()")]),t._v(" to send any data to your consumer. This method can\nget "),a("code",[t._v("Boolean")]),t._v(", "),a("code",[t._v("Number")]),t._v(", "),a("code",[t._v("String")]),t._v(", "),a("code",[t._v("Date")]),t._v(", "),a("code",[t._v("Object")]),t._v(", "),a("code",[t._v("Array")]),t._v(" or "),a("code",[t._v("Stream")]),t._v(" as input type and determine the correct way to\nsend the response to your consumer.")],1),t._v(" "),a("p",[t._v("His interface is the following:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PlatformResponse")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n raw"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("statusCode")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("locals")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Record"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("status"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("headers"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("key"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("contentType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("contentType"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("redirect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("status"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" url"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("location")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("location"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ReadableStream "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("render")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("onEnd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cb"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("destroy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cookie")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" opts"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" TsED"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SetCookieOpts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br")])]),a("h3",{attrs:{id:"set-response-headers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-response-headers"}},[t._v("#")]),t._v(" Set response headers")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set headers, content-type and status")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setHeaders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"x-header"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"header"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("contentType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("p",[t._v("Can be also done by returning a response like object:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n statusText"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"OK"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n status"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n headers"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("h3",{attrs:{id:"set-response-cookie"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-response-cookie"}},[t._v("#")]),t._v(" Set response cookie")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// set")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cookie")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"locale"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fr-FR"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// clear")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cookie")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"locale"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("h3",{attrs:{id:"set-response-body"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-response-body"}},[t._v("#")]),t._v(" Set response body")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// equivalent to ctx.getResponse().send()")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// equivalent to ctx.getResponse().json()")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// equivalent to readableStream.pipe(ctx.response.raw)")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("readableStream"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])]),a("p",[t._v("But prefer returning payload from your method! Ts.ED will handle all data type (Buffer/Stream/Data/Promise/Observable).")]),t._v(" "),a("h3",{attrs:{id:"manipulate-original-response"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#manipulate-original-response"}},[t._v("#")]),t._v(" Manipulate original response")]),t._v(" "),a("p",[t._v("You can retrieve the Express\\Koa response by using "),a("code",[t._v("ctx.getResponse()")]),t._v(" method:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Express.js")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResponse")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Express"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Response"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("send")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"asynchook-context"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#asynchook-context"}},[t._v("#")]),t._v(" AsyncHook context")]),t._v(" "),a("p",[t._v("Inject "),a("ApiSymbolName",[t._v("PlatformContext")]),t._v(" from a controller and forward the context to another service could be a pain point. See\nexample:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomRepository")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Where are in the repository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n headers"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headers\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/async-hooks"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AsyncHookCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n repository"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" CustomRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("repository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])]),a("p",[t._v("Since "),a("code",[t._v("v6.26.0")]),t._v(", Ts.ED provide a way to get the "),a("ApiSymbolName",[t._v("PlatformContext")]),t._v(" directly from a Service\ncalled by a controller, using the "),a("a",{attrs:{href:"https://nodejs.org/docs/latest-v14.x/api/async_hooks.html#async_hooks_class_asynclocalstorage",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("AsyncLocalStorage")]),a("OutboundLink")],1),t._v(" provided by Node.js.")],1),t._v(" "),a("p",[t._v("This feature is experimental but in reality, the API is stable and the benefit to use it is here!")]),t._v(" "),a("p",[t._v("If you have a Ts.ED version under v6.113.0, you have to install the "),a("code",[t._v("@tsed/async-hook-context")]),t._v(" package if your environment have the required Node.js (v13+) version.")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save @tsed/async-hook-context\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("Since "),a("code",[t._v("v6.113.0")]),t._v(", the "),a("a",{attrs:{href:"https://nodejs.org/docs/latest-v14.x/api/async_hooks.html#async_hooks_class_asynclocalstorage",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("AsyncLocalStorage")]),a("OutboundLink")],1),t._v(" is automatically enabled.")]),t._v(" "),a("p",[t._v("With this feature, you can inject directly the "),a("ApiSymbolName",[t._v("PlatformContext")]),t._v(" in the service without injecting it in the\ncontroller:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" InjectContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomRepository")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("InjectContext")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" $ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Where are in the repository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n headers"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("$ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?.")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headers\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/async-hooks"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AsyncHookCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n repository"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" CustomRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("repository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br")])]),a("p",[t._v("To run a method with context in your unit test, you can use the "),a("ApiSymbolName",[t._v("PlatformAsyncHookContext")]),t._v(".")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("runInContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./CustomRepository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CustomRepository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("reset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should run method with the ctx"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createRequestContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" service "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("CustomRepository"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headers "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"x-api"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"api"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("runInContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n headers"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"x-api"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"api"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/37.993f6a35.js b/assets/js/37.993f6a35.js new file mode 100644 index 00000000000..b0842166b86 --- /dev/null +++ b/assets/js/37.993f6a35.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{782:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"response-filter"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#response-filter"}},[t._v("#")]),t._v(" Response Filter")]),t._v(" "),a("p",[t._v("Ts.ED response filter provide a "),a("ApiSymbolName",[t._v("ResponseFilter")]),t._v(" decorator to decorate a class and handle data returned by the endpoint before sending it to your consumer.\nThe decorator take a "),a("code",[t._v("Content-Type")]),t._v(" value to define when the class must be used to transform data to the expected result.")],1),t._v(" "),a("p",[t._v("It's the right place to implement your own serialization logic. For example, you can define a Response filter to transform data to an XML content or wrap the data into another generic object.")]),t._v(" "),a("p",[t._v("With this decorator, you are able to define multiple Response Filter (but only by Content-Type). Ts.ED will choose the better\nResponse Filter according to the "),a("code",[t._v("Accept")]),t._v(" HTTP header on the request object, when present, or fallback to the default Response filter.")]),t._v(" "),a("h2",{attrs:{id:"xml-filter"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#xml-filter"}},[t._v("#")]),t._v(" Xml Filter")]),t._v(" "),a("p",[t._v("By using the appropriate "),a("code",[t._v("Content-Type")]),t._v(", you can define a Xml serializer as following:")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"XmlResponseFilter.ts",icon:"bx-code-alt"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ResponseFilter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ResponseFilterMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ResponseFilter")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"text/xml"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("XmlResponseFilter")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResponseFilterMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("jsToXML")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"UserCtrl.ts",icon:"bx-code-alt"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UsersCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ContentType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ContentType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"text/xml"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getUser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("User")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Server.ts",icon:"bxs-server"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("XmlResponseFilter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./filters/XmlResponseFilter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n responseFilters"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n XmlResponseFilter\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"UsersCtrl.spec.ts",icon:"bx-test-tube"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UsersCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UsersCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./UsersCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"UserCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/rest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("UsersCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n responseFilters"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("XmlResponseFilter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should return the xml format"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/users/1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Accept"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"text/xml"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should return the default format"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/users/1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Don't forget to register your Response Filter by adding your class to "),a("code",[t._v("responseFilters")]),t._v(" field on the server configuration.")])]),t._v(" "),a("h2",{attrs:{id:"wrap-responses"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#wrap-responses"}},[t._v("#")]),t._v(" Wrap responses")]),t._v(" "),a("p",[t._v("One of the usage of the Response Filter could be to wrap all returned data into a generic object.\nTo doing that, use the "),a("code",[t._v("application/json")]),t._v(" Content-Type with the "),a("ApiSymbolName",[t._v("ResponseFilter")]),t._v(" decorator\nto wrap data to the expected result:")],1),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"WrapperResponseFilter.ts",icon:"bx-code-alt"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ResponseFilter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ResponseFilterMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ResponseFilter")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("WrapperResponseFilter")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResponseFilterMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" links"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"UserCtrl.ts",icon:"bx-code-alt"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UsersCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ContentType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ContentType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"text/xml"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getUser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("User")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Server.ts",icon:"bxs-server"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("WrapperResponseFilter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./filters/WrapperResponseFilter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n responseFilters"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n WrapperResponseFilter\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"UsersCtrl.spec.ts",icon:"bx-test-tube"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UsersCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UsersCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./UsersCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"UserCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/rest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("UsersCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n responseFilters"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("XmlResponseFilter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should return the wrapped data"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/users/1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" links"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("The wrapper won't be documented in your generated "),a("code",[t._v("swagger.json")]),t._v("!")])]),t._v(" "),a("h2",{attrs:{id:"handle-all-responses"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#handle-all-responses"}},[t._v("#")]),t._v(" Handle all responses")]),t._v(" "),a("p",[t._v("By using the "),a("code",[t._v("*/*")]),t._v(" Content-Type value given to the "),a("ApiSymbolName",[t._v("ResponseFilter")]),t._v(" you can intercept all data.")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ResponseFilter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ResponseFilterMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ResponseFilter")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"*/*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AnyResponseFilter")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResponseFilterMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// do something")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("h2",{attrs:{id:"pagination"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pagination"}},[t._v("#")]),t._v(" Pagination")]),t._v(" "),a("p",[t._v("The following advanced example will show you how you can combine the different Ts.ED features to describe Pagination.\nThe used features are the following:")]),t._v(" "),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/docs/models.html#generics"}},[t._v("Generics")])],1),t._v(" "),a("li",[a("RouterLink",{attrs:{to:"/docs/models.html#using-functions"}},[t._v("Function programming to declare models")])],1),t._v(" "),a("li",[a("ApiSymbolName",[t._v("For")]),t._v(" decorator to declare a custom model for JsonSchema, OS2 or OS3.")],1),t._v(" "),a("li",[a("RouterLink",{attrs:{to:"/docs/response-filter.html"}},[t._v("Response Filter")]),t._v(" to manage paginated response.")],1)]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"ProductsCtrl.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../models/Pageable"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../models/Pagination"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../models/Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/pageable"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ProductsCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("206")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PaginatedProduct"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PaginatedProduct"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" pageableOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"all"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" all"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Product")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"100"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CANON D3000"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n totalCount"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" all "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// just for test,")]),t._v("\n pageable"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" pageableOptions\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Pageable.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("isString"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("OnDeserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("array"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" For"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Min"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" oneOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SpecTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Pageable")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Min")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Page number."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n page"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Min")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Number of objects per page."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n size"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("For")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SpecTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("oneOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxItems")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("For")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SpecTypes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("OPENAPI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxItems")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("OnDeserialize")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("isString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("split")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('","')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Sorting criteria: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n sort"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Pageable"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("page "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("page "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("page"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sort "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sort "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sort"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("offset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("page "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("page "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("limit "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("get")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("limit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Pagination.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Generics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./Pageable"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Generics")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Pageable")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"T"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n totalCount"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" totalCount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Pagination"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("pageable"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pageable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n totalCount "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("totalCount "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" totalCount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Product.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Product")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n title "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"PaginationFilter.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ResponseFilter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ResponseFilterMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-response-filter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Pagination"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../models/Pagination"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ResponseFilter")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PaginationFilter")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResponseFilterMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("unknown")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("instanceof")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Pagination")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the unserialized data")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isPaginated"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("206")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"ProductsCtrl.spec.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Product")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n title "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])])])],1)],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/38.233224d1.js b/assets/js/38.233224d1.js new file mode 100644 index 00000000000..e4a7789130c --- /dev/null +++ b/assets/js/38.233224d1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{783:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"serve-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#serve-files"}},[s._v("#")]),s._v(" Serve files")]),s._v(" "),a("p",[s._v("To serve static files such as images, CSS files, and JavaScript files, Ts.ED uses "),a("code",[s._v("express.static")]),s._v(" and "),a("code",[s._v("koa-send")]),s._v(" for Express and Koa respectively.")]),s._v(" "),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[s._v("#")]),s._v(" Configuration")]),s._v(" "),a("p",[s._v("Ts.ED allows you to configure several directories to be exposed to your consumer.")]),s._v(" "),a("p",[s._v("So for each endpoint, specify a "),a("code",[s._v("root")]),s._v(" path to expose files under this root directory:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n statics"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./public")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Optional")]),s._v("\n hook"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$beforeRoutesInit"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Load statics on the expected hook. Default: $afterRoutesInit")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ... statics options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("Now, you can load the files that are in the "),a("code",[s._v("public")]),s._v(" directory:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("http://localhost:3000/images/kitten.jpg\nhttp://localhost:3000/css/style.css\nhttp://localhost:3000/js/app.js\nhttp://localhost:3000/images/bg.png\nhttp://localhost:3000/hello.html\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("To create a virtual path prefix (where the path does not actually exist in the file system) for files that are served by Ts.ED, specify a mount path for the static directory, as shown below:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n statics"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/statics"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./public")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Optional")]),s._v("\n hook"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$beforeRoutesInit"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Load statics on the expected hook. Default: $afterRoutesInit")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ... statics options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("Now, you can load the files that are in the public directory from the "),a("code",[s._v("/statics")]),s._v(" path prefix.")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("http://localhost:3000/static/images/kitten.jpg\nhttp://localhost:3000/static/css/style.css\nhttp://localhost:3000/static/js/app.js\nhttp://localhost:3000/static/images/bg.png\nhttp://localhost:3000/static/hello.html\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("h2",{attrs:{id:"load-statics-before-controllers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#load-statics-before-controllers"}},[s._v("#")]),s._v(" Load statics before controllers "),a("Badge",{attrs:{text:"v6.74.0+"}})],1),s._v(" "),a("p",[s._v("Since v6.74.0, it's possible to load statics before controllers instead of loading statics after controllers.")]),s._v(" "),a("p",[s._v("Just use the options "),a("code",[s._v("hook")]),s._v(" to change the default behavior:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" process "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"process"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n statics"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/before"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cwd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("/public")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n hook"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$beforeRoutesInit"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ... statics options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/after"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cwd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("/public")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n hook"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$afterRoutesInit"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ... statics options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])]),a("h2",{attrs:{id:"statics-options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#statics-options"}},[s._v("#")]),s._v(" Statics options")]),s._v(" "),a("p",[s._v("Statics options depend on which platform you work (Express, Koa, etc...).")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Express.js"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Express "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PlatformExpressStaticsOptions")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Enable or disable setting Cache-Control response header, defaults to true.\n * Disabling this will ignore the immutable and maxAge options.\n */")]),s._v("\n cacheControl"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Set how \"dotfiles\" are treated when encountered. A dotfile is a file or directory that begins with a dot (\".\").\n * Note this check is done on the path itself without checking if the path actually exists on the disk.\n * If root is specified, only the dotfiles above the root are checked (i.e. the root itself can be within a dotfile when when set to \"deny\").\n * The default value is 'ignore'.\n * 'allow' No special treatment for dotfiles\n * 'deny' Send a 403 for any request for a dotfile\n * 'ignore' Pretend like the dotfile does not exist and call next()\n */")]),s._v("\n dotfiles"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Enable or disable etag generation, defaults to true.\n */")]),s._v("\n etag"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Set file extension fallbacks. When set, if a file is not found, the given extensions will be added to the file name and search for.\n * The first that exists will be served. Example: ['html', 'htm'].\n * The default value is false.\n */")]),s._v("\n extensions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Let client errors fall-through as unhandled requests, otherwise forward a client error.\n * The default value is true.\n */")]),s._v("\n fallthrough"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Enable or disable the immutable directive in the Cache-Control response header.\n * If enabled, the maxAge option should also be specified to enable caching. The immutable directive will prevent supported clients from making conditional requests during the life of the maxAge option to check if the file has changed.\n */")]),s._v("\n immutable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/**\n * By default this module will send "index.html" files in response to a request on a directory.\n * To disable this set false or to supply a new index pass a string or an array in preferred order.\n */')]),s._v("\n index"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Enable or disable Last-Modified header, defaults to true. Uses the file system's last modified value.\n */")]),s._v("\n lastModified"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Provide a max-age in milliseconds for http caching, defaults to 0. This can also be a string accepted by the ms module.\n */")]),s._v("\n maxAge"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/**\n * Redirect to trailing "/" when the pathname is a dir. Defaults to true.\n */')]),s._v("\n redirect"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Function to set custom headers on response. Alterations to the headers need to occur synchronously.\n * The function is called as fn(res, path, stat), where the arguments are:\n * res the response object\n * path the file path that is being sent\n * stat the stat object of the file that is being sent\n */")]),s._v("\n setHeaders"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("res"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Express"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" stat"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br"),a("span",{staticClass:"line-number"},[s._v("73")]),a("br"),a("span",{staticClass:"line-number"},[s._v("74")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Koa.js"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("KoaStaticsOptions")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Browser cache max-age in milliseconds. (defaults to 0) */")]),s._v("\n maxage"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n maxAge"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SendOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"maxage"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Tell the browser the resource is immutable and can be cached indefinitely. (defaults to false) */")]),s._v("\n immutable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Allow transfer of hidden files. (defaults to false) */")]),s._v("\n hidden"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Root directory to restrict file access. (defaults to '') */")]),s._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Name of the index file to serve automatically when visiting the root location. (defaults to none) */")]),s._v("\n index"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Try to serve the gzipped version of a file automatically when gzip is supported by a client and if the requested file with .gz extension exists. (defaults to true). */")]),s._v("\n gzip"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Try to serve the brotli version of a file automatically when brotli is supported by a client and if the requested file with .br extension exists. (defaults to true). */")]),s._v("\n brotli"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** If not false (defaults to true), format the path to serve static file servers and not require a trailing slash for directories, so that you can do both /directory and /directory/. */")]),s._v("\n format"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Function to set custom headers on response. */")]),s._v("\n setHeaders"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SetHeaders"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** Try to match extensions from passed array to search for file when no extension is sufficed in URL. First found is served. (defaults to false) */")]),s._v("\n extensions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"expose-a-webapp"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#expose-a-webapp"}},[s._v("#")]),s._v(" Expose a webapp")]),s._v(" "),a("p",[s._v("Exposing a webapp (React, Vue.js, Angular) with Ts.ED is quite possible.\nThe configuration can be a bit complicated because you have to add the right headers and redirection rule so that all queries are redirected to your webapp when the urls are managed by your front-end application.")]),s._v(" "),a("p",[s._v("Here is a small example to configure statics directory with the right headers and redirection rules.")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Express.js"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" send "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"send"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setCustomCacheControl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("res"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ServerResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("send"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("mime"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("lookup")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("path"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"text/html"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setHeader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Cache-Control"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"no-cache, no-store, must-revalidate"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setHeader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Pragma"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"no-cache"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setHeader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"expires"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n statics"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/app"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./public")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n maxAge"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1d"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n setHeaders"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" setCustomCacheControl\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n app"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$afterRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("/app/*")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("req"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" res"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sendFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("join")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("directory"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"index.html"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Koa.js"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" send "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"send"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setCustomCacheControl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("res"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ServerResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("send"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("mime"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("lookup")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("path"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"text/html"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setHeader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Cache-Control"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"no-cache, no-store, must-revalidate"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setHeader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Pragma"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"no-cache"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setHeader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"expires"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n statics"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/app"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./public")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n maxAge"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1d"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n setHeaders"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" setCustomCacheControl\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n app"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$afterRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("/app/*")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("req"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" res"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n res"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sendFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("join")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("directory"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"index.html"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br")])])])],1),s._v("\n````\n")],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/39.0541c431.js b/assets/js/39.0541c431.js new file mode 100644 index 00000000000..81dd80cc67d --- /dev/null +++ b/assets/js/39.0541c431.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{786:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"testing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[t._v("#")]),t._v(" Testing")]),t._v(" "),a("h2",{attrs:{id:"unit-test"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#unit-test"}},[t._v("#")]),t._v(" Unit test")]),t._v(" "),a("h3",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),a("p",[t._v("Ts.ED support officially two unit test frameworks: Jest and Mocha. It's also possible to use your\npreferred frameworks. Your feedback are welcome")]),t._v(" "),a("Tabs",[a("Tab",{attrs:{label:"Jest"}},[a("p",[t._v("Run these commands to install jest and ts-jest:")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -D @types/jest jest ts-jest\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("Add in your package.json the following task:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"test:unit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cross-env NODE_ENV=test jest"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("p",[t._v("Then create a new "),a("code",[t._v("jest.config.js")]),t._v(" on your root project and the following content:")]),t._v(" "),a("div",{staticClass:"language-javascript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// For a detailed explanation regarding each configuration property, visit:")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// https://jestjs.io/docs/en/configuration.html")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// eslint-disable-next-line node/exports-style")]),t._v("\nmodule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Automatically clear mock calls and instances between every test")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("clearMocks")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Indicates whether the coverage information should be collected while executing the test")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("collectCoverage")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// An array of glob patterns indicating a set of files for which coverage information should be collected")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// collectCoverageFrom: undefined,")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The directory where Jest should output its coverage files")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("coverageDirectory")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"coverage"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// An array of regexp pattern strings used to skip coverage collection")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("coveragePathIgnorePatterns")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/node_modules/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// An array of file extensions your modules use")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("moduleFileExtensions")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"js"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jsx"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tsx"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The test environment that will be used for testing")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("testEnvironment")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The glob patterns Jest uses to detect test files")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("testMatch")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"**/src/**/__tests__/**/*.[jt]s?(x)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"**/src/**/?(*.)+(spec|test).[tj]s?(x)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// A map from regular expressions to paths to transformers")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("transform")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"\\\\.(ts)$"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ts-jest"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Mocha + chai"}},[a("p",[t._v("Run these commands to install mocha chai and sinon:")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -D nyc mocha chai chai-as-promised @types/mocha @types/chai @types/chai-as-promised\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -D sinon sinon-chai @types/sinon @types/sinon-chai\n// OR\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save-dev nyc mocha chai chai-as-promised @types/mocha @types/chai @types/chai-as-promised\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save-dev sinon sinon-chai @types/sinon @types/sinon-chai\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("p",[t._v("Add in your package.json the following task:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"test:unit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cross-env NODE_ENV=test mocha"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"test:coverage"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cross-env NODE_ENV=test nyc mocha"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("p",[t._v("Then create a new "),a("code",[t._v(".mocharc.js")]),t._v(" on your root project and the following content:")]),t._v(" "),a("div",{staticClass:"language-javascript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exports "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ts-node/register/transpile-only"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tsconfig-paths/register"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"scripts/mocha/register"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("recursive")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("reporter")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dot"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("spec")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"src/**/*.spec.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test/**/*.spec.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("p",[t._v("Then create a new "),a("code",[t._v(".nycrc")]),t._v(" on your root project and the following content:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"include"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"src/**/*.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"exclude"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"**/*.d.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"node_modules"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"**/index.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"**/interfaces/**"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"**/*.spec.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"reporter"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"text-summary"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"html"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lcov"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('".ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"check-coverage"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"all"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("p",[t._v("And finally, create a mocha setup file "),a("code",[t._v("scripts/mocha/register.js")]),t._v(", to configure mocha with chai and sinon:")]),t._v(" "),a("div",{staticClass:"language-javascript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" Chai "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ChaiAsPromised "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"chai-as-promised"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" SinonChai "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sinon-chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\nChai"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("should")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nChai"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SinonChai"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nChai"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ChaiAsPromised"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\nprocess"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"unhandledRejection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("reason"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" p")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Unhandled Rejection at: Promise"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" p"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"reason:"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" reason"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// application specific logging, throwing an error, or other logic here")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),a("p",[t._v("Ts.ED provides "),a("ApiSymbolName",[t._v("PlatformTest")]),t._v(" to create a new context to inject your Services, Controllers, Middlewares, etc...\nregistered with annotations like "),a("ApiSymbolName",[t._v("Injectable")]),t._v(".")],1),t._v(" "),a("p",[t._v("The process to test any components is the same thing:")]),t._v(" "),a("ul",[a("li",[t._v("Create a new context for your unit test with "),a("code",[t._v("PlatformTest.create")]),t._v(",")]),t._v(" "),a("li",[t._v("Inject or invoke your component with "),a("code",[t._v("PlatformTest.inject")]),t._v(" or "),a("code",[t._v("PlatformTest.invoke")]),t._v(",")]),t._v(" "),a("li",[t._v("Reset the context with "),a("code",[t._v("PlatformTest.reset")]),t._v(".")])]),t._v(" "),a("p",[t._v("Here is an example to test the ParseService:")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ParseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./ParseService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ParseService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eval()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should evaluate expression with a scope and return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" service "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("ParseService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ParseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eval")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"yes"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"yes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ParseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./ParseService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ParseService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"eval()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should evaluate expression with a scope and return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" service "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("ParseService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ParseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eval")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"yes"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"yes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"ParseService.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("getValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" isEmpty"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ParseService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" clone "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("src"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("parse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("src"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eval")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("expression"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" scope"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" clone"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("isEmpty")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("typeof")]),t._v(" scope "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" clone "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" ParseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("scope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" scope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("scope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" expression"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("typeof")]),t._v(" value "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" clone "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" ParseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"async-await"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#async-await"}},[t._v("#")]),t._v(" Async / Await")]),t._v(" "),a("p",[t._v("Testing asynchronous method is also possible using "),a("code",[t._v("Promises")]),t._v(" ("),a("code",[t._v("async")]),t._v("/"),a("code",[t._v("await")]),t._v("):")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/db"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DbService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should data from db"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" dbService "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("DbService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" dbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("typeof")]),t._v(" result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/db"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DbService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should data from db"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" dbService "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("DbService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" dbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("an")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"mock-dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mock-dependencies"}},[t._v("#")]),t._v(" Mock dependencies")]),t._v(" "),a("p",[t._v("PlatformTest API provides an "),a("code",[t._v("invoke")]),t._v(" method to create a new instance of your component with mocked dependencies.")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../controllers/MyCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/DbService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MyCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// bootstrap your Server to load all endpoints before run your test")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should do something"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" locals "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n token"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n use"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getData")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// give the locals map to the invoke method")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" instance"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyCtrl "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("invoke")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" locals"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// and test it")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../controllers/MyCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/DbService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MyCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// bootstrap your Server to load all endpoints before run your test")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should do something"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" locals "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n use"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getData")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// give the locals map to the invoke method")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" instance"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyCtrl "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("invoke")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" locals"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// and test it")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("equals")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[a("code",[t._v("PlatformTest.invoke()")]),t._v(" executes automatically the "),a("code",[t._v("$onInit")]),t._v(" hook!")])]),t._v(" "),a("h2",{attrs:{id:"test-your-rest-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#test-your-rest-api"}},[t._v("#")]),t._v(" Test your Rest API")]),t._v(" "),a("h3",{attrs:{id:"installation-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-2"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),a("p",[t._v("To test your API, I recommend you to use the "),a("a",{attrs:{href:"https://github.com/visionmedia/supertest",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("supertest")]),a("OutboundLink")],1),t._v(" module.")]),t._v(" "),a("p",[t._v("To install supertest just run these commands:")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Yarn"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -D supertest @types/supertest\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Npm"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save-dev supertest @types/supertest\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[t._v("#")]),t._v(" Example")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// bootstrap your Server to load all endpoints before run your test")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GET /rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should do something"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("typeof")]),t._v(" response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// bootstrap your Server to load all endpoints before run your test")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GET /rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should do something"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("an")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])])])],1),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("If you use the PlatformTest, you'll probably get an error when you'll run the unit test:")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("Platform type is not specified. Have you added at least `import @tsed/platform-express` (or equivalent) on your Server.ts ?\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("To solve it, just add the "),a("code",[t._v("import @tsed/platform-express")]),t._v(" on your "),a("code",[t._v("Server.ts")]),t._v(". PlatformTest need this import to know on\nwhich Platform\nyour server must be executed for integration test.")])]),t._v(" "),a("h3",{attrs:{id:"stub-a-service-method"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#stub-a-service-method"}},[t._v("#")]),t._v(" Stub a service method")]),t._v(" "),a("p",[t._v("When you're testing your API, you have sometimes to stub a method of a service.")]),t._v(" "),a("p",[t._v("Here is an example to do that:")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Chapter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../entity/Chapter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" entity "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Chapter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("assign")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n bookId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n timestamp"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1650996201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"First Day At Work"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ChapterController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" service "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ChapterService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n jest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("spyOn")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"findChapters"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("mockResolvedValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GET /rest/chapter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Get All Chapters"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/chapter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("typeof")]),t._v(" response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Sinon "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sinon"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Chapter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../entity/Chapter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" entity "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Chapter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("assign")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n bookId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n timestamp"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1650996201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"First Day At Work"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" sandbox "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createSandbox")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ChapterController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" service "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ChapterService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n sandbox"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"findChapters"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("resolves")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" sandbox"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("restore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GET /rest/chapter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Get All Chapters"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/chapter"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("typeof")]),t._v(" response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br")])])])],1),t._v(" "),a("h3",{attrs:{id:"stub-a-middleware-method"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#stub-a-middleware-method"}},[t._v("#")]),t._v(" Stub a middleware method "),a("Badge",{attrs:{text:"6.114.3+"}})],1),t._v(" "),a("p",[t._v("When you're testing your API, you have sometimes to stub middleware to disable authentication for example.")]),t._v(" "),a("p",[t._v("Here is an example to do that:")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/testing-mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("HelloWorldController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./HelloWorldController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("AuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../middlewares/auth.middleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"HelloWorldController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" authMiddleware "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("AuthMiddleware"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("AuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("spyOn")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("authMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"use"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("mockResolvedValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n jest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("clearAllMocks")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/hello-world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"hello"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Sinon "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sinon"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("HelloWorldController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./HelloWorldController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/testing-mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("AuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../middlewares/auth.middleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" sandbox "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createSandbox")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"HelloWorldController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" authMiddleware "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("AuthMiddleware"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("AuthMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n sandbox"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("authMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"use"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("resolves")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n sandbox"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("restore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should return value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/hello-world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"hello"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"testing-session"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing-session"}},[t._v("#")]),t._v(" Testing session")]),t._v(" "),a("p",[t._v("To install session with Ts.ED see our "),a("RouterLink",{attrs:{to:"/tutorials/session.html"}},[t._v("tutorial")]),t._v(".")],1),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../../src/Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Session"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Login / Logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should create session return hello world and connect a fake user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// WHEN")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/login"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("send")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"UserName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response3 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// THEN")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello user UserName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../../src/Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Session"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Login / Logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should create session return hello world and connect a fake user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// WHEN")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/login"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("send")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"UserName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response3 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// THEN")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello user UserName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"testing-with-mocked-service"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing-with-mocked-service"}},[t._v("#")]),t._v(" Testing with mocked service "),a("Badge",{attrs:{text:"v7.4.0"}})],1),t._v(" "),a("p",[t._v("One inconvenient with "),a("code",[t._v("PlatformTest.bootstrap()")]),t._v(" and "),a("code",[t._v("PlatformTest.create()")]),t._v("\nis that they will always call the hooks of your service like for example "),a("code",[t._v("$onInit()")]),t._v(".")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),a("p",[a("code",[t._v("PlatformTest.create()")]),t._v(" call only the "),a("code",[t._v("$onInit()")]),t._v(" hook while "),a("code",[t._v("PlatformTest.bootstrap()")]),t._v(" call all hooks.")])]),t._v(" "),a("p",[t._v("This is going to be a problem when you want to test your application, and it uses "),a("code",[t._v("$onInit")]),t._v(" to initialize your database or something else.")]),t._v(" "),a("p",[t._v("Since v7.4.0, You can now mock one or more services as soon as the PlatformTest context is created (like is possible with "),a("code",[t._v("PlatformTest.invoke")]),t._v(").")]),t._v(" "),a("p",[t._v("Here is an example:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../controllers/MyCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/DbService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MyCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// bootstrap your Server to load all endpoints before run your test")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v("\n PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n imports"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n token"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n use"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getData")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("reset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])]),a("p",[t._v("It's also possible to do that with "),a("code",[t._v("PlatformTest.bootstrap()")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SomeIntegrationTestWithDB"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n imports"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n token"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" DbService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n use"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getData")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br")])])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/4.9de5aba7.js b/assets/js/4.9de5aba7.js new file mode 100644 index 00000000000..3c385396553 --- /dev/null +++ b/assets/js/4.9de5aba7.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{741:function(t,e,s){},751:function(t,e,s){"use strict";s(741)},754:function(t,e,s){"use strict";s.r(e);var a=s(96),o={name:"HomeBody",components:{ReleaseNote:a.ReleaseNote,CodeSandbox:a.CodeSandbox}},l=(s(751),s(1)),i=Object(l.a)(o,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"home-body relative"},[s("div",{staticClass:"relative overflow-hidden bg-gray-lighter bg-gradient"},[s("div",{staticClass:"showcase relative shadow-inner relative z-1"},[s("div",{staticClass:"w-full max-w-site mx-auto px-5 py-10 relative z-1"},[s("div",{staticClass:"flex flex-col items-center"},[s("h2",{staticClass:"preview-title"},[t._v("Preview")]),t._v(" "),s("p",{staticClass:"text-center font-normal text-md m-auto max-w-sm pb-0"},[t._v("\n See in our live demo what Ts.ED looks like, without leaving your personal browser.\n ")]),t._v(" "),s("div",{staticClass:"w-full pt-5 pb-10 sm:py-10"},[s("CodeSandbox",{staticClass:"rounded-medium border-2 border-gray-darker bg-white",staticStyle:{width:"100%",height:"500px",overflow:"hidden"},attrs:{sandboxId:"tsed-mongoose-example-omkbm",title:"tsed-mongoose-example",allow:"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"}})],1)])])]),t._v(" "),s("div",{staticClass:"absolute sandbox-logo z-0"},[s("svg",{staticClass:"w-full fill-blue",attrs:{viewBox:"0 0 256 256",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",preserveAspectRatio:"xMidYMid"}},[s("g",[s("path",{attrs:{d:"M115.497674,261.08837 L115.497674,154.478845 L23.8139535,101.729261 L23.8139535,162.501763 L65.8104558,186.8486 L65.8104558,232.549219 L115.497674,261.08837 Z M139.311628,261.714907 L189.916577,232.563707 L189.916577,185.779949 L232.186047,161.285235 L232.186047,101.27387 L139.311628,154.895035 L139.311628,261.714907 Z M219.971965,80.8276886 L171.155386,52.5391067 L128.292316,77.4106841 L85.1040206,52.5141067 L35.8521355,81.1812296 L127.765737,134.063073 L219.971965,80.8276886 Z M0,222.211907 L0,74.4948807 L127.986799,0 L256,74.1820085 L256,221.978632 L127.983954,295.72283 L0,222.211907 Z"}})])])])]),t._v(" "),s("div",{staticClass:"w-full max-w-site mx-auto px-5 py-5 md:py-10"},[t._m(0),t._v(" "),s("div",{staticClass:"mt-5 pt-5"},[s("Frameworks")],1),t._v(" "),s("div",{staticClass:"pt-5"},[s("p",{staticClass:"text-center font-normal text-xl m-auto max-w-lg"},[t._v("What's new ?")]),t._v(" "),s("div",{staticClass:"mt-5 pt-5"},[s("ReleaseNote",{staticClass:"overflow-auto",staticStyle:{"max-height":"300px"}})],1)])])])}),[function(){var t=this.$createElement,e=this._self._c||t;return e("p",{staticClass:"text-center font-normal text-xl m-auto max-w-lg"},[this._v("Here are some of the libraries and technologies\n that we\n use or support with this "),e("strong",[this._v("framework")])])}],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/40.695304b4.js b/assets/js/40.695304b4.js new file mode 100644 index 00000000000..e0a9145c432 --- /dev/null +++ b/assets/js/40.695304b4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{785:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"throw-http-exceptions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#throw-http-exceptions"}},[s._v("#")]),s._v(" Throw HTTP Exceptions")]),s._v(" "),a("p",[s._v("You can use "),a("RouterLink",{attrs:{to:"/docs/exceptions.html"}},[s._v("@tsed/exceptions")]),s._v(" or similar module to throw an http exception.\nAll exceptions will be intercepted by the "),a("RouterLink",{attrs:{to:"/docs/middlewares/override/global-error-handler.html"}},[s._v("Global error handler")]),s._v("\nand are sent to the client.")],1),s._v(" "),a("p",[s._v("Here is an example:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BadRequest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isNaN")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BadRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Not a number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v('This example will produce a response with status code 400 and "Not a number" message.\n'),a("code",[s._v("GlobalErrorHandlerMiddleware")]),s._v(" will catch and format the error before sending it to the client.")])]),s._v(" "),a("h2",{attrs:{id:"create-custom-exception"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-custom-exception"}},[s._v("#")]),s._v(" Create custom exception")]),s._v(" "),a("p",[s._v("It is also possible to create your own exception from any Exception of "),a("RouterLink",{attrs:{to:"/docs/exceptions.html"}},[s._v("@tsed/exceptions")]),s._v(" and customize the response headers.")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BadRequest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ResponseErrorObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RequiredUserName")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BadRequest")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ResponseErrorObject")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n headers "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n errors "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"The name is required"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"my-custom-header"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"value"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// you can also specify errors field for functional errors (like AJV validation).")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("push")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n dataPath"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n keyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n message"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("\"should have required property 'name'\"")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n modelName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n params"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n missingProperty"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n schemaPath"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/required"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])]),a("p",[s._v("Then in your controller:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RequiredUserName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./RequiredUserName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./models/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RequiredUserName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/41.6a8f2814.js b/assets/js/41.6a8f2814.js new file mode 100644 index 00000000000..fd8c3b2cc26 --- /dev/null +++ b/assets/js/41.6a8f2814.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{787:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"upload-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upload-files"}},[t._v("#")]),t._v(" Upload files")]),t._v(" "),a("p",[t._v("Ts.ED supports now the uploading files by default. We use "),a("a",{attrs:{href:"https://github.com/expressjs/multer",target:"_blank",rel:"noopener noreferrer"}},[t._v("Multer"),a("OutboundLink")],1),t._v(" module\nto handle "),a("code",[t._v("multipart/form-data")]),t._v(" from request.")]),t._v(" "),a("Projects",{attrs:{type:"projects"}}),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Originally, multer is provided by Express.js, but Ts.ED implements a multer wrapper to support Koa.js platform based on the official "),a("a",{attrs:{href:"https://www.npmjs.com/package/@koa/multer",target:"_blank",rel:"noopener noreferrer"}},[t._v("@koa/multer"),a("OutboundLink")],1),t._v(" module.")])]),t._v(" "),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),a("p",[t._v("By default, the directory used is "),a("code",[t._v("${projetRoot}/uploads")]),t._v(". You can configure another directory on your Server settings.")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Configuration",icon:"bx-code-alt"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n multer"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n dest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("./../uploads")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// see multer options")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"CodeSandbox",icon:"bxl-codepen"}},[a("CodeSandbox",{attrs:{sandboxId:"rough-frost-6bi81",title:"Multer example"}})],1)],1),t._v(" "),a("h2",{attrs:{id:"options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[t._v("#")]),t._v(" Options")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("dest")]),t._v(" ("),a("code",[t._v("string")]),t._v("): The destination directory for the uploaded files.")]),t._v(" "),a("li",[a("code",[t._v("storage")]),t._v(" ("),a("code",[t._v("StoreEngine")]),t._v("): The storage engine to use for uploaded files.")]),t._v(" "),a("li",[a("code",[t._v("limits")]),t._v(" ("),a("code",[t._v("Object")]),t._v("): An object specifying the size limits of the following optional properties. This object is passed to busboy directly, and the details of properties can be found on "),a("a",{attrs:{href:"https://github.com/mscdex/busboy",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/mscdex/busboy"),a("OutboundLink")],1),t._v(".\n"),a("ul",[a("li",[a("code",[t._v("fieldNameSize")]),t._v(" ("),a("code",[t._v("number")]),t._v("): Max field name size (Default: 100 bytes).")]),t._v(" "),a("li",[a("code",[t._v("fieldSize")]),t._v(" ("),a("code",[t._v("number")]),t._v("): Max field value size (Default: 1MB).")]),t._v(" "),a("li",[a("code",[t._v("fields")]),t._v(" ("),a("code",[t._v("number")]),t._v("): Max number of non- file fields (Default: Infinity).")]),t._v(" "),a("li",[a("code",[t._v("fileSize")]),t._v(" ("),a("code",[t._v("number")]),t._v("): For multipart forms, the max file size (in bytes)(Default: Infinity).")]),t._v(" "),a("li",[a("code",[t._v("files")]),t._v(" ("),a("code",[t._v("number")]),t._v("): For multipart forms, the max number of file fields (Default: Infinity).")]),t._v(" "),a("li",[a("code",[t._v("parts")]),t._v(" ("),a("code",[t._v("number")]),t._v("): For multipart forms, the max number of parts (fields + files)(Default: Infinity).")]),t._v(" "),a("li",[a("code",[t._v("headerPairs")]),t._v(" ("),a("code",[t._v("number")]),t._v("): For multipart forms, the max number of header "),a("code",[t._v("key => value")]),t._v(" pairs to parse Default: 2000(same as node's http).")])])]),t._v(" "),a("li",[a("code",[t._v("preservePath")]),t._v(" ("),a("code",[t._v("boolean")]),t._v("): Keep the full path of files instead of just the base name (Default: false).")]),t._v(" "),a("li",[a("code",[t._v("fileFilter")]),t._v(" ("),a("code",[t._v("Function")]),t._v("): Optional function to control which files are uploaded. This is called for every file that is processed.")])]),t._v(" "),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),a("h3",{attrs:{id:"single-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#single-file"}},[t._v("#")]),t._v(" Single file")]),t._v(" "),a("p",[t._v("A single file can be injected to your endpoint by using the "),a("ApiSymbolName",[t._v("MultipartFile")]),t._v(" decorator like this:")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MulterOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" MultipartFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformMulterFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/file"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("MultipartFile")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" file"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformMulterFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/file"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("MulterOptions")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("dest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/other-dir"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("MultipartFile")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" file"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformMulterFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Many frontend code examples are available on the web and some of them don't work as expected. So, to help you, here is a short vanilla Javascript code example:")]),t._v(" "),a("div",{staticClass:"language-js line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("file")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" formData "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FormData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n formData"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("append")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" file"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("fetch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("/rest/upload")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("method")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"POST"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("headers")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// don't set Content-Type: multipart/form-data. It's set automatically by fetch (same things with axios)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("body")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" formData\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])])]),t._v(" "),a("h3",{attrs:{id:"multiple-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#multiple-files"}},[t._v("#")]),t._v(" Multiple files")]),t._v(" "),a("p",[t._v("For multiple files, just use "),a("code",[t._v("PlatformMulterFile[]")]),t._v(" annotation type. Ts.ED will understand that you want to inject a list of files even if your consumer only sends you one:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MultipartFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformMulterFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/files"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("MultipartFile")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"files"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" files"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformMulterFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// multiple files with 4 as limits")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Swagger spec (v2.0) doesn't support multiple files. Enable OAS 3 to support multipart files in swagger-ui.")])])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/42.7cf15d7d.js b/assets/js/42.7cf15d7d.js new file mode 100644 index 00000000000..48d2af25dcd --- /dev/null +++ b/assets/js/42.7cf15d7d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{792:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"validation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#validation"}},[s._v("#")]),s._v(" Validation")]),s._v(" "),a("p",[s._v("Ts.ED provide by default a "),a("RouterLink",{attrs:{to:"/tutorials/ajv.html"}},[s._v("AJV")]),s._v(" package "),a("code",[s._v("@tsed/ajv")]),s._v(" to perform a validation on a "),a("RouterLink",{attrs:{to:"/docs/model.html"}},[s._v("Model")]),s._v(".")],1),s._v(" "),a("p",[s._v("This package must be installed to run automatic validation on input data. Any model used on parameter and annotated with one of JsonSchema decorator will be\nvalidated with AJV.")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("npm install --save @tsed/ajv\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("But, you can choose another library as model validator.")]),s._v(" "),a("h2",{attrs:{id:"data-input-validation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#data-input-validation"}},[s._v("#")]),s._v(" Data input validation")]),s._v(" "),a("p",[s._v("Ts.ED support the data input validation with the decorators provided by "),a("code",[s._v("@tsed/schema")]),s._v(".")]),s._v(" "),a("p",[s._v("Example:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('":id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("This action returns a #")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v(" calendar")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("h2",{attrs:{id:"custom-validation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-validation"}},[s._v("#")]),s._v(" Custom Validation")]),s._v(" "),a("p",[s._v("Ts.ED allows you to change the default "),a("ApiSymbolName",[s._v("ValidationPipe")]),s._v(" by your own library. The principle is simple.\nCreate a CustomValidationPipe and use "),a("ApiSymbolName",[s._v("OverrideProvider")]),s._v(" to change the default "),a("ApiSymbolName",[s._v("ValidationPipe")]),s._v(".")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ValidationError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ValidationPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PipeMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OverrideProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("validate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./validate"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OverrideProvider")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ValidationPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CustomValidationPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ValidationPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PipeMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// JSON service contain tool to build the Schema definition of a model.")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" valid "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("valid"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ValidationError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"My message"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// list of errors")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Don't forgot to import the new "),a("code",[s._v("CustomValidatorPipe")]),s._v(" in your "),a("code",[s._v("server.ts")]),s._v(" !")])]),s._v(" "),a("h3",{attrs:{id:"use-joi"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-joi"}},[s._v("#")]),s._v(" Use Joi")]),s._v(" "),a("p",[s._v("There are several approaches available for object validation. One common approach is to use schema-based validation.\nThe "),a("a",{attrs:{href:"https://github.com/hapijs/joi",target:"_blank",rel:"noopener noreferrer"}},[s._v("Joi"),a("OutboundLink")],1),s._v(" library allows you to create schemas in a pretty straightforward way, with a readable API.")]),s._v(" "),a("p",[s._v("Let's look at a pipe that makes use of Joi-based schemas.")]),s._v(" "),a("p",[s._v("Start by installing the required package:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("npm install --save @hapi/joi\nnpm install --save-dev @types/hapi__joi\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("In the code sample below, we create a simple class that takes a schema as a constructor argument.\nWe then apply the "),a("code",[s._v("schema.validate()")]),s._v(" method, which validates our incoming argument against the provided schema.")]),s._v(" "),a("p",[s._v("In the next section, you'll see how we supply the appropriate schema for a given controller method using the "),a("ApiSymbolName",[s._v("UsePipe")]),s._v(" decorator.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ObjectSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@hapi/joi"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PipeMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ValidationError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JoiValidationPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PipeMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("store"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ObjectSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("JoiValidationPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ValidationError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Oops something is wrong"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("p",[s._v("Now, we have to create a custom decorator to store the Joi schema along with a parameter:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ObjectSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@hapi/joi"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("StoreSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JoiValidationPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../pipes/JoiValidationPipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseJoiSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ObjectSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("StoreSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("JoiValidationPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("And finally, we are able to add Joi schema with our new decorator:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UseJoiSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/UseJoiSchema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("joiPersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PersonModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/persons"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PersonsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('":id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseJoiSchema")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("joiPersonModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PersonModel\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("h3",{attrs:{id:"use-class-validator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-class-validator"}},[s._v("#")]),s._v(" Use Class validator")]),s._v(" "),a("p",[s._v("Let's look at an alternate implementation of our validation technique.")]),s._v(" "),a("p",[s._v("Ts.ED works also with the "),a("a",{attrs:{href:"https://github.com/typestack/class-validator",target:"_blank",rel:"noopener noreferrer"}},[s._v("class-validator"),a("OutboundLink")],1),s._v(" library.\nThis library allows you to use "),a("strong",[s._v("decorator-based")]),s._v(" validation (like Ts.ED with his "),a("a",{attrs:{href:"/docs/models"}},[s._v("JsonSchema")]),s._v(" decorators).\nDecorator-based validation combined with Ts.ED "),a("RouterLink",{attrs:{to:"/docs/pipes.html"}},[s._v("Pipe")]),s._v(" capabilities since we have access to the medata.type of the processed parameter.")],1),s._v(" "),a("p",[s._v("Before we start, we need to install the required packages:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("npm i --save class-validator class-transformer\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Once these are installed, we can add a few decorators to the "),a("code",[s._v("PersonModel")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("IsString"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" IsInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"class-validator"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CreateCatDto")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("IsString")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("IsInt")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("Read more about the class-validator decorators "),a("a",{attrs:{href:"https://github.com/typestack/class-validator#usage",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(".")])]),s._v(" "),a("p",[s._v("Now we can create a [ClassValidationPipe] class:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ValidationError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ValidationPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PipeMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OverrideProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("plainToClass"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"class-transformer"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("validate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"class-validator"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OverrideProvider")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ValidationPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ClassValidationPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ValidationPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PipeMethods"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("shouldValidate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// there is no type and collectionType")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" object "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("plainToClass")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" errors "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("length "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ValidationError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Oops something is wrong"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("shouldValidate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" types"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collectionType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("types"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("includes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("Notice")]),s._v(" "),a("p",[s._v("Above, we have used the "),a("a",{attrs:{href:"https://github.com/typestack/class-transformer",target:"_blank",rel:"noopener noreferrer"}},[s._v("class-transformer"),a("OutboundLink")],1),s._v(" library.\nIt's made by the same author as the "),a("strong",[s._v("class-validator")]),s._v(" library, and as a result, they play very well together.")])]),s._v(" "),a("p",[s._v("Note that we get the type from "),a("ApiSymbolName",[s._v("ParamMetadata")]),s._v(" and give it to plainToObject function. The method "),a("code",[s._v("shouldValidate")]),s._v("\nbypass the validation process for the basic types and when the "),a("code",[s._v("metadata.type")]),s._v(" or "),a("code",[s._v("metadata.collectionType")]),s._v(" are not available.")],1),s._v(" "),a("p",[s._v("Next, we use the "),a("strong",[s._v("class-transformer")]),s._v(" function "),a("code",[s._v("plainToClass()")]),s._v(" to transform our plain JavaScript argument object into a typed object\nso that we can apply validation. The incoming body, when deserialized from the network request, does not have any type information.\nClass-validator needs to use the validation decorators we defined for our "),a("strong",[s._v("PersonModel")]),s._v(" earlier,\nso we need to perform this transformation.")]),s._v(" "),a("p",[s._v("Finally, we return the value when we haven't errors or throws a "),a("code",[s._v("ValidationError")]),s._v(".")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("If you use "),a("strong",[s._v("class-validator")]),s._v(", it also be logical to use "),a("a",{attrs:{href:"https://github.com/typestack/class-transformer",target:"_blank",rel:"noopener noreferrer"}},[s._v("class-transformer"),a("OutboundLink")],1),s._v(" as Deserializer.\nSo we recommend to override also the "),a("ApiSymbolName",[s._v("DeserializerPipe")]),s._v(".")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DeserializerPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PipeMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OverrideProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("plainToClass"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"class-transformer"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OverrideProvider")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("DeserializerPipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ClassTransformerPipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PipeMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("transform")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" metadata"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" JsonParameterStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("plainToClass")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("metadata"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])])]),s._v(" "),a("p",[s._v("We just have to import the pipe on our "),a("code",[s._v("server.ts")]),s._v(" and use model as type on a parameter.")])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/43.ef3bad15.js b/assets/js/43.ef3bad15.js new file mode 100644 index 00000000000..22ac7b7d5e4 --- /dev/null +++ b/assets/js/43.ef3bad15.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{789:function(t,s,e){"use strict";e.r(s);var a=e(1),r=Object(a.a)({},(function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"create-your-first-controller"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#create-your-first-controller"}},[t._v("#")]),t._v(" Create your first controller")]),t._v(" "),e("p",[t._v("Create a new "),e("code",[t._v("CalendarCtrl.ts")]),t._v(" in your controllers directory (by default "),e("code",[t._v("root/controllers")]),t._v(").\nAll controllers declared with "),e("ApiSymbolName",[t._v("Controller")]),t._v(" decorators are considered as Platform routers (Express.Router, Koa.Router, ...).\nA Platform router requires a path (here, the path is "),e("code",[t._v("/calendars")]),t._v(") to expose an url on your server.\nMore precisely, it's a part of a path, and the entire exposed url depends on the Server configuration (see "),e("RouterLink",{attrs:{to:"/docs/configuration.html"}},[t._v("Configuration")]),t._v(")\nand the "),e("RouterLink",{attrs:{to:"/docs/controllers.html"}},[t._v("children controllers")]),t._v(".")],1),t._v(" "),e("p",[t._v("In this case, we have no dependencies and the root endpoint is set to "),e("code",[t._v("/rest")]),t._v(".\nSo the controller's url will be "),e("code",[t._v("http://host/rest/calendars")]),t._v(".")]),t._v(" "),e("div",{staticClass:"language-ts line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-ts"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token decorator"}},[e("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/calendars"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarCtrl")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token decorator"}},[e("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("findAll")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"This action returns all calendars"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br"),e("span",{staticClass:"line-number"},[t._v("2")]),e("br"),e("span",{staticClass:"line-number"},[t._v("3")]),e("br"),e("span",{staticClass:"line-number"},[t._v("4")]),e("br"),e("span",{staticClass:"line-number"},[t._v("5")]),e("br"),e("span",{staticClass:"line-number"},[t._v("6")]),e("br"),e("span",{staticClass:"line-number"},[t._v("7")]),e("br"),e("span",{staticClass:"line-number"},[t._v("8")]),e("br"),e("span",{staticClass:"line-number"},[t._v("9")]),e("br"),e("span",{staticClass:"line-number"},[t._v("10")]),e("br")])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("Decorators "),e("ApiSymbolName",[t._v("Get")]),t._v(", "),e("ApiSymbolName",[t._v("Post")]),t._v(", "),e("ApiSymbolName",[t._v("Delete")]),t._v(", "),e("ApiSymbolName",[t._v("Put")]),t._v(", etc., support dynamic pathParams (eg: "),e("code",[t._v("/:id")]),t._v(") and "),e("code",[t._v("RegExp")]),t._v(" like Express API.")],1),t._v(" "),e("p",[t._v("See "),e("RouterLink",{attrs:{to:"/docs/controllers.html"}},[t._v("Controllers")]),t._v(" section for more details")],1)]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("You have to configure "),e("a",{attrs:{href:"/tutorials/templating"}},[t._v("engine rendering")]),t._v(" if you want to use the decorator "),e("ApiSymbolName",[t._v("Render")]),t._v(".")],1)]),t._v(" "),e("p",[t._v("To test your method, just run your "),e("code",[t._v("server.ts")]),t._v(" and send an HTTP request on "),e("code",[t._v("/rest/calendars/1")]),t._v(".")]),t._v(" "),e("h3",{attrs:{id:"ready-for-more"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ready-for-more"}},[t._v("#")]),t._v(" Ready for More?")]),t._v(" "),e("p",[t._v("We’ve briefly introduced the most basic features of Ts.ED - the rest of this guide will cover them and other advanced features with much finer details, so make sure to read through it all!")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/44.192d1f06.js b/assets/js/44.192d1f06.js new file mode 100644 index 00000000000..fd92a5c13eb --- /dev/null +++ b/assets/js/44.192d1f06.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{791:function(s,t,a){"use strict";a.r(t);var n=a(1),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"migrate-from-express-js"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#migrate-from-express-js"}},[s._v("#")]),s._v(" Migrate from Express.js")]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("You can get the latest version of Ts.ED using the following npm command:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Yarn"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" -D typescript @types/express\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" -D express@4 @tsed/core @tsed/di @tsed/common @tsed/schema @tsed/json-mapper @tsed/exceptions @tsed/platform-express\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Npm"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev typescript @types/express\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save express@4 @tsed/core @tsed/di @tsed/common @tsed/schema @tsed/json-mapper @tsed/exceptions @tsed/platform-express\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("The following modules also are recommended:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Yarn"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" body-parser compression cookie-parser method-override\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" -D ts-node nodemon\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Npm"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save body-parser compression cookie-parser method-override\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev ts-node nodemon\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])])],1)],1),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("It is really important to keep the same version for all "),a("code",[s._v("@tsed/*")]),s._v(" packages.\nTo prevent errors, fix the version for each Ts.ED packages:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"dependencies"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.56.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.56.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.56.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.56.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/plaftorm-express"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.56.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.56.0"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])])]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Ts.ED requires Node >= 10, Express >= 4, TypeScript >= 4.0.2 and\nthe "),a("code",[s._v("experimentalDecorators")]),s._v(", "),a("code",[s._v("emitDecoratorMetadata")]),s._v(", "),a("code",[s._v("types")]),s._v(" and "),a("code",[s._v("lib")]),s._v(" compilation\noptions in your "),a("code",[s._v("tsconfig.json")]),s._v(" file.")])]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"compilerOptions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"baseUrl"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"outDir"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./dist"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"target"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"es2018"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lib"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"es7"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"dom"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"esnext.asynciterable"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"typeRoots"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./node_modules/@types"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"module"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"commonjs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"moduleResolution"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"node"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"experimentalDecorators"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"emitDecoratorMetadata"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"sourceMap"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"declaration"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"allowSyntheticDefaultImports"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"allowJs"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"include"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./src/**/*.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"exclude"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"node_modules"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./public"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"dist"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("You can use this example of "),a("code",[s._v("package.json")]),s._v(" to add npm tasks and dependencies:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/basic-example"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"version"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Here an example to configure your server and how to create your first controller."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"main"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"src/index.js"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clean"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("\"rimraf '{src,test}/**/*.{js,js.map}'\"")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"build"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yarn tsc"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yarn clean && yarn test:lint && yarn test:coverage"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test:unit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cross-env NODE_ENV=test mocha"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test:coverage"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cross-env NODE_ENV=test nyc mocha"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test:lint"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tslint --project tsconfig.json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test:lint:fix"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tslint --project tsconfig.json --fix"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"travis:deploy-once"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"travis-deploy-once"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"travis:coveralls"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nyc report --reporter=text-lcov | coveralls"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tsc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tsc --project tsconfig.json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tsc:w"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tsc --project tsconfig.json -w"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"start"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nodemon --watch \\"src/**/*.ts\\" --ignore \\"node_modules/**/*\\" --exec ts-node src/index.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"start:prod"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cross-env NODE_ENV=production node dist/index.js"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"docker:build"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yarn build && docker-compose build"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"deploy"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"exit 0"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"author"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"license"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MIT"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"dependencies"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/swagger-schema-official"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.0.21"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"body-parser"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.19.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cors"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.8.5"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.7.4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"concurrently"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.3.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.4.5"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"express"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.17.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^3.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"uuid"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"8.3.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cross-env"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7.0.2"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"devDependencies"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/chai"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.2.12"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/chai-as-promised"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7.1.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/cors"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.8.6"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/express"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.17.7"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/http-proxy"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.17.2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/mocha"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"8.0.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/node"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"14.11.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/request-promise"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.1.45"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/sinon"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"9.0.8"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/sinon-chai"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3.2.4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/supertest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.0.10"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.2.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"chai-as-promised"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7.1.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"concurrently"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.3.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"mocha"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"8.1.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"nodemon"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.19.4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"nyc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"15.1.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"rimraf"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"sinon"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"9.0.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"sinon-chai"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3.5.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ts-node"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"9.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tslint"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.1.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"typescript"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.2.3"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br")])])]),s._v(" "),a("h2",{attrs:{id:"create-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-server"}},[s._v("#")]),s._v(" Create server")]),s._v(" "),a("p",[s._v("To use Ts.ED now, use the "),a("RouterLink",{attrs:{to:"/docs/platform-api.html"}},[s._v("Platform API")]),s._v(" to create an application. Platform API gives an abstraction layer\nbetween your code written with Ts.ED and the Express code. It means a large part of your code\nisn't coupled with Express itself, and can be used with another Platform like Koa.")],1),s._v(" "),a("p",[s._v("Ts.ED provides a "),a("ApiSymbolName",[s._v("Configuration")]),s._v(" decorator to declare a new application.\nJust create a "),a("code",[s._v("server.ts")]),s._v(" in your root project :")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// import compress from "compression";')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// import cookieParser from "cookie-parser";')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// import methodOverride from "method-override";')]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n acceptMimes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n app"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * This method let you configure the express middleware required by your application to works.\n * @returns {Server}\n */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Add middlewares here only when all of your legacy routes are migrated to Ts.ED")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// this.app")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// .use(cookieParser())")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// .use(compress({}))")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// .use(methodOverride())")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])]),a("p",[s._v("To customize the server settings see "),a("RouterLink",{attrs:{to:"/getting-started/configuration.html"}},[s._v("Configuration")]),s._v(" page.")],1),s._v(" "),a("p",[s._v("Finally, create an "),a("code",[s._v("index.ts")]),s._v(" file to bootstrap your server with the legacy express application, on the same level of the "),a("code",[s._v("Server.ts")]),s._v(":")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Bootstrap"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expressApp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./legacy/server.js"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Start server..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n express"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n app"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" expressApp\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("listen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Server initialized"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("catch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"server.js"}},[a("div",{staticClass:"language-js line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" express "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" bodyParser "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"body-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" compress "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" cookieParser "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" methodOverride "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("router")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" productRouter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./routes/products"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" app "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("express")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" restRouter "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" express"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Router")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("mergeParams")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// middlewares")]),s._v("\n\napp\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cookieParser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("compress")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("methodOverride")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bodyParser"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("json")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n bodyParser"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("urlencoded")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("extended")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// routes")]),s._v("\nrestRouter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/products"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" productRouter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\napp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" restRouter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\nexports"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("expressApp "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])])])],1),s._v(" "),a("p",[s._v("You should have this directory tree:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v(".\n├── src\n│ ├── legacy/server.js\n│ ├── controllers\n│ ├── services\n│ ├── middlewares\n│ ├── index.ts\n│ └── Server.ts\n└── package.json\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("By default Ts.ED loads automatically Services, Controllers and Middlewares in specific directories.\nThis behavior can be changed by editing the "),a("RouterLink",{attrs:{to:"/docs/configuration.html"}},[s._v("componentsScan configuration")]),s._v(".")],1)])],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/45.713642ae.js b/assets/js/45.713642ae.js new file mode 100644 index 00000000000..06af7fb0a82 --- /dev/null +++ b/assets/js/45.713642ae.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{798:function(t,s,a){"use strict";a.r(s);var e=a(1),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"migrate-from-v6"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#migrate-from-v6"}},[t._v("#")]),t._v(" Migrate from v6")]),t._v(" "),a("h2",{attrs:{id:"what-s-new"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-s-new"}},[t._v("#")]),t._v(" What's new ?")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Topics")]),t._v(" "),a("th",[t._v("Migration note")]),t._v(" "),a("th",[t._v("Issue")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("Use virtual router instead of Express or Koa router")]),t._v(" "),a("td",[a("a",{attrs:{href:"#virtual-router"}},[t._v("See")])]),t._v(" "),a("td",[a("a",{attrs:{href:"https://github.com/tsedio/tsed/pull/1987",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1987"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",[t._v("Remove componentsScan options and any glob pattern to discover services")]),t._v(" "),a("td",[a("a",{attrs:{href:"#components-scan"}},[t._v("See")])]),t._v(" "),a("td",[a("a",{attrs:{href:"https://github.com/tsedio/tsed/issues/1503",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1503"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",[t._v("Use "),a("RouterLink",{attrs:{to:"/docs/templating.html"}},[t._v("@tsed/engines")]),t._v(" instead of Consolidate")],1),t._v(" "),a("td",[a("a",{attrs:{href:"#template-engines"}},[t._v("See")])]),t._v(" "),a("td",[a("a",{attrs:{href:"https://github.com/tsedio/tsed/issues/1503",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1503"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",[t._v("Remove possibility to register twice handler with the same path + http verb")]),t._v(" "),a("td",[a("a",{attrs:{href:"#register-twice-handler-for-the-same-route"}},[t._v("See")])]),t._v(" "),a("td",[a("a",{attrs:{href:"https://github.com/tsedio/tsed/issues/1793",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1793"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",[t._v("Change the default value of "),a("code",[t._v("jsonMapper.disableUnsecureConstructor")]),t._v(" to "),a("code",[t._v("true")])]),t._v(" "),a("td",[a("a",{attrs:{href:"#jsonmapper-options"}},[t._v("See")])]),t._v(" "),a("td",[a("a",{attrs:{href:"https://github.com/tsedio/tsed/issues/1942",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1942"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",[t._v("Remove "),a("code",[t._v("ConverterService")])]),t._v(" "),a("td",[a("a",{attrs:{href:"#converterservice"}},[t._v("See")])]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("Remove "),a("code",[t._v("export * from @tsed/platform-cache")]),t._v(" in "),a("code",[t._v("@tsed/common")])]),t._v(" "),a("td",[a("a",{attrs:{href:"#platform-cache"}},[t._v("See")])]),t._v(" "),a("td",[a("a",{attrs:{href:"https://github.com/tsedio/tsed/pull/1657",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1657"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",[t._v("Remove "),a("code",[t._v("@tsed/async_hook_context")])]),t._v(" "),a("td",[a("a",{attrs:{href:"#async-hook-context"}},[t._v("See")])]),t._v(" "),a("td",[a("a",{attrs:{href:"https://github.com/tsedio/tsed/pull/1860",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1860"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",[t._v("OIDC: use "),a("code",[t._v("/oidc")]),t._v(" basePath by default")]),t._v(" "),a("td"),t._v(" "),a("td",[a("a",{attrs:{href:"https://github.com/tsedio/tsed/pull/1490",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1490"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",[t._v("Remove deprecated code/decorators/functions in v6")]),t._v(" "),a("td",[a("a",{attrs:{href:"#other-breaking-changes"}},[t._v("See")])]),t._v(" "),a("td")])])]),t._v(" "),a("h2",{attrs:{id:"workflow-to-migrate-your-app"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#workflow-to-migrate-your-app"}},[t._v("#")]),t._v(" Workflow to migrate your app")]),t._v(" "),a("figure",[a("img",{staticStyle:{padding:"20px",background:"white"},attrs:{src:"/getting-started/migration-workflow.png",alt:"migration guide"}})]),t._v(" "),a("p",[t._v("This graph will help you to migrate your application to the v7. Don't hesitate to give us feedback on "),a("a",{attrs:{href:"https://github.com/tsedio/tsed/issues",target:"_blank",rel:"noopener noreferrer"}},[t._v("github issues"),a("OutboundLink")],1),t._v("!")]),t._v(" "),a("h2",{attrs:{id:"update-cli"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#update-cli"}},[t._v("#")]),t._v(" Update CLI")]),t._v(" "),a("p",[t._v("If you use Ts.ED CLI on your project, don't forget to update all CLI v3 dependencies to v4!")]),t._v(" "),a("h2",{attrs:{id:"virtual-router"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#virtual-router"}},[t._v("#")]),t._v(" Virtual router")]),t._v(" "),a("p",[t._v("Ts.ED replace the Express.Router and Koa.Router by his own Router. In most cases this will be transparent to you as you are using the Ts.ED controllers and Platform API.")]),t._v(" "),a("h3",{attrs:{id:"why"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#why"}},[t._v("#")]),t._v(" Why ?")]),t._v(" "),a("p",[t._v("This change will make it easier to integrate other frameworks like fastify and Hapi that don't have a nested router.")]),t._v(" "),a("p",[t._v("With Express you can create nested routers to compose your routes. What could be practical in a pure Express Application. With Ts.ED the use is limited or even transparent.")]),t._v(" "),a("p",[t._v("Hapi and Fastify only support a list of routes with full paths.")]),t._v(" "),a("p",[t._v("In fact, it is much simpler for Ts.ED to generate this list of flat routes and then map the routes/handlers to the target framework rather than managing each framework's nested routers! (Koa router is a real nightmare).")]),t._v(" "),a("h3",{attrs:{id:"potential-issue"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#potential-issue"}},[t._v("#")]),t._v(" Potential issue")]),t._v(" "),a("p",[t._v("There is a scenario where you may run into problems if you inject PlatformRouter into your controller to dynamically create your routes.")]),t._v(" "),a("p",[t._v("Here is the example:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformRouter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-router"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// in v6 import {PlatformRouter} from "@tsed/common";')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("router"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformRouter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n router"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("myMethod")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bind")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// GET raw router (Express.Router or Koa.Router)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("router"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// v7 removed")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("router"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRouter")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// removed")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("router"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("raw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return PlatformRouter itself intead Express.Router")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("myMethod")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("req"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br")])]),a("h2",{attrs:{id:"components-scan"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#components-scan"}},[t._v("#")]),t._v(" Components scan")]),t._v(" "),a("p",[t._v("ComponentsScan is an option to import services using a glob pattern. It's pretty useful when you start new application.")]),t._v(" "),a("p",[t._v("But this option can cause some issues or misunderstood:")]),t._v(" "),a("ul",[a("li",[t._v("When you change a location for a Controller/Service/Modules, the code isn't discovered as expected. It's normal, they\nserver have default configuration like "),a("code",[t._v("**/services/**/*.ts")]),t._v(". if the code is outside of this pattern, the won't be\nloaded.")]),t._v(" "),a("li",[t._v("Performance issue. The global pattern have a huge impact on the server bootstrap!")]),t._v(" "),a("li",[t._v("Isn't compatible with Webpack or any bundler because the code imported dynamically.")]),t._v(" "),a("li",[t._v("Importing dynamically code using glob pattern in production may be a breach exploitable by hackers to inject code.")])]),t._v(" "),a("p",[t._v("This is why I decided to replace the componentsScan by another tools named "),a("code",[t._v("barrelsby")]),t._v(". The latest CLI version install barrelsby on fresh project. This tool use globpattern to generate an index files (barrel file) with all controllers. This tool isn't invoked a the runtime but before when you build the code or you invoke the NPM script to generates barrels.")]),t._v(" "),a("p",[t._v("It's maybe less magical, but it solves all previous described issues encountered with the "),a("code",[t._v("componentsScan")]),t._v(".")]),t._v(" "),a("p",[t._v("You can try this tool by generate a project with "),a("code",[t._v("tsed init .")]),t._v(". In the new project you'll have a new NPM task "),a("code",[t._v("barrels")]),t._v("\nto generate barrels files. You can customize easily the barrelsby configuration to generate multiple barrels file at different levels of your project!")]),t._v(" "),a("p",[t._v("Here is the main points about barrelsby usage in a Ts.ED project:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"build"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"yarn run barrels && yarn run tsc --project tsconfig.compile.json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"barrels"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"barrelsby --config .barrelsby.json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"start"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"yarn run barrels && tsnd --inspect --ignore-watch node_modules --respawn --transpile-only -r tsconfig-paths/register src/index.ts"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("p",[a("strong",[t._v(".barrelsby.json")])]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"directory"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./src/controllers/rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"exclude"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"__mock__"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"__mocks__"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('".spec.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"delete"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("p",[t._v("This configuration generate index.ts file with the following contents:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * @file Automatically generated by barrelsby.\n */")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./HelloWorldController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./UserController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("p",[t._v("And we can use it as following:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" rest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./controllers/rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/rest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("Object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("values")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("h3",{attrs:{id:"known-issue-with-barrelsby"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#known-issue-with-barrelsby"}},[t._v("#")]),t._v(" Known issue with barrelsby")]),t._v(" "),a("p",[t._v("Actually, Barrelsby doesn't support ESM module. But an issue is already opened "),a("a",{attrs:{href:"https://github.com/bencoveney/barrelsby/issues/178",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(" to support it!")]),t._v(" "),a("h3",{attrs:{id:"keep-the-componentsscan"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#keep-the-componentsscan"}},[t._v("#")]),t._v(" Keep the componentsScan")]),t._v(" "),a("p",[t._v("To facilitate your migration, you can install the "),a("code",[t._v("@tsed/components-scan")]),t._v(" module. This module does exactly the same as what you have in v6")]),t._v(" "),a("p",[t._v("Here is the right way to use the "),a("code",[t._v("componentsScan")]),t._v(" since v6.104.0:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("importProviders"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/components-scan"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" scannedProviders "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("importProviders")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/rest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("__dirname "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/**/controllers/**/*.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n imports"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("__dirname "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/**/services/**/*.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" __dirname "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/**/protocols/**/*.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("scannedProviders\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("listen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SIGINT"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stop")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SERVER_BOOTSTRAP_ERROR"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br")])]),a("h2",{attrs:{id:"template-engines"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#template-engines"}},[t._v("#")]),t._v(" Template Engines")]),t._v(" "),a("p",[t._v("Consolidate is a perfect wrapper to support multiples engines, but It doesn't provide API to adding new Engines. And the package is no longer actively maintained.")]),t._v(" "),a("p",[t._v("Ts.ED Engines provide a set of engines and let you use decorators to implement your custom engine:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Engine"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ViewEngine"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/engines"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ViewEngine")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pug"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n requires"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pug"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"then-pug"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// multiple require is possible. Ts.ED will use the first module resolved from node_modules")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PugEngine")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Engine")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("engine"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$compileFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("file"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("engine"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compileFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("file"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("p",[t._v("By this way, you'll be able to use it with Ts.ED (server or CLI) to compile and render your template.")]),t._v(" "),a("p",[t._v("For example, Ts.ED engines support Vite as View engine!! "),a("a",{attrs:{href:"https://github.com/tsedio/tsed-example-vite",target:"_blank",rel:"noopener noreferrer"}},[t._v("See more here"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("Ts.ED engines is already integrated to v6. You can now switch your project to this library and open issues if you have any problems.")]),t._v(" "),a("p",[t._v("For more details about engine configuration with Ts.ED, see our dedicated "),a("RouterLink",{attrs:{to:"/docs/templating.html"}},[t._v("page")]),t._v(".")],1),t._v(" "),a("h2",{attrs:{id:"register-twice-handler-for-the-same-route"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#register-twice-handler-for-the-same-route"}},[t._v("#")]),t._v(" Register twice handler for the same route")]),t._v(" "),a("p",[t._v("One of the possibilities given by express.js is to be able to register two routes for the same http path and verb.")]),t._v(" "),a("p",[t._v("For example, you can do that:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/mypath"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" myHandler1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\napp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/mypath"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" myHandler2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("p",[t._v("Ts.ED allowed to do the same thing with controllers in v6:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/mypath"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/mypath"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getB")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("p",[t._v("But this principle leads to unexpected behavior and causes a regression when using an Error type middleware with UseAfter. This problem is reported in the "),a("a",{attrs:{href:"https://github.com/tsedio/tsed/issues/1793",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1793"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("With v7, adding more handlers for the same path and http verb is no longer possible. Also, this behavior is specific to Express and Koa but doesn't seem to be possible with Fastify and Hapi.js.")]),t._v(" "),a("h2",{attrs:{id:"jsonmapper-options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jsonmapper-options"}},[t._v("#")]),t._v(" JsonMapper options")]),t._v(" "),a("p",[t._v("Introduced recently in v6, the "),a("code",[t._v("jsonMapper.disableInsecureConstructor")]),t._v(" option let you remove an insecure behavior in the "),a("code",[t._v("deserialize")]),t._v(" function used by Ts.ED. This problem is described in "),a("a",{attrs:{href:"https://github.com/tsedio/tsed/issues/1942",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1942"),a("OutboundLink")],1),t._v(" issue.")]),t._v(" "),a("p",[t._v("This security issue is only available if you implement a constructor in your model like this:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyModel")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("assign")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// potential prototype pollution")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("p",[t._v("This constructor expose you app to a potential prototype pollution hacking!")]),t._v(" "),a("p",[t._v("Since v6, it's recommended to set "),a("code",[t._v("jsonMapper.disableInsecureConstructor")]),t._v(" to "),a("code",[t._v("true")]),t._v(". In v7, this option is by default to "),a("code",[t._v("true")]),t._v(",\nbut you can revert it, in order to allow you the possibility of migrating smoothly your application.")]),t._v(" "),a("h2",{attrs:{id:"converterservice"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#converterservice"}},[t._v("#")]),t._v(" ConverterService")]),t._v(" "),a("p",[t._v("The ConverterService finally bows out and gives way to its functional version widely used in v6. The migration is quite simple:")]),t._v(" "),a("p",[t._v("Before:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ConverterService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyClass")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n mapper"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ConverterService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSomething1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSomething2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Client "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br")])]),a("p",[t._v("After (v6/v7):")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" deserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyClass")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSomething1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSomething2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Client "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("h2",{attrs:{id:"platform-cache"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#platform-cache"}},[t._v("#")]),t._v(" Platform Cache")]),t._v(" "),a("p",[t._v("In v6, all decorators from "),a("code",[t._v("@tsed/platform-cache")]),t._v(" are re-exported under "),a("code",[t._v("@tsed/common")]),t._v(". But most of the time you don't use this part.")]),t._v(" "),a("p",[t._v("In v7, you need to install "),a("code",[t._v("@tsed/platform-cache")]),t._v(" as a dependency of your project and make the following replacements:")]),t._v(" "),a("div",{staticClass:"language-diff line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-diff"}},[a("code",[t._v('import {Injectable} from "@tsed/di";\n'),a("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[a("span",{pre:!0,attrs:{class:"token prefix deleted"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' import {UseCache} from "@tsed/common";\n')])]),a("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[a("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' import {UseCache} from "@tsed/platform-cache";\n')])]),t._v("\n@Injectable()\nexport class MyService {\n"),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" @UseCache()\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" method() {}\n")])]),t._v("}\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("h2",{attrs:{id:"async-hook-context"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#async-hook-context"}},[t._v("#")]),t._v(" Async hook context")]),t._v(" "),a("p",[t._v("The "),a("RouterLink",{attrs:{to:"/docs/request-context.html#asynchook-context"}},[a("code",[t._v("@tsed/async-hook-context")])]),t._v(" was introduced in v6 to support a context Request injectable everywhere in your code.")],1),t._v(" "),a("p",[t._v("The module is now stable and is directly integrated into the "),a("code",[t._v("@tsed/di")]),t._v(" module. The changes are as follows:")]),t._v(" "),a("div",{staticClass:"language-diff line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-diff"}},[a("code",[a("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[a("span",{pre:!0,attrs:{class:"token prefix deleted"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' import {Injectable, Controller} from "@tsed/di";\n')]),a("span",{pre:!0,attrs:{class:"token prefix deleted"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' import {InjectContext} from "@tsed/async-hook-context";\n')])]),a("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[a("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' import {Injectable, Controller, runInContext, InjectContext} from "@tsed/di";\n')])]),t._v('import {PlatformContext} from "@tsed/common";\n\n@Injectable()\nexport class CustomRepository {\n'),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" @InjectContext()\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" protected $ctx?: PlatformContext;\n")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" async findById(id: string) {\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' this.ctx?.logger.info("Where are in the repository");\n')])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" return {\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" id,\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" headers: this.$ctx?.request.headers\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" };\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" }\n")])]),t._v("}\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])]),a("p",[t._v("And in your test:")]),t._v(" "),a("div",{staticClass:"language-diff line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-diff"}},[a("code",[a("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[a("span",{pre:!0,attrs:{class:"token prefix deleted"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' import {runInContext} from "@tsed/async-hook-context";\n')])]),a("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[a("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' import {runInContext} from "@tsed/di";\n')])]),t._v('import {PlatformContext} from "@tsed/common";\nimport {CustomRepository} from "./CustomRepository";\n\ndescribe("CustomRepository", () => {\n'),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" beforeEach(() => PlatformTest.create());\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" afterEach(() => PlatformTest.reset());\n")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' it("should run method with the ctx", async () => {\n')]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" const ctx = PlatformTest.createRequestContext();\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" const service = PlatformTest.get(CustomRepository);\n")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" ctx.request.headers = {\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' "x-api": "api"\n')]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" };\n")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' const result = await runInContext(ctx, () => service.findById("id"));\n')])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token unchanged"}},[a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" expect(result).toEqual({\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' id: "id",\n')]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" headers: {\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(' "x-api": "api"\n')]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" }\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" });\n")]),a("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token line"}},[t._v(" });\n")])]),t._v("});\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br")])]),a("h2",{attrs:{id:"removed-packages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#removed-packages"}},[t._v("#")]),t._v(" Removed packages")]),t._v(" "),a("p",[t._v("The following Ts.ED packages are removed:")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("@tsed/graphql")]),t._v(": Use "),a("code",[t._v("@tsed/typegraphql")]),t._v(" instead.")]),t._v(" "),a("li",[a("code",[t._v("@tsed/seq")]),t._v(": Use the "),a("code",[t._v("@tsed/logger-seq")]),t._v(" instead.")]),t._v(" "),a("li",[a("code",[t._v("@tsed/aws")]),t._v(": Use "),a("code",[t._v("@tsed/serverless-http")]),t._v(" instead.")])]),t._v(" "),a("h2",{attrs:{id:"other-breaking-changes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#other-breaking-changes"}},[t._v("#")]),t._v(" Other breaking changes")]),t._v(" "),a("h3",{attrs:{id:"tsed-core"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-core"}},[t._v("#")]),t._v(" @tsed/core")]),t._v(" "),a("ul",[a("li",[t._v("Remove "),a("code",[t._v("deepExtends")]),t._v(" util. Use "),a("code",[t._v("deepMerge")]),t._v(" instead.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-common"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-common"}},[t._v("#")]),t._v(" @tsed/common")]),t._v(" "),a("ul",[a("li",[t._v("Remove Node.js 12 support.")]),t._v(" "),a("li",[t._v("Rename "),a("code",[t._v("useCtxHandler")]),t._v(" function. Use "),a("code",[t._v("useContextHandler")]),t._v(" instead. It's an internal feature used by official Ts.ED plugin.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("HttpsServer")]),t._v(" symbol and use "),a("code",[t._v("Https.Server")]),t._v(" from "),a("code",[t._v("https")]),t._v(" module as injectable type instead.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("HttpServer")]),t._v(" symbol and use "),a("code",[t._v("Http.Server")]),t._v(" from "),a("code",[t._v("https")]),t._v(" module as injectable type instead.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("PropertyMetadata")]),t._v(". Use "),a("code",[t._v("JsonEntityStore")]),t._v(" instead from "),a("code",[t._v("@tsed/schema")]),t._v(".")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("UseParam(paramType, options)")]),t._v(" signature. Use "),a("code",[t._v("UseParam({paramType: 'BODY', ...options})")]),t._v(" signature instead.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("ResponseData")]),t._v(" decorator. Use "),a("code",[t._v("@Context() $ctx: Context")]),t._v(" then "),a("code",[t._v("$ctx.data")]),t._v(".")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("EndpointInfo")]),t._v(" decorator. Use "),a("code",[t._v("@context() $ctx: Context")]),t._v(" then "),a("code",[t._v("$ctx.endpoint")]),t._v(" to retrieve endpoint information.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("Remove GlobalAcceptMimesMiddleware")]),t._v(" and "),a("code",[t._v("AcceptMimesMiddleware")]),t._v(". Use "),a("code",[t._v("PlatformAcceptMimesMiddleware")]),t._v(" instead.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-di"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-di"}},[t._v("#")]),t._v(" @tsed/di")]),t._v(" "),a("ul",[a("li",[t._v("Remove "),a("code",[t._v("registerFactory")]),t._v(". Use "),a("code",[t._v("registerProvider")]),t._v(" instead.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("loadInjector")]),t._v(" util. Use "),a("code",[t._v("injector.load(container, module)")]),t._v(" instead.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-schema"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-schema"}},[t._v("#")]),t._v(" @tsed/schema")]),t._v(" "),a("ul",[a("li",[t._v("Remove "),a("code",[t._v("IAuth")]),t._v(" interface on "),a("code",[t._v("AuthOptions")]),t._v(". Use "),a("code",[t._v("@Security()")]),t._v(" and "),a("code",[t._v("@Returns()")]),t._v(" instead to configuration authorization option for swagger documentation.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-platform-middlewares"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-platform-middlewares"}},[t._v("#")]),t._v(" @tsed/platform-middlewares")]),t._v(" "),a("ul",[a("li",[t._v("Remove "),a("code",[t._v("IMiddleware")]),t._v(". Use "),a("code",[t._v("MiddlewareMethods")]),t._v(" instead.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-platform-express"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-platform-express"}},[t._v("#")]),t._v(" @tsed/platform-express")]),t._v(" "),a("ul",[a("li",[t._v("Remove "),a("code",[t._v("CaseSensitive")]),t._v(", "),a("code",[t._v("MergeParams")]),t._v(", "),a("code",[t._v("RouterSettings")]),t._v(" and "),a("code",[t._v("Strict")]),t._v(" decorators. Those decorators no longer make sense with Ts.ED's Virtual Router.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-components-scan"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-components-scan"}},[t._v("#")]),t._v(" @tsed/components-scan")]),t._v(" "),a("ul",[a("li",[t._v("Remove importComponent function.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-oidc-provider"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-oidc-provider"}},[t._v("#")]),t._v(" @tsed/oidc-provider")]),t._v(" "),a("ul",[a("li",[t._v("Default value for "),a("code",[t._v("oidc.path")]),t._v(" is "),a("code",[t._v("/oidc")]),t._v(".")])]),t._v(" "),a("h3",{attrs:{id:"tsed-passport"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-passport"}},[t._v("#")]),t._v(" @tsed/passport")]),t._v(" "),a("ul",[a("li",[t._v("Remove "),a("code",[t._v("IProtocol")]),t._v(". Use "),a("code",[t._v("ProtocolMethods")]),t._v(" instead.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-mikro-orm"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-mikro-orm"}},[t._v("#")]),t._v(" @tsed/mikro-orm")]),t._v(" "),a("ul",[a("li",[t._v("Remove "),a("code",[t._v("MikroOrmRegistry.closeConnections()")]),t._v(". Use "),a("code",[t._v("MikroOrmRegistry.clear()")]),t._v(" instead.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("MikroOrmRegistry.createConnection()")]),t._v(". Use "),a("code",[t._v("MikroOrmRegistry.register()")]),t._v(" instead.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("DBContext.getContext()")]),t._v(". Use "),a("code",[t._v("DBContext.entries()")]),t._v(" instead.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("TransactionOptions.connectionName")]),t._v(" property. Use "),a("code",[t._v("TransactionOptions.contextName")]),t._v(" instead.")]),t._v(" "),a("li",[t._v("Remove "),a("code",[t._v("@Connection")]),t._v(" decorator. Use "),a("code",[t._v("@Orm")]),t._v(" instead.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-mongoose"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-mongoose"}},[t._v("#")]),t._v(" @tsed/mongoose")]),t._v(" "),a("ul",[a("li",[t._v("Remove "),a("code",[t._v("MongooseVirtualRefOptions.type")]),t._v(". Use Remove "),a("code",[t._v("MongooseVirtualRefOptions.ref")]),t._v(" instead.")])]),t._v(" "),a("h3",{attrs:{id:"tsed-terminus"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tsed-terminus"}},[t._v("#")]),t._v(" @tsed/terminus")]),t._v(" "),a("ul",[a("li",[t._v("Remove BeforeShutdown, OnSignal, OnShutdown, OnSendFailureDuringShutdown decorators. Use followings instead "),a("code",[t._v("$beforeShutdown")]),t._v(", "),a("code",[t._v("$onSignal")]),t._v(", "),a("code",[t._v("$onSignal")]),t._v(", "),a("code",[t._v("$onShutdown")]),t._v(" or "),a("code",[t._v("$onSendFailureDuringShutdown")]),t._v(".")])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/46.43c836a9.js b/assets/js/46.43c836a9.js new file mode 100644 index 00000000000..198e0e42e7f --- /dev/null +++ b/assets/js/46.43c836a9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{796:function(s,t,a){"use strict";a.r(t);var n=a(1),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"create-application-from-scratch"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-application-from-scratch"}},[s._v("#")]),s._v(" Create application from scratch")]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("You can get the latest version of Ts.ED using the following npm command:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Yarn"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" -D typescript @types/express\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" express@4 @tsed/core @tsed/di @tsed/common @tsed/schema @tsed/json-mapper @tsed/exceptions @tsed/platform-express @types/node @types/multer\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Npm"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev typescript @types/express\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save express@4 @tsed/core @tsed/di @tsed/common @tsed/schema @tsed/json-mapper @tsed/exceptions @tsed/platform-express @types/node @types/multer\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("The following modules also are recommended:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Yarn"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" body-parser compression cookie-parser method-override\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" -D ts-node nodemon\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Npm"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save body-parser compression cookie-parser method-override\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev ts-node nodemon\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])])],1)],1),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("It is really important to keep the same version for all "),a("code",[s._v("@tsed/*")]),s._v(" (excepted @tsed/logger) packages.\nTo prevent errors, fix the version for each Ts.ED packages:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"dependencies"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.10.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.10.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.10.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.10.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/plaftorm-express"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.10.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.10.0"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])])]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Ts.ED requires Node >= 10, Express >= 4, TypeScript >= 4.0.2 and\nthe "),a("code",[s._v("experimentalDecorators")]),s._v(", "),a("code",[s._v("emitDecoratorMetadata")]),s._v(", "),a("code",[s._v("types")]),s._v(" and "),a("code",[s._v("lib")]),s._v(" compilation\noptions in your "),a("code",[s._v("tsconfig.json")]),s._v(" file.")])]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"compilerOptions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"baseUrl"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../../docs/snippets"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"outDir"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./dist"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"target"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"es2018"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"lib"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"es7"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"dom"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"esnext.asynciterable"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"typeRoots"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./node_modules/@types"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"module"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"commonjs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"moduleResolution"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"node"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"experimentalDecorators"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"emitDecoratorMetadata"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"sourceMap"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"declaration"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"allowSyntheticDefaultImports"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"include"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./src/**/*.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"exclude"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"node_modules"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./public"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"dist"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("You can copy this example of "),a("code",[s._v("package.json")]),s._v(" to develop your application:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/basic-example"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"version"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Here an example to configure your server and how to create your first controller."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"main"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"src/index.js"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"clean"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("\"rimraf '{src,test}/**/*.{js,js.map}'\"")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"build"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yarn tsc"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yarn clean && yarn test:lint && yarn test:coverage"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test:unit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cross-env NODE_ENV=test mocha"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test:coverage"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cross-env NODE_ENV=test nyc mocha"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test:lint"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tslint --project tsconfig.json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"test:lint:fix"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tslint --project tsconfig.json --fix"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"travis:deploy-once"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"travis-deploy-once"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"travis:coveralls"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nyc report --reporter=text-lcov | coveralls"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tsc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tsc --project tsconfig.json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tsc:w"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"tsc --project tsconfig.json -w"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"start"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nodemon --watch \\"src/**/*.ts\\" --ignore \\"node_modules/**/*\\" --exec ts-node src/index.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"start:prod"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cross-env NODE_ENV=production node dist/index.js"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"docker:build"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yarn build && docker-compose build"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"deploy"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"exit 0"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"author"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"license"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MIT"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"dependencies"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.11.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/swagger-schema-official"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.0.21"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"body-parser"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.19.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cors"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.8.5"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.7.4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"concurrently"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.3.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.4.5"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"express"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.17.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^3.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"uuid"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"8.3.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"cross-env"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7.0.2"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"devDependencies"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/chai"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.2.12"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/chai-as-promised"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7.1.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/cors"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.8.6"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/express"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.17.7"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/http-proxy"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.17.2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/mocha"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"8.0.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/node"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"14.11.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/request-promise"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.1.45"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/sinon"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"9.0.8"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/sinon-chai"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3.2.4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"@types/supertest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2.0.10"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.2.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"chai-as-promised"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"7.1.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"concurrently"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5.3.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"mocha"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"8.1.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"nodemon"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1.19.4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"nyc"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"15.1.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"rimraf"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"sinon"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"9.0.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"sinon-chai"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3.5.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ts-node"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"9.0.0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"tslint"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"6.1.3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"typescript"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4.2.3"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br")])]),a("p",[s._v("Then use the command "),a("code",[s._v("npm install && npm start")]),s._v(" to start your server.")])]),s._v(" "),a("h2",{attrs:{id:"create-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-server"}},[s._v("#")]),s._v(" Create server")]),s._v(" "),a("p",[s._v("To use Ts.ED now, use the "),a("RouterLink",{attrs:{to:"/docs/platform-api.html"}},[s._v("Platform API")]),s._v(" to create an application. Platform API gives an abstraction layer\nbetween your code written with Ts.ED and the Express code. It means a large part of your code\nisn't coupled with Express itself, and can be used with another Platform like Koa.")],1),s._v(" "),a("p",[s._v("Ts.ED provides a "),a("ApiSymbolName",[s._v("Configuration")]),s._v(" decorator to declare a new application.\nJust create a "),a("code",[s._v("server.ts")]),s._v(" in your root project :")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" compress "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" cookieParser "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" methodOverride "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n acceptMimes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n middlewares"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cookieParser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("compress")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("methodOverride")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" app"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$onInit()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$beforeRoutesInit()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onReady")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$onReady"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])]),a("p",[s._v("To customize the server settings see "),a("RouterLink",{attrs:{to:"/getting-started/configuration.html"}},[s._v("Configuration")]),s._v(" page.")],1),s._v(" "),a("p",[s._v("Finally, create an "),a("code",[s._v("index.ts")]),s._v(" file to bootstrap your server, on the same level of the "),a("code",[s._v("Server.ts")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Start server..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// extra settings")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("listen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("debug")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Server initialized"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("catch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("er"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("p",[s._v("You should have this directory tree:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v(".\n├── src\n│ ├── controllers\n│ ├── services\n│ ├── middlewares\n│ ├── index.ts\n│ └── Server.ts\n└── package.json\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("By default Ts.ED loads automatically Services, Controllers and Middlewares in specific directories.\nThis behavior can be changed by editing the "),a("RouterLink",{attrs:{to:"/docs/configuration.html"}},[s._v("componentsScan configuration")]),s._v(".")],1)])],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/47.de1b8519.js b/assets/js/47.de1b8519.js new file mode 100644 index 00000000000..7046eaec66c --- /dev/null +++ b/assets/js/47.de1b8519.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{795:function(t,e,s){"use strict";s.r(e);var a=s(1),r=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"create-a-new-project"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-a-new-project"}},[t._v("#")]),t._v(" Create a new project")]),t._v(" "),s("p",[t._v("To scaffold the project with the CLI, run the following commands. This will create a new project directory,\nand populate the directory with the initial core Ts.ED files and supporting modules, creating a conventional base structure for your project.\nCreating a new project with the CLI is recommended for first-time users.")]),t._v(" "),s("div",{staticClass:"language-shell line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -g @tsed/cli\ntsed init "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("See our "),s("a",{attrs:{href:"https://cli.tsed.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("CLI website"),s("OutboundLink")],1),t._v(" for more details on the CLI commands.")])]),t._v(" "),s("p",[t._v("You can select different options to generate your first application:")]),t._v(" "),s("ul",[s("li",[t._v("The web framework: Express.js / Koa.js")]),t._v(" "),s("li",[t._v("The convention project architecture: Ts.ED or Feature")]),t._v(" "),s("li",[t._v("The convention file styling: Ts.ED or Angular")]),t._v(" "),s("li",[t._v("The features:\n"),s("ul",[s("li",[t._v("Graphql,")]),t._v(" "),s("li",[t._v("Database,")]),t._v(" "),s("li",[t._v("Passport.js,")]),t._v(" "),s("li",[t._v("Socket.io,")]),t._v(" "),s("li",[t._v("Swagger,")]),t._v(" "),s("li",[t._v("OIDC,")]),t._v(" "),s("li",[t._v("Testing (Jest/Mocha),")]),t._v(" "),s("li",[t._v("Linter (Eslint, prettier),")]),t._v(" "),s("li",[t._v("Bundler (Babel/Webpack),")])])]),t._v(" "),s("li",[t._v("The Package manager: NPM, Yarn or PNPM")])]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("By default, it's recommended to select the following options: Express, Ts.ED (convention), Swagger, Jest and Eslint + prettier.")])]),t._v(" "),s("figure",[s("img",{staticStyle:{"max-height":"400px",padding:"0"},attrs:{src:"/getting-started/cli-selected-features.png"}})]),t._v(" "),s("p",[t._v("When all options are selected, the CLI will generate all files.\nWhen it's done, run one of this command:")]),t._v(" "),s("div",{staticClass:"language-sh line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" start\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" start\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("pnpm")]),t._v(" start\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("figure",[s("img",{staticStyle:{"max-height":"400px",padding:"0"},attrs:{src:"/getting-started/server-start.png"}})]),t._v(" "),s("h2",{attrs:{id:"update-dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#update-dependencies"}},[t._v("#")]),t._v(" Update dependencies")]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("If you have to upgrade Ts.ED dependencies, keep in mind this point:")]),t._v(" "),s("p",[t._v("It's really important to keep the same version for all "),s("code",[t._v("@tsed/*")]),t._v(" (excepted @tsed/logger) packages.\nTo prevent errors, fix the version for each Ts.ED packages:")]),t._v(" "),s("div",{staticClass:"language-json line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dependencies"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/common"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/di"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/core"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/exceptions"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/plaftorm-express"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/swagger"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7.0.0"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br")])])]),t._v(" "),s("h2",{attrs:{id:"project-examples"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#project-examples"}},[t._v("#")]),t._v(" Project examples")]),t._v(" "),s("p",[t._v("Alternatively, you can check out one of these projects:")]),t._v(" "),s("Projects",{attrs:{type:"projects"}}),t._v(" "),s("p",[t._v("If none of previous solutions are satisfying maybe you are in these cases:")]),t._v(" "),s("ul",[s("li",[s("RouterLink",{attrs:{to:"/getting-started/migration-from-v6.html"}},[t._v("I want to migrate my application from Ts.ED v6")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/getting-started/migrate-from-express.html"}},[t._v("I want to migrate my application from Express.js")])],1)]),t._v(" "),s("h2",{attrs:{id:"what-s-next"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#what-s-next"}},[t._v("#")]),t._v(" What's next?")]),t._v(" "),s("p",[t._v("Now you can follow one of these links to develop your new application:")]),t._v(" "),s("ul",[s("li",[s("RouterLink",{attrs:{to:"/getting-started/create-your-first-controller.html"}},[t._v("Create your first controller")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/docs/configuration.html"}},[t._v("Change server configuration")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/getting-started/configuration.html#load-configuration-from-file"}},[t._v("Load configuration from files")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/docs/platform-api.html"}},[t._v("What is the Platform API")])],1)])],1)}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/48.07722d5f.js b/assets/js/48.07722d5f.js new file mode 100644 index 00000000000..d714dae5325 --- /dev/null +++ b/assets/js/48.07722d5f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{793:function(t,e,o){"use strict";o.r(e);var i=o(1),n=Object(i.a)({},(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"license"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[t._v("#")]),t._v(" License")]),t._v(" "),o("p",[t._v("The MIT License (MIT)")]),t._v(" "),o("p",[t._v("Copyright (c) 2016 Romain Lenzotti")]),t._v(" "),o("p",[t._v('Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:')]),t._v(" "),o("p",[t._v("The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.")]),t._v(" "),o("p",[t._v('THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.')])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/49.b6d0578a.js b/assets/js/49.b6d0578a.js new file mode 100644 index 00000000000..2b5aec53c9b --- /dev/null +++ b/assets/js/49.b6d0578a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{794:function(t,e,s){"use strict";s.r(e);var o=s(1),r=Object(o.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey},scopedSlots:t._u([{key:"hero-brand",fn:function(){return[s("p",[s("span",{staticClass:"block sm:inline mb-10 sm:mb-0 sm:text-bold text-7xl sm:text-5xl font-medium"},[s("span",{staticClass:"text-blue"},[t._v("Ts")]),t._v(".ED")]),t._v(" Framework"),s("br"),t._v(" "),s("small",[t._v("for "),s("a",{staticClass:"text-darker-gray"},[t._v("Node.js")]),t._v(" and "),s("a",{staticClass:"text-darker-gray"},[t._v("TypeScript")])])])]},proxy:!0},{key:"hero-slogan",fn:function(){return[s("p",[t._v("Build your awesome server-side "),s("strong",[t._v("application.")]),t._v(" "),s("WordsSlider",[t._v("#Decorators, #Rest API, #DI, #Controller")])],1)]},proxy:!0},{key:"hero-content",fn:function(){return[s("img",{staticClass:"animate-hero",attrs:{src:"/hero-bg.svg"}})]},proxy:!0},{key:"testimonial-title",fn:function(){return[s("p",[t._v("Why "),s("span",{staticClass:"text-blue"},[t._v("Ts")]),t._v(".ED?")])]},proxy:!0},{key:"testimonial-content",fn:function(){return[s("p",[t._v("Ts.ED is a Node.js Framework on top of Express/Koa.js. Written in Typescript, it helps you build your server-side application easily and quickly.\nIf you want to start a complete out-of-the-box project or fully customize it yourself, Ts.ED will guide you there !")])]},proxy:!0}])},[s("HomeBody")],1)}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/5.ad3e100b.js b/assets/js/5.ad3e100b.js new file mode 100644 index 00000000000..ff7e21fa811 --- /dev/null +++ b/assets/js/5.ad3e100b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{735:function(s,t,a){s.exports=a.p+"assets/img/middleware-in-sequence.b2978130.svg"},745:function(s,t,a){s.exports=a.p+"assets/img/client-controllers.6d7f6640.png"},762:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h1",{attrs:{id:"controllers"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#controllers"}},[s._v("#")]),s._v(" Controllers")]),s._v(" "),n("p",[s._v("Controllers are responsible for handling incoming "),n("strong",[s._v("requests")]),s._v(" and returning "),n("strong",[s._v("responses")]),s._v(" to the client.")]),s._v(" "),n("figure",[n("img",{staticStyle:{"max-height":"300px",padding:"10px",background:"white"},attrs:{src:a(745)}})]),s._v(" "),n("p",[s._v("A controller is here to handle a specific request for a given HTTP verb and Route. The routing service is responsible\nfor\nmanaging and dispatching request to the right Controller.")]),s._v(" "),n("p",[s._v("In order to create a basic controller, we use classes and "),n("strong",[s._v("decorators")]),s._v(". Decorators associate classes with required\nmetadata and enable Ts.ED to create a routing map.")]),s._v(" "),n("h2",{attrs:{id:"routing"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#routing"}},[s._v("#")]),s._v(" Routing")]),s._v(" "),n("h3",{attrs:{id:"usage"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),n("p",[s._v("In the following example we'll use the "),n("ApiSymbolName",[s._v("Controller")]),s._v(" decorator which is required to define a basic controller.\nWe'll specify a path for the controller which will be used by the routing mechanism to create your routes.")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"This action returns all calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br")])]),n("p",[s._v("The "),n("ApiSymbolName",[s._v("Get")]),s._v(" decorator before the "),n("code",[s._v("findAll()")]),s._v(" method tells Ts.ED to create an endpoint for this particular route path and\nmap every corresponding request to this handler. Since we've declared a prefix for every route ("),n("code",[s._v("/calendars")]),s._v("), Ts.ED\nwill map every "),n("code",[s._v("GET /calendars")]),s._v(" request to this method.")],1),s._v(" "),n("h3",{attrs:{id:"decorators"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[s._v("#")]),s._v(" Decorators")]),s._v(" "),n("p",[s._v("Ts.ED provides a decorator for each HTTP verb which can be used to handle a request:")]),s._v(" "),n("ApiList",{attrs:{query:"tags:decorator AND tags:httpMethod"}}),s._v(" "),n("p",[s._v("Other decorators are provided to describe your route with OpenSpec, adding middlewares, adding some constraints or\nadding headers:")]),s._v(" "),n("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('operation') && !status.includes('input') && !status.includes('httpMethod')"}}),s._v(" "),n("h3",{attrs:{id:"configuration"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[s._v("#")]),s._v(" Configuration")]),s._v(" "),n("p",[s._v("You can add your controller by adding glob pattern on "),n("code",[s._v("mount")]),s._v(" ServerSettings attributes or by importing manually your\ncontroller.\nHere an example:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CalendarCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/CalendarCtrl"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("./controllers/*.ts")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// using componentScan")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Using manual import")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/manual"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("CalendarCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("h3",{attrs:{id:"create-multiple-versions-of-your-api"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#create-multiple-versions-of-your-api"}},[s._v("#")]),s._v(" Create multiple versions of your API")]),s._v(" "),n("p",[s._v("As you have seen in the previous example, the "),n("code",[s._v("mount")]),s._v(" attribute is an object that let you provide the global endpoint\nfor all your controllers under the "),n("code",[s._v("controllers")]),s._v(" folder.")]),s._v(" "),n("p",[s._v("You can add more configurations to mount different endpoints associated to a folder. Here is another configuration\nexample:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest/v0"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/v0/**/*.ts"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest/v1"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/v1/**/*.ts"')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("h3",{attrs:{id:"async-and-promise"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#async-and-promise"}},[s._v("#")]),s._v(" Async and Promise")]),s._v(" "),n("p",[s._v("Ts.ED works well with Promise and "),n("code",[s._v("async")]),s._v(" function.\nEvery async function has to return a "),n("code",[s._v("Promise")]),s._v(".\nThis means that you can return a deferred value that Ts.ED will be able to resolve by itself.")]),s._v(" "),n("p",[s._v("Let's see an example of this:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PathParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Calendar")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Calendar"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br")])]),n("h3",{attrs:{id:"observable-stream-buffer"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#observable-stream-buffer"}},[s._v("#")]),s._v(" Observable/Stream/Buffer")]),s._v(" "),n("p",[s._v("Also, Ts.ED support function that return "),n("code",[s._v("Observable")]),s._v(", "),n("code",[s._v("Stream")]),s._v(" or "),n("code",[s._v("Buffer")]),s._v(".")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformResponse"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" filedirname "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"filedirname"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("createReadStream"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ReadStream"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"fs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Observable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("of")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"rxjs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// FIXME remove when esm is ready")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" rootDir"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("filedirname")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("KindOfResponseCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/observable"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("observable")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Observable"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("of")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/stream"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("stream")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ReadStream "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("createReadStream")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("rootDir "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/response.txt"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/buffer"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("buffer")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Res")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformResponse"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Buffer "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// Set attachment: res.attachment("filename")')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// Set contentType: res.contentType("plain/text");')]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" Buffer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("from")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br")])]),n("h3",{attrs:{id:"axios-response"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#axios-response"}},[s._v("#")]),s._v(" Axios response")]),s._v(" "),n("p",[s._v("Sometime, you just want call another API to proxy a webservice.\nAxios is an excellent library to call API in Node.js and Ts.ED is able to handle Axios response to wrap it into an\nExpress.js response.")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Axios "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"axios"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("IncomingMessage"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/proxy"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ProxyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("proxy")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"path"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" path"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" Axios"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("https://cerevoice.s3.amazonaws.com/")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("path"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n responseType"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stream"')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// is equivalent to doing that")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("proxy2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Res")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"path"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" path"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" IncomingMessage "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" Axios"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("https://cerevoice.s3.amazonaws.com/")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("path"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n responseType"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stream"')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("set")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("headers"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("status")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("status"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br")])]),n("h3",{attrs:{id:"multiple-endpoints-single-method"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#multiple-endpoints-single-method"}},[s._v("#")]),s._v(" Multiple endpoints, single method")]),s._v(" "),n("p",[s._v("Ts.ED lets you define multiple endpoints on the same method, with the same verb like "),n("code",[s._v("GET")]),s._v(" or "),n("code",[s._v("POST")]),s._v(", or with another\nverb like this:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/alias/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id/complexAlias"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Return something"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])]),n("h3",{attrs:{id:"routes-order"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#routes-order"}},[s._v("#")]),s._v(" Routes order")]),s._v(" "),n("p",[s._v("Be aware that routes registration order (methods order in classes) matters.\nAssume that you have a route that allows getting a calendar by its path ("),n("code",[s._v("/calendars/:id")]),s._v(").\nIf you register another endpoint below the mentioned one, which basically returns all calendars at once (calendars),\nthe request will never hit the actual handler because all path parameters are optional.")]),s._v(" "),n("p",[s._v("See the following example:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PathParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarsController")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("This action returns a #")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v(" calendar")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// This endpoint will never get called")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// because the "/calendars" request is going')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// to be captured by the "/calendars/:id" route handler')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br")])]),n("p",[s._v("In order to avoid such side-effects, simply move "),n("code",[s._v("findAll()")]),s._v(" method above "),n("code",[s._v("findOne()")]),s._v(".")]),s._v(" "),n("h2",{attrs:{id:"request"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#request"}},[s._v("#")]),s._v(" Request")]),s._v(" "),n("h3",{attrs:{id:"decorators-2"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#decorators-2"}},[s._v("#")]),s._v(" Decorators")]),s._v(" "),n("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('operation') && status.includes('input')"}}),s._v(" "),n("h3",{attrs:{id:"input-parameters"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#input-parameters"}},[s._v("#")]),s._v(" Input parameters")]),s._v(" "),n("p",[s._v("Getting parameters from Request can be done by using the following decorators:")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("Decorator")]),s._v(" "),n("th",[s._v("Validation")]),s._v(" "),n("th",[s._v("Json Mapper")]),s._v(" "),n("th",[s._v("Configurable")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("HeaderParams")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("yes")])]),s._v(" "),n("tr",[n("td",[s._v("BodyParams")]),s._v(" "),n("td",[s._v("yes")]),s._v(" "),n("td",[s._v("yes")]),s._v(" "),n("td",[s._v("yes")])]),s._v(" "),n("tr",[n("td",[s._v("RawBodyParams")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")])]),s._v(" "),n("tr",[n("td",[s._v("PathParams")]),s._v(" "),n("td",[s._v("yes")]),s._v(" "),n("td",[s._v("yes")]),s._v(" "),n("td",[s._v("yes")])]),s._v(" "),n("tr",[n("td",[s._v("RawPathParams")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")])]),s._v(" "),n("tr",[n("td",[s._v("QueryParams")]),s._v(" "),n("td",[s._v("yes")]),s._v(" "),n("td",[s._v("yes")]),s._v(" "),n("td",[s._v("yes")])]),s._v(" "),n("tr",[n("td",[s._v("RawQueryParams")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")])]),s._v(" "),n("tr",[n("td",[s._v("Session")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("yes")])]),s._v(" "),n("tr",[n("td",[s._v("Cookies")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("yes")])]),s._v(" "),n("tr",[n("td",[s._v("Locals")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("yes")])]),s._v(" "),n("tr",[n("td",[s._v("Context")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")]),s._v(" "),n("td",[s._v("no")])])])]),s._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),n("p",[s._v("Some decorators run automatically "),n("code",[s._v("validator")]),s._v(" and "),n("code",[s._v("json-mapper")]),s._v(". This behavior can be changed (if the decorator is flagged as configurable)\nlike this:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("HeaderParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expression"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x-header"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" useValidator"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" useMapper"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])])]),s._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"Example"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CalendarModel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/CalendarModel"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PayloadModel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/PayloadModel"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updatePayload")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PayloadModel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updateCalendar")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"calendar"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" calendar"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CalendarModel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"calendar"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updatePayloads")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PayloadModel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payloads"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PayloadModel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payloads"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" payloads"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" payloads"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updateCalendars")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CalendarModel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" calendars"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CalendarModel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" calendars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" calendars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"Body string"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updatePayload")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"Body with Array"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updatePayload")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"Body with model"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/products"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ProductsCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updatePayload")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" products"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Product"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Product"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"products"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" products"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" products"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"Inline validation"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MinLength"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updatePayload")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])])])],1),s._v(" "),n("p",[s._v("Finally, "),n("ApiSymbolName",[s._v("BodyParams")]),s._v(" accepts to give a "),n("ApiSymbolName",[s._v("ParamOptions")]),s._v(" object as parameter to change the decorator behavior:")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyController")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expression"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" useMapper"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" body"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" body"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" body"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),n("p",[n("ApiSymbolName",[s._v("QueryParams")]),s._v(" decorator accept a model to transform "),n("code",[s._v("Express.request.query")]),s._v(" plain object to a Class.")],1),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" QueryParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Required"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MinLength"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("QueryParamsModel")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n duration"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("QueryController")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" params"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" QueryParamsModel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"locale"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" locale"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br")])])]),s._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[s._v("Since v6.0.0, use "),n("code",[s._v("any")]),s._v(" as type for a body parameter, will be translated as type "),n("code",[s._v("Object")]),s._v(". It means, if you\nuse "),n("code",[s._v("@tsed/ajv")]),s._v(", the validation\nwill fail if you send a different type as expected in the payload.")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Any"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/any"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AnyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updatePayload1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// accept only Object")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// breaking change with v5")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updatePayload2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Any")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// accept all types")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("updatePayload3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// accept array of any types")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"payload"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br")])]),n("p",[s._v("Add "),n("ApiSymbolName",[s._v("Any")]),s._v(" decorator to fix the issue.")],1)]),s._v(" "),n("h3",{attrs:{id:"raw-body"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#raw-body"}},[s._v("#")]),s._v(" Raw Body "),n("Badge",{attrs:{text:"v6.20.0+"}})],1),s._v(" "),n("p",[n("ApiSymbolName",[s._v("RawBodyParams")]),s._v(" decorator provides you quick access to the "),n("code",[s._v("request.rawBody")]),s._v(":")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RawBodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("RawBodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Buffer"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" payload"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("toString")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"utf8"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[s._v("There is no performed input validation and deserialization when using the "),n("ApiSymbolName",[s._v("RawBodyParams")]),s._v("!")],1)]),s._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[s._v("To use @RawBodyParams() properly, you have to remove bodyParser add on "),n("code",[s._v("$beforeRoutesInit")]),s._v(".")]),s._v(" "),n("div",{staticClass:"language-diff line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-diff"}},[n("code",[s._v("\n@Configuration({\n"),n("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[n("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" rawBody: true,\n")]),n("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" middlewares: [\n")]),n("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" {use: 'json-parser'},\n")]),n("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" {use: 'urlencoded-parser', options: {extended: true})\n")]),n("span",{pre:!0,attrs:{class:"token prefix inserted"}},[s._v("+")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" ]\n")])]),s._v("})\nexport class Server {\n"),n("span",{pre:!0,attrs:{class:"token unchanged"}},[n("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[s._v(" ")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" @Inject()\n")]),n("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[s._v(" ")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" protected app: PlatformApplication;\n")])]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token unchanged"}},[n("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[s._v(" ")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" $beforeRoutesInit() {\n")])]),n("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[n("span",{pre:!0,attrs:{class:"token prefix deleted"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" this.app\n")]),n("span",{pre:!0,attrs:{class:"token prefix deleted"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" .use(bodyParser.json())\n")]),n("span",{pre:!0,attrs:{class:"token prefix deleted"}},[s._v("-")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" .use(bodyParser.urlencoded({extended: true}));\n")])]),n("span",{pre:!0,attrs:{class:"token unchanged"}},[n("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[s._v(" ")]),n("span",{pre:!0,attrs:{class:"token line"}},[s._v(" }\n")])]),s._v("}\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br")])])]),s._v(" "),n("h2",{attrs:{id:"integer-parameter"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#integer-parameter"}},[s._v("#")]),s._v(" Integer parameter")]),s._v(" "),n("p",[s._v("The "),n("ApiSymbolName",[s._v("Integer")]),s._v(" decorator is used to set integer type for integral numbers.")],1),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ExampleCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("OfInteger")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" list"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" list"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])]),n("h3",{attrs:{id:"headers"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#headers"}},[s._v("#")]),s._v(" Headers")]),s._v(" "),n("p",[n("ApiSymbolName",[s._v("HeaderParams")]),s._v(" decorator provides you quick access to the "),n("code",[s._v("request.get()")]),s._v(":")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("HeaderParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("HeaderParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x-token"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" token"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"token"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" token"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" token"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[s._v("By default, the validator/json-mapper aren't executed on header parameters.\nYou have to add extra parameter to enable it:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("HeaderParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expression"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x-header"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" useValidator"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" useMapper"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])])]),s._v(" "),n("h3",{attrs:{id:"session-cookies-locals-context"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#session-cookies-locals-context"}},[s._v("#")]),s._v(" Session/Cookies/Locals/Context")]),s._v(" "),n("p",[s._v("For the session, cookies, locals or context data attached on the request, it works the same way as seen before. Use the\nfollowing decorators to get the data:")]),s._v(" "),n("ul",[n("li",[n("ApiSymbolName",[s._v("Session")])],1),s._v(" "),n("li",[n("ApiSymbolName",[s._v("Cookies")])],1),s._v(" "),n("li",[n("ApiSymbolName",[s._v("Locals")])],1),s._v(" "),n("li",[n("ApiSymbolName",[s._v("Context")])],1)]),s._v(" "),n("h4",{attrs:{id:"locals"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#locals"}},[s._v("#")]),s._v(" Locals")]),s._v(" "),n("p",[n("ApiSymbolName",[s._v("Locals")]),s._v(" is a response property used by third-party like template engine to render a page by the server.\nIf you attach data on it, template engine will use it to render the template.")],1),s._v(" "),n("p",[s._v("Here is an example:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Locals"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Middleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UseBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("View"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-views"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Middleware")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("LocalsMiddleware")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Locals")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" locals"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// set some on locals")]),s._v("\n locals"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseBefore")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("LocalsMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("View")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"home.ejs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// will use locals and returned data to render the page")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Locals")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" user"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n description"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello world"')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br")])]),n("h4",{attrs:{id:"context"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#context"}},[s._v("#")]),s._v(" Context")]),s._v(" "),n("p",[s._v("See our dedicated page on "),n("RouterLink",{attrs:{to:"/docs/request-context.html"}},[s._v("PlatformContext")]),s._v(" for more details.")],1),s._v(" "),n("h4",{attrs:{id:"validation"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#validation"}},[s._v("#")]),s._v(" Validation")]),s._v(" "),n("p",[s._v("Ts.ED support the data input validation with the decorators provided by "),n("code",[s._v("@tsed/schema")]),s._v(".")]),s._v(" "),n("p",[s._v("Example:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PathParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MinLength"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarsController")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('":id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("This action returns a #")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v(" calendar")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[s._v("Validation require the "),n("code",[s._v("@tsed/ajv")]),s._v(" plugins to work.")]),s._v(" "),n("div",{staticClass:"language-sh line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-sh"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/ajv\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])])]),s._v(" "),n("p",[n("strong",[s._v("Supported decorators:")])]),s._v(" "),n("ApiList",{attrs:{query:"module === '@tsed/schema' && status.includes('decorator') && status.includes('schema') && !status.includes('operation') && !['Property'].includes(symbolName)"}}),s._v(" "),n("h2",{attrs:{id:"response"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#response"}},[s._v("#")]),s._v(" Response")]),s._v(" "),n("h3",{attrs:{id:"decorators-3"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#decorators-3"}},[s._v("#")]),s._v(" Decorators")]),s._v(" "),n("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('operation') && status.includes('response')"}}),s._v(" "),n("h3",{attrs:{id:"status"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#status"}},[s._v("#")]),s._v(" Status")]),s._v(" "),n("p",[s._v("You can change the default response status with the "),n("ApiSymbolName",[s._v("Status")]),s._v(" decorator:")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Returns"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Put"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Calendar")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Put")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("201")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Calendar "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br")])]),n("h3",{attrs:{id:"content-type"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#content-type"}},[s._v("#")]),s._v(" Content Type")]),s._v(" "),n("p",[s._v("You can set the response content type with the "),n("ApiSymbolName",[s._v("ContentType")]),s._v(" decorator:")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ContentType"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('".html"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// => 'text/html'")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"html"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// => 'text/html'")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"json"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// => 'application/json'")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// => 'application/json'")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"png"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getContent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"something"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" String"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('".html"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// => 'text/html'")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" String"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"html"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// => 'text/html'")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"json"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// => 'application/json'")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Object"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// => 'application/json'")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" String"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"png"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getContent2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"something"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br")])]),n("h3",{attrs:{id:"header"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#header"}},[s._v("#")]),s._v(" Header")]),s._v(" "),n("p",[s._v("You can set the response header with the "),n("ApiSymbolName",[s._v("Header")]),s._v(" decorator:")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Header"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Header")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"Content-Type"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"text/plain"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"Content-Length"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("123")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n ETag"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n value"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"12345"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"header description"')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("Text plain ")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("name"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Headers")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"Content-Type"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"text/plain"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"Content-Length"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("123")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n ETag"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n value"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"12345"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"header description"')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v("Text plain ")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("name"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br")])]),n("h3",{attrs:{id:"redirect"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#redirect"}},[s._v("#")]),s._v(" Redirect")]),s._v(" "),n("p",[s._v("Redirects to the URL derived from the specified path, with specified status, a positive integer that corresponds to an\nHTTP status code . If not specified, status defaults to “302 “Found”.")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Redirect")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/foo/bar"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Redirect")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("301")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"http://example.com"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br")])]),n("p",[s._v("Redirects can be a fully-qualified URL for redirecting to a different site:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Redirect")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"http://google.com"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br")])]),n("p",[s._v("Redirects can be relative to the root of the host name. For example, if the application is\non http://example.com/admin/post/new, the following would redirect to the URL http://example.com/admin:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Redirect")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/admin"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br")])]),n("p",[s._v("Redirects can be relative to the current URL. For example, from "),n("code",[s._v("http://example.com/blog/admin/")]),s._v(" (notice the trailing\nslash), the following would redirect to the URL "),n("code",[s._v("http://example.com/blog/admin/post/new")]),s._v(".")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Redirect")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"post/new"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br")])]),n("p",[s._v("Redirecting to post/new from "),n("code",[s._v("http://example.com/blog/admin")]),s._v(" (no trailing slash), will redirect\nto "),n("code",[s._v("http://example.com/blog/post/new")]),s._v(".")]),s._v(" "),n("p",[s._v("If you found the above behavior confusing, think of path segments as directories (with trailing slashes) and files, it\nwill start to make sense.")]),s._v(" "),n("p",[s._v("Path-relative redirects are also possible. If you were on "),n("code",[s._v("http://example.com/admin/post/new")]),s._v(", the following would\nredirect to "),n("code",[s._v("http//example.com/admin/post")]),s._v(":")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Redirect")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('".."')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br")])]),n("p",[s._v("A back redirection redirects the request back to the referer, defaulting to / when the referer is missing.")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Redirect")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"back"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br")])]),n("p",[s._v("Finally, it also possible to perform redirection programmatically:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("myMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Context")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("redirect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/path/to"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("h3",{attrs:{id:"generics"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#generics"}},[s._v("#")]),s._v(" Generics")]),s._v(" "),n("p",[s._v("One of the new usage allowed by the "),n("ApiSymbolName",[s._v("Returns")]),s._v(" is the support of the Generics from TypeScript.")],1),s._v(" "),n("p",[s._v("This feature is basically there to meet the need to generate correct Swagger documentation when using generic templates.")]),s._v(" "),n("p",[s._v("For example, you want to return a generic "),n("code",[s._v("Document")]),s._v(" payload which contains a data (Product) and links to allow a\ncommuter to discover your endpoints linked to this data.")]),s._v(" "),n("p",[s._v("With "),n("ApiSymbolName",[s._v("Returns")]),s._v(" you can document correctly your endpoint to reflect the correct model:")],1),s._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"MyController.ts",icon:"bx-code-alt"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PathParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Summary"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("NotFound"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Document"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../domain/document/Documents"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Product"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../domain/product/Product"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ProductTypes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../domain/product/ProductTypes"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/products"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Name")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Products"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ProductsCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Document"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"A product"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("404")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" NotFound"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Product not found"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Return a product from the given Id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("geProduct")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Document"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"AGAC"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" product "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Product")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"AGAC"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n label"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Agadir"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n type"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ProductTypes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("VILLA")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"An awesome resort at AGADIR"')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Document"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n data"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" product"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n links"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("NotFound")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Product not found"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"Document.ts",icon:"bx-code-alt"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DocumentLink"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./DocumentLink"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Document"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n data"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("DocumentLink"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n links"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" DocumentLink"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Document"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("links "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("links "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("links"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"Product.ts",icon:"bx-code-alt"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Generics"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DocumentLink"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./DocumentLink"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Generics")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Document"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"T"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n data"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("DocumentLink"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n links"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" DocumentLink"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Partial"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Document"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("links "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("links "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("links"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"CodeSandbox",icon:"bxl-codepen"}},[n("iframe",{staticStyle:{width:"100%",height:"500px",border:"0","border-radius":"4px",overflow:"hidden"},attrs:{src:"https://codesandbox.io/embed/tsed-swagger-example-ripfl?fontsize=14&hidenavigation=1&theme=dark",title:"tsed-swagger-example",allow:"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi;\npayment; usb; vr; xr-spatial-tracking",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"}})])],1),s._v(" "),n("h3",{attrs:{id:"throw-exceptions"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#throw-exceptions"}},[s._v("#")]),s._v(" Throw exceptions")]),s._v(" "),n("p",[s._v("You can use "),n("RouterLink",{attrs:{to:"/docs/exceptions.html"}},[s._v("@tsed/exceptions")]),s._v(" or similar module to throw an http exception.\nAll exception will be intercepted by the "),n("RouterLink",{attrs:{to:"/docs/middlewares/override/global-error-handler.html"}},[s._v("Global error handler")]),s._v("\nand are sent to the client.")],1),s._v(" "),n("p",[s._v("Here is an example:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PathParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BadRequest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("isNaN")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BadRequest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Not a number"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),n("p",[s._v('This example will produce a response with status code 400 and "Not a number" message.\n'),n("ApiSymbolName",[s._v("GlobalErrorHandlerMiddleware")]),s._v(" will catch and format the error before sending it to the client.")],1)]),s._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),n("p",[s._v("See our guide on "),n("RouterLink",{attrs:{to:"/docs/throw-http-exceptions.html"}},[s._v("HttpExceptions to throw customer HttpExceptions")])],1)]),s._v(" "),n("h2",{attrs:{id:"inject-request-and-response"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#inject-request-and-response"}},[s._v("#")]),s._v(" Inject Request and Response")]),s._v(" "),n("p",[s._v("You can use a decorator to inject the Request in order to retrieve information from the request that you cannot get\nthrough decorators.\nIn the same way you can inject the Response instance in order to modify some of its information.")]),s._v(" "),n("p",[s._v("This is not recommended, however, because your will potentially be specific to the platform you are using (Express.js,\nKoa.js, etc ...)")]),s._v(" "),n("p",[s._v("You can with the Req and Request decorators retrieve the originals request and response as follows:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" request"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Res")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" response"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Express.Request or Koa.Request")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Express.Response or Koa.Response")]),s._v("\n response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("status")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("send")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("p",[s._v("It's also possible to inject the high level PlatformRequest and PlatformResponse:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformRequest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PlatformResponse"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Req"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" request"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformRequest"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Res")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" response"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformResponse"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// PlatformRequest")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// PlatformResponse")]),s._v("\n\n response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("status")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("body")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("params"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("p",[s._v("Finally, it is also possible to retrieve the request and response in Node.js version:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("IncomingMessage"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ServerResponse"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"http"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" request"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" IncomingMessage"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Res")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" response"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ServerResponse"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// IncomingMessage")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ServerResponse")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br")])]),n("h2",{attrs:{id:"inject-next"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#inject-next"}},[s._v("#")]),s._v(" Inject next")]),s._v(" "),n("p",[s._v("Use "),n("ApiSymbolName",[s._v("Next")]),s._v(" decorator isn't recommended because Ts.ED use Promise/Observable to return a response, but something it's\nrequired to get next function\nto chain middlewares.")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Req"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" Express "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"express"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("promisify"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"util"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" request"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Express"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Res")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" response"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Express"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Next")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" next"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Express"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("NextFunction"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("setTimeout")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("myExpressMiddleware")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// But it's also possible to do this")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("promisify")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("myExpressMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br")])]),n("h2",{attrs:{id:"inject-router"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#inject-router"}},[s._v("#")]),s._v(" Inject router")]),s._v(" "),n("p",[s._v("Each controller has a "),n("ApiSymbolName",[s._v("PlatformRouter")]),s._v(" which wrap the original router\nfrom [Express.Router](http://expressjs.com/en/guide/routing.html\nor KoaRouter.\nYou can inject "),n("ApiSymbolName",[s._v("PlatformRouter")]),s._v(" in your controller to add anything related to the current Router controller.")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformRouter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-router"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("router"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformRouter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n router"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("nativeMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bind")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("nativeMethod")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("req"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" res"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" next"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[s._v("All of these routes added by this way won't be discovered by Ts.ED to produce Swagger documentation.")])]),s._v(" "),n("h2",{attrs:{id:"templating"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[s._v("#")]),s._v(" Templating")]),s._v(" "),n("p",[s._v("A template engine like "),n("a",{attrs:{href:"https://ejs.co/",target:"_blank",rel:"noopener noreferrer"}},[s._v("EJS"),n("OutboundLink")],1),s._v(" or "),n("a",{attrs:{href:"https://handlebarsjs.com/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Handlebars"),n("OutboundLink")],1),s._v(" can be used to change the\nresponse returned by your endpoint.\nLike Express.js, you need to configure the templating engine so that you can use it later with the "),n("ApiSymbolName",[s._v("View")]),s._v(" decorator.")],1),s._v(" "),n("p",[s._v("Here is an example of a controller which uses the "),n("ApiSymbolName",[s._v("View")]),s._v(" decorator:")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("View"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-views"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/events"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EventsCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("View")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"event.ejs"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("startDate"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" name"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyEvent"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])]),n("p",[s._v("And its view:")]),s._v(" "),n("div",{staticClass:"language-html line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-html"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("h1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v("<%- name %>"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("div")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v("Start: <%- startDate %>"),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),n("p",[s._v("To configure a template engine with Ts.ED, see our guide to "),n("RouterLink",{attrs:{to:"/tutorials/templating.html"}},[s._v("install the engine rendering")]),s._v("\nwith Ts.ED.")],1)]),s._v(" "),n("h2",{attrs:{id:"middlewares"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#middlewares"}},[s._v("#")]),s._v(" Middlewares")]),s._v(" "),n("p",[s._v("The middleware is a function which is called before the route handler.\nMiddleware functions have access to the request and response objects, and the next middleware function in the\napplication’s request-response cycle.\nThe next middleware function is commonly denoted by a variable named next.")]),s._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),n("p",[s._v("For more details about Middleware declaration see the "),n("RouterLink",{attrs:{to:"/docs/middlewares.html"}},[s._v("Middlewares")]),s._v(" section.")],1)]),s._v(" "),n("p",[s._v("The following decorators lets you add custom middleware on a method or on controller:")]),s._v(" "),n("ApiList",{attrs:{query:"['Use', 'UseBefore', 'UseAfter', 'UseBeforeEach'].indexOf(symbolName) > -1"}}),s._v(" "),n("h3",{attrs:{id:"example"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[s._v("#")]),s._v(" Example")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Use"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UseAfter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UseBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PathParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CustomBeforeMdlw"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CustomMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../middlewares/middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseBefore")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("CustomBeforeMdlw"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Use")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("CustomMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseBefore")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("CustomMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseAfter")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("CustomMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br")])]),n("h3",{attrs:{id:"middleware-call-sequence"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#middleware-call-sequence"}},[s._v("#")]),s._v(" Middleware call sequence")]),s._v(" "),n("p",[s._v("When a request is sent to the server all middlewares added on the Server, Controller or Endpoint\nwill be called while a response isn't sent by one of the middleware in the lifecycle.")]),s._v(" "),n("figure",[n("img",{staticStyle:{"max-width":"400px",padding:"30px"},attrs:{src:a(735)}})]),s._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),n("p",[s._v("See "),n("RouterLink",{attrs:{to:"/docs/middlewares.html"}},[s._v("middlewares section")]),s._v(" for more information.")],1)]),s._v(" "),n("h2",{attrs:{id:"nested-controllers"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#nested-controllers"}},[s._v("#")]),s._v(" Nested controllers")]),s._v(" "),n("p",[s._v("A controller can have one or more nested controllers. This feature allows you to combine your controllers with each\nother to define your routes.\nOne controller can be added to multiple controllers, so you can easily reuse the same controller.")]),s._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"RestCtrl.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CalendarCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./CalendarCtrl"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("EventCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./EventCtrl"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n path"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n children"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("CalendarCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" EventCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RestCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"CalendarCtrl.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("EventCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./EventCtrl"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n path"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n children"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("EventCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"EventCtrl.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/events"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EventCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br")])])]),s._v(" "),n("Tab",{attrs:{label:"Server.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RestCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/RestCtrl"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("RestCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])])])],1),s._v(" "),n("p",[s._v("This example will produce these following routes:")]),s._v(" "),n("table",[n("thead",[n("tr",[n("th",[s._v("Verb")]),s._v(" "),n("th",[s._v("Route")]),s._v(" "),n("th",[s._v("Method")])])]),s._v(" "),n("tbody",[n("tr",[n("td",[s._v("GET")]),s._v(" "),n("td",[n("code",[s._v("/rest")])]),s._v(" "),n("td",[n("code",[s._v("RestCtrl.get()")])])]),s._v(" "),n("tr",[n("td",[s._v("GET")]),s._v(" "),n("td",[n("code",[s._v("/rest/calendars")])]),s._v(" "),n("td",[n("code",[s._v("CalendarCtrl.get()")])])]),s._v(" "),n("tr",[n("td",[s._v("GET")]),s._v(" "),n("td",[n("code",[s._v("/rest/calendars/events")])]),s._v(" "),n("td",[n("code",[s._v("EventCtrl.get()")])])]),s._v(" "),n("tr",[n("td",[s._v("GET")]),s._v(" "),n("td",[n("code",[s._v("/rest/events")])]),s._v(" "),n("td",[n("code",[s._v("EventCtrl.get()")])])])])]),s._v(" "),n("h2",{attrs:{id:"inheritance"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#inheritance"}},[s._v("#")]),s._v(" Inheritance")]),s._v(" "),n("p",[s._v("Ts.ED supports the ES6 inheritance class. So you can declare a controller that implement some generic method\nand use it on a children class.")]),s._v(" "),n("p",[s._v("To do that just declare a parent controller without the "),n("ApiSymbolName",[s._v("Controller")]),s._v(" decorator.")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("SomeService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./SomeService"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("abstract")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BaseCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" someService"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SomeService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/list"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("list")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"search"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" search"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("someService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("list")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("search"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])]),n("p",[s._v("Then, on your child controller:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PathParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BaseCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./BaseCtrl"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/child"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("abstract")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ChildCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BaseCtrl")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])]),n("h2",{attrs:{id:"decorators-4"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#decorators-4"}},[s._v("#")]),s._v(" Decorators")]),s._v(" "),n("ApiList",{attrs:{query:"tags: decorator AND operation OR controller"}})],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/50.aa0404ad.js b/assets/js/50.aa0404ad.js new file mode 100644 index 00000000000..168f3196b8b --- /dev/null +++ b/assets/js/50.aa0404ad.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{797:function(e,t,o){"use strict";o.r(t);var n=o(1),s=Object(n.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"support-us"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#support-us"}},[e._v("#")]),e._v(" Support us")]),e._v(" "),o("p",[e._v("Ts.ED is an MIT-licensed open source project with its ongoing development made possible thanks to the support by the community.\nThis framework is a result of the long road, full of sleepless nights, working after hours, and busy weekends.")]),e._v(" "),o("h2",{attrs:{id:"how-can-you-help"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#how-can-you-help"}},[e._v("#")]),e._v(" How can you help?")]),e._v(" "),o("p",[e._v("Ts.ED doesn't have a company that sits behind and is continuously paying for hours spent on the development.")]),e._v(" "),o("p",[e._v("I fully rely on the "),o("strong",[e._v("goodness")]),e._v(" "),o("BxIcon",{attrs:{name:"bx bxs-heart"}}),e._v(" of the community.\nHowever, I would love to create a team around this framework to improve and maintain it.")],1),e._v(" "),o("p",[e._v("In order to help me, I run few supporting platforms:")]),e._v(" "),o("ul",[o("li",[e._v("become a backer or sponsor on "),o("a",{attrs:{href:"https://opencollective.com/tsed",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenCollective"),o("OutboundLink")],1)]),e._v(" "),o("li",[e._v("use "),o("a",{attrs:{href:"https://paypal.me/romainlenzotti",target:"_blank",rel:"noopener noreferrer"}},[e._v("PayPal"),o("OutboundLink")],1),e._v(" to send a one-time donation")])]),e._v(" "),o("p",[o("a",{attrs:{href:"https://opencollective.com/tsed",target:"_blank"}},[o("img",{attrs:{src:"/screens/opencollective-tiers.png",alt:"OpenCollective Tiers"}})])]),e._v(" "),o("SupportOptions"),e._v(" "),o("p",[e._v("If you fell in love with Ts.ED, or you run a business which is using Ts.ED, consider sponsoring its development\nto ensure that the project which your product relies on is actively maintained and improved.\nAlso, your support could help me and the future teams to work more on content that benefits whole Ts.ED community.")])],1)}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/51.7ccdceb9.js b/assets/js/51.7ccdceb9.js new file mode 100644 index 00000000000..26340b542bc --- /dev/null +++ b/assets/js/51.7ccdceb9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{800:function(t,a,e){"use strict";e.r(a);var s=e(1),i=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"our-team"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#our-team"}},[t._v("#")]),t._v(" Our Team")]),t._v(" "),e("div",{staticClass:"flex items-center pb-15 pt-10"},[e("div",{staticClass:"flex-1 text-lg"},[t._v("\n The development of Ts.ED and its ecosystem is guided by an international team (it's our goal).\n We have a very active and engaged team that is constantly striving to push Ts.ED forward. \n ")]),t._v(" "),e("div",{staticClass:"pl-10"},[e("img",{staticClass:"w-full -mt-10 relative z-10",staticStyle:{"max-width":"400px"},attrs:{src:"/our-team.png",alt:"Our team"}})])]),t._v(" "),e("Team",{staticClass:"mb-15",attrs:{title:"Core team"}}),t._v(" "),e("div",{staticClass:"text-lg text-center"},[e("strong",[t._v("You like this framework and want to participate in its improvement?")]),t._v(" "),e("br"),t._v("Here are the roles we would like to have:\n"),e("ul",{staticClass:"reset-list mt-5 text-md"},[e("li",{staticClass:"p-3"},[t._v("Ambassador Framework")]),t._v(" "),e("li",{staticClass:"p-3"},[t._v("Marketing Manager")]),t._v(" "),e("li",{staticClass:"p-3"},[t._v("UX/UI Designer")]),t._v(" "),e("li",{staticClass:"p-3"},[t._v("Maintainer")])])]),t._v(" "),e("div",{staticClass:"mt-10 mb-5 text-center w-full"},[e("Button",{staticClass:"w-full sm:w-1/3 md:w-1/6 sm:mx-2 typeform-share",attrs:{"bg-color":"button-white",color:"blue","data-mode":"popup",rounded:"medium",href:"mailto:contact@tsed.io"}},[t._v("\n Join us\n ")])],1)],1)}),[],!1,null,null,null);a.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/52.b54259b7.js b/assets/js/52.b54259b7.js new file mode 100644 index 00000000000..a002d5936bc --- /dev/null +++ b/assets/js/52.b54259b7.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{799:function(t,e,s){"use strict";s.r(e);var r=s(1),a=Object(r.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"resources"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[t._v("#")]),t._v(" Resources")]),t._v(" "),s("h2",{attrs:{id:"starters"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#starters"}},[t._v("#")]),t._v(" Starters")]),t._v(" "),s("Projects",{attrs:{type:"projects"}}),t._v(" "),s("p",[t._v("See more project examples on Github organization "),s("a",{attrs:{href:"https://github.com/tsedio/?q=example&type=&language=&sort=",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"sandboxes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sandboxes"}},[t._v("#")]),t._v(" Sandboxes")]),t._v(" "),s("Projects",{attrs:{type:"sandboxes"}}),t._v(" "),s("h2",{attrs:{id:"meetups"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#meetups"}},[t._v("#")]),t._v(" Meetups")]),t._v(" "),s("Projects",{attrs:{type:"meetups"}})],1)}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/53.f6a59ada.js b/assets/js/53.f6a59ada.js new file mode 100644 index 00000000000..a75737b8c03 --- /dev/null +++ b/assets/js/53.f6a59ada.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{801:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"agenda"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#agenda"}},[s._v("#")]),s._v(" Agenda")]),s._v(" "),a("Banner",{attrs:{src:"/agenda.svg",href:"https://github.com/agenda/agenda",height:"200"}}),s._v(" "),a("h2",{attrs:{id:"feature"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#feature"}},[s._v("#")]),s._v(" Feature")]),s._v(" "),a("p",[s._v("Currently, "),a("code",[s._v("@tsed/agenda")]),s._v(" allows you to decorate classes with "),a("code",[s._v("@Agenda")]),s._v(" and\ncorresponding methods to have them picked up by the Agenda library to be\nscheduled automatically ("),a("code",[s._v("@Every")]),s._v(") or programmatically ("),a("code",[s._v("@Define")]),s._v(") via the AgendaService.")]),s._v(" "),a("p",[s._v("For more information about Agenda look at the documentation "),a("a",{attrs:{href:"https://github.com/agenda/agenda",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(";")]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("To begin, install the Agenda module for Ts.ED:")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/agenda\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save agenda\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("h2",{attrs:{id:"configure-your-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configure-your-server"}},[s._v("#")]),s._v(" Configure your server")]),s._v(" "),a("p",[s._v("Import "),a("code",[s._v("@tsed/agenda")]),s._v(" in your Server:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/agenda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// import agenda ts.ed module")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" mongoConnectionString "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongodb://127.0.0.1/agenda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n agenda"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n enabled"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Enable Agenda jobs for this instance.")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// pass any options that you would normally pass to new Agenda(), e.g.")]),s._v("\n db"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n address"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" mongoConnectionString\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("h2",{attrs:{id:"create-a-new-service"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-new-service"}},[s._v("#")]),s._v(" Create a new Service")]),s._v(" "),a("p",[s._v("Decorate the class with "),a("code",[s._v("@Agenda")]),s._v(". The "),a("code",[s._v("namespace")]),s._v(" option is optional and will\nprefix the job name with "),a("code",[s._v("namespace.")])]),s._v(" "),a("p",[s._v("Use the "),a("code",[s._v("@Every")]),s._v(" decorator to define a cron-like job that gets automatically\nscheduled based on the given interval. The name is optional and by default the\nmethod name is used as job name.")]),s._v(" "),a("p",[s._v("Use the "),a("code",[s._v("@Define")]),s._v(" decorator on methods that you would like to schedule\nprogrammatically via the AgendaService and Agenda instance access.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Agenda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Every"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Define"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/agenda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Job"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"agenda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Agenda")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v(" namespace"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EmailJobService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Every")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"60 minutes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"maintenanceJob"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/* ... and any option you would normally pass to agenda.every/define */")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sendAdminStatistics")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("job"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Job"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// implement something here")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Define")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sendWelcomeEmail"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/* ... and any option you would normally pass to agenda.define(...) */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sendWelcomeEmail")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("job"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Job"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// implement something here")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Define")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sendFollowUpEmail"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sendFollowUpEmail")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("job"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Job"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// implement something here")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br")])]),a("h2",{attrs:{id:"inject-agenda"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#inject-agenda"}},[s._v("#")]),s._v(" Inject Agenda")]),s._v(" "),a("p",[s._v("Inject the AgendaService instance to interact with it directly, e.g. to schedule\na job manually.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" AfterRoutesInit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AgendaService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/agenda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Service")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AfterRoutesInit")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" agenda"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" AgendaService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// then schedule some jobs")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("agenda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email.sendWelcomeEmail"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("agenda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("schedule")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"in 2 hours"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email.sendFollowUpEmail"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])]),a("h2",{attrs:{id:"using-agendash"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-agendash"}},[s._v("#")]),s._v(" Using Agendash")]),s._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/agenda/agendash",target:"_blank",rel:"noopener noreferrer"}},[s._v("Agendash"),a("OutboundLink")],1),s._v(" provides a job overview dashboard that makes it easy to manage, create and\nschedule your jobs.")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("This is an optional feature and is not required to use agenda.")])]),s._v(" "),a("p",[s._v("Install the additional dependency.")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save agendash\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Afterwards create the module "),a("code",[s._v("agendash.module.ts")]),s._v(" in src/modules so that the dashboard can be exposed using middleware.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AfterRoutesInit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Agenda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"agenda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" Agendash "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"agendash"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AgendashModule")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AfterRoutesInit")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n config"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n agenda"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Agenda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n app"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$afterRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("agenda"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?.")]),s._v("enabled"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/agendash"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Agendash")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("agenda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("h2",{attrs:{id:"authors"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#authors"}},[s._v("#")]),s._v(" Authors")]),s._v(" "),a("GithubContributors",{attrs:{users:["ochrstn","xCryzed"]}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers")]),s._v(" "),a("GithubContributors",{attrs:{users:["ochrstn"]}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/54.ddb78642.js b/assets/js/54.ddb78642.js new file mode 100644 index 00000000000..11e8546d617 --- /dev/null +++ b/assets/js/54.ddb78642.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{802:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"ajv"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ajv"}},[t._v("#")]),t._v(" AJV")]),t._v(" "),a("Banner",{attrs:{src:"/ajv_logo.png",href:"https://ajv.js.org/",height:"100"}}),t._v(" "),a("p",[t._v("This tutorial shows you how you can validate your data with decorators.")]),t._v(" "),a("p",[t._v("Validation feature uses "),a("a",{attrs:{href:"https://github.com/epoberezkin/ajv",target:"_blank",rel:"noopener noreferrer"}},[t._v("Ajv"),a("OutboundLink")],1),t._v("\nand "),a("a",{attrs:{href:"http://json-schema.org/latest/json-schema-validation.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("json-schema"),a("OutboundLink")],1),t._v(" to perform the model validation.")]),t._v(" "),a("Projects",{attrs:{type:"projects"}}),t._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),a("p",[t._v("Before using the validation decorators, we need to install the "),a("a",{attrs:{href:"https://www.npmjs.com/package/ajv",target:"_blank",rel:"noopener noreferrer"}},[t._v("ajv"),a("OutboundLink")],1),t._v(" module.")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save ajv\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save @tsed/ajv\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("p",[t._v("Then import "),a("code",[t._v("@tsed/ajv")]),t._v(" in your Server:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// import ajv ts.ed module")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ajv"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("p",[t._v("The AJV module allows a few settings to be added through the ServerSettings (all are optional):")]),t._v(" "),a("ul",[a("li",[a("em",[t._v("options")]),t._v(" are AJV specific options passed directly to the AJV constructor,")]),t._v(" "),a("li",[a("em",[t._v("errorFormatter")]),t._v(" can be used to alter the output produced by the "),a("code",[t._v("@tsed/ajv")]),t._v(" package.")])]),t._v(" "),a("p",[t._v("The error message could be changed like this:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// import ajv ts.ed module")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ajv"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("errorFormatter")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("At ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("modelName"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dataPath"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(", value '")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("' ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("message"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n verbose"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"decorators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[t._v("#")]),t._v(" Decorators")]),t._v(" "),a("p",[t._v("Ts.ED gives some decorators to write your validation model:")]),t._v(" "),a("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('validation')"}}),t._v(" "),a("h2",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),a("h4",{attrs:{id:"model-validation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#model-validation"}},[t._v("#")]),t._v(" Model validation")]),t._v(" "),a("p",[t._v("A model can be used on a method controller along with "),a("a",{attrs:{href:""}},[t._v("BodyParams")]),t._v(" =>\n"),a("ApiSymbolName",[t._v("BodyParams")]),t._v("\nor other decorators, and will\nbe validated by Ajv.")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" MaxLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Maximum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Pattern"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarModel")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Maximum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n rating"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Email")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Format")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"date"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or date-time, etc...")]),t._v("\n createDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Pattern")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token regex"}},[a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[t._v("hello")]),a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n customInput"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n customInput"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value1"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"value2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])]),a("h2",{attrs:{id:"validation-error"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#validation-error"}},[t._v("#")]),t._v(" Validation error")]),t._v(" "),a("p",[t._v("When a validation error occurs, AJV generates a list of errors with a full description like this:")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"keyword"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dataPath"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('".password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"schemaPath"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"#/properties/password/minLength"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"params"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"limit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should NOT be shorter than 6 characters"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"modelName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"User"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"user-defined-keywords"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#user-defined-keywords"}},[t._v("#")]),t._v(" User defined keywords")]),t._v(" "),a("p",[t._v("Ajv allows you to define custom keywords to validate a property.")]),t._v(" "),a("p",[t._v("You can find more details on the different ways to declare a custom validator on this page: https://ajv.js.org/docs/keywords.html")]),t._v(" "),a("p",[t._v("Ts.ED introduces the "),a("ApiSymbolName",[t._v("Keyword")]),t._v(" decorator to declare a new custom validator for Ajv. Combined with the "),a("ApiSymbolName",[t._v("CustomKey")]),t._v(" decorator to add keywords to a property of your class, you can use more complex scenarios than what basic JsonSchema allows.")],1),t._v(" "),a("p",[t._v("For example, we can create a custom validator to support the "),a("code",[t._v("range")]),t._v(" validation over a number. To do that, we have to define\nthe custom validator by using "),a("ApiSymbolName",[t._v("Keyword")]),t._v(" decorator:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Keyword"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" KeywordMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("array"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Keyword")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n keyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n schemaType"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"exclusiveRange"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n metaSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("items")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("minItems")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("additionalItems")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RangeKeyword")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeywordMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("min"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exclusiveRange "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" min "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("max")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" min "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" max"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br")])]),a("p",[t._v("Then we can declare a model using the standard decorators from "),a("code",[t._v("@tsed/schema")]),t._v(":")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Product.ts"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Range"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ExclusiveRange"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../decorators/Range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// custom decorator")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Product")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CustomKey")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CustomKey")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"exclusiveRange"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nprice"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// OR")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Range")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ExclusiveRange")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nprice2"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Range.ts"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Range")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("min"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CustomKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("min"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ExclusiveRange")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("bool"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("CustomKey")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"exclusiveRange"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bool"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])])])],1),t._v(" "),a("p",[t._v("Finally, we can create a unit test to verify if our example works properly:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../keywords/RangeKeyword"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should call custom keyword validation (compile)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ajv "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Ajv"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("customKeys"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n properties"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n price"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n exclusiveRange"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n range"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("price"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.01")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("price"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("99.99")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("price"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("price"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br")])]),a("h3",{attrs:{id:"with-code-function"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#with-code-function"}},[t._v("#")]),t._v(' With "code" function')]),t._v(" "),a("p",[t._v("Starting from v7 Ajv uses "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/compile/codegen/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("CodeGen module"),a("OutboundLink")],1),t._v(" for all pre-defined keywords - see "),a("a",{attrs:{href:"https://ajv.js.org/codegen.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("codegen.md"),a("OutboundLink")],1),t._v(" for details.")]),t._v(" "),a("p",[t._v("Example "),a("code",[t._v("even")]),t._v(" keyword:")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Event.ts"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Keyword"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" KeywordMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("array"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Keyword")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\nkeyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"even"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\ntype"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\nschemaType"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"boolean"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EvenKeyword")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeywordMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("code")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" op "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" _"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("!==")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" _"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("===")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\ncxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("fail")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\\_"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" %2 ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("op"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" 0")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"Ajv example"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\najv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addKeyword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n keyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"even"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n schemaType"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"boolean"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $data: true // to support [$data reference](./validation.html#data-reference), ...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("code")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cxt\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" op "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" _"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("!==")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" _"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("===")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),t._v("\n cxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("fail")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" %2 ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("op"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" 0")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ... the only code change needed is to use `cxt.fail$data` here")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("even"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// true")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// false")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br")])])])],1),t._v(" "),a("h2",{attrs:{id:"formats"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#formats"}},[t._v("#")]),t._v(" Formats "),a("Badge",{attrs:{text:"v6.36.0+"}})],1),t._v(" "),a("p",[t._v("You can add and replace any format using "),a("ApiSymbolName",[t._v("Formats")]),t._v(" decorator. For example, the current format validator for "),a("code",[t._v("uri")]),t._v(" doesn't allow\nempty string. So, with this decorator you can create or override an existing "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv-formats",target:"_blank",rel:"noopener noreferrer"}},[t._v("ajv-formats"),a("OutboundLink")],1),t._v(" validator.")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Formats"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" FormatsMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NOT_URI_FRAGMENT")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token regex"}},[a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[t._v("\\/|:")]),a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("URI")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token regex"}},[a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[t._v("^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$")]),a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token regex-flags"}},[t._v("i")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Formats")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"uri"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UriFormat")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FormatsMethods"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "."')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" str "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NOT_URI_FRAGMENT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("test")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("URI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("test")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("p",[t._v("Then, we can import this class to our server as follows:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// import ajv ts.ed module")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./formats/UriFormat"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// just import the class, then Ts.ED will mount automatically the new format")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ajv"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ajv options")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("p",[t._v("Now, this example will be valid:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Uri"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" getJsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("AjvService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./UriFormat"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"UriFormat"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("reset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should validate empty string when we load the our custom Formats for AJV"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyModel")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Uri")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// or @Format("uri")')]),t._v("\n uri"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" service "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("AjvService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("AjvService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" jsonSchema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getJsonSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jsonSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n properties"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n uri"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n format"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"uri"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"string"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("uri"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("uri"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br")])]),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[t._v("#")]),t._v(" Author")]),t._v(" "),a("GithubContributors",{attrs:{users:"['Romakita']"}}),t._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[t._v("#")]),t._v(" Maintainers")]),t._v(" "),a("GithubContributors",{attrs:{users:"['Romakita']"}}),t._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[t._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/55.4164c541.js b/assets/js/55.4164c541.js new file mode 100644 index 00000000000..a3cb355108e --- /dev/null +++ b/assets/js/55.4164c541.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{805:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"serverless-http"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#serverless-http"}},[s._v("#")]),s._v(" Serverless HTTP")]),s._v(" "),a("Banner",{attrs:{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Amazon_Web_Services_Logo.svg/langfr-220px-Amazon_Web_Services_Logo.svg.png",href:"https://aws.amazon.com/fr/",height:180}}),s._v(" "),a("p",[s._v("Amazon Web Services is one possible way to host your Node.js application.")]),s._v(" "),a("p",[s._v("This tutorial shows you how to configure Ts.ED application, to be executed as an AWS Lambda Function. Under the hood,\n@tsed/platform-aws uses "),a("a",{attrs:{href:"https://www.npmjs.com/package/serverless-http",target:"_blank",rel:"noopener noreferrer"}},[s._v("serverless-http"),a("OutboundLink")],1),s._v(" to handle AWS event and call\nExpress.js/Koa.js application.")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[a("a",{attrs:{href:"https://www.serverless.com/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Serverless"),a("OutboundLink")],1),s._v(" is a free and open-source web framework written using Node.js. Serverless is\nthe first framework developed for building applications on AWS Lambda, a serverless computing platform provided by\nAmazon as a part of Amazon Web Services. This tutorial will show you how to install and use Serverless with Ts.ED.")])]),s._v(" "),a("p",[s._v("More information here: "),a("a",{attrs:{href:"http://docs.aws.amazon.com/lambda/latest/dg/welcome.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("Official AWS Docs"),a("OutboundLink")],1)]),s._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[s._v("#")]),s._v(" Features")]),s._v(" "),a("p",[s._v("This package allows the creation of a Lambda AWS with an Express.js/Koa.js server.")]),s._v(" "),a("p",[s._v("It supports:")]),s._v(" "),a("ul",[a("li",[s._v("Mounting Express.js/Koa.js app with "),a("code",[s._v("serverless-http")]),s._v(" module,")]),s._v(" "),a("li",[s._v("DI injection with "),a("code",[s._v("@tsed/di")]),s._v(",")]),s._v(" "),a("li",[s._v("Models mapping using "),a("code",[s._v("@tsed/schema")]),s._v(" and "),a("code",[s._v("@tsed/json-mapper")]),s._v(",")]),s._v(" "),a("li",[s._v("Params decorators can be used from "),a("code",[s._v("@tsed/platform-params")]),s._v(" to get Query, Body, etc...")]),s._v(" "),a("li",[s._v("Operation descriptions like "),a("code",[s._v("@Returns")]),s._v(",")]),s._v(" "),a("li",[a("code",[s._v("@tsed/async-hook-context")]),s._v(" to inject Context anywhere in your class!")])]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("Generate a new project with the CLI (you can also start from an existing project):")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("tsed init "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n? Choose the target platform: Express.js\n? Choose the architecture "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" your project: Ts.ED\n? Choose the convention "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" styling: Ts.ED\n? Check the features needed "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" your project Swagger, Testing, Linter\n? Choose unit framework Jest\n? Choose linter tools framework EsLint\n? Choose extra linter tools Prettier, Lint on commit\n? Choose the package manager: Yarn\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("This tutorial works also with NPM package manager!")])]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Yarn"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" @tsed/platform-serverless-http serverless-http serverless-offline\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" -D @types/aws-lambda\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"NPM"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" @tsed/platform-serverless-http serverless-http serverless-offline\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev @types/aws-lambda\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])])],1),s._v(" "),a("p",[s._v("In the "),a("code",[s._v("src/lambda")]),s._v(" create a new Lambda class:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Summary"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TimeslotsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/TimeslotsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TimeslotModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/TimeslotModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/timeslots"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TimeslotsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" timeslotsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" TimeslotsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Return a list of timeslots"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TimeslotModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date_start"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" dateStart"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date_end"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" dateEnd"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("timeslotsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n dateStart"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n dateEnd\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("p",[s._v("Remove the http and https port configuration from "),a("code",[s._v("Server.ts")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// httpPort: 8080,")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// httpsPort: false")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("And add the http port for our local server directly on "),a("code",[s._v("index.ts")]),s._v(" file:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n httpsPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n httpPort"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("PORT")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("8080")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n disableComponentsScan"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("listen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("p",[s._v("Create new "),a("code",[s._v("handler.ts")]),s._v(" to expose your lambda:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformServerlessHttp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-serverless-http"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" PlatformServerlessHttp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n adapter"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformExpress\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" handler "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("handler")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("p",[s._v("Finally, create the "),a("code",[s._v("serverless.yml")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-yml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("service")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" timeslots\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("frameworkVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("provider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" aws\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("runtime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" nodejs14.x\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("lambdaHashingVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"20201221"')]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("plugins")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" serverless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("offline\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("functions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("handler")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" dist/handler.handler\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("events")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("http")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" ANY\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" /\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("http")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" ANY\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"{proxy+}"')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("h2",{attrs:{id:"invoke-a-lambda-with-serverless"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#invoke-a-lambda-with-serverless"}},[s._v("#")]),s._v(" Invoke a lambda with serverless")]),s._v(" "),a("p",[s._v("Serverless provide a plugin named "),a("code",[s._v("serverless-offline")]),s._v(". This Serverless plugin emulates AWS λ and API Gateway on your\nlocal machine to speed up your development cycles. To do so, it starts an HTTP server that handles the request's\nlifecycle like API does and invokes your handlers.")]),s._v(" "),a("p",[s._v("So, by using the "),a("code",[s._v("serverless offline")]),s._v(" command, we'll be able to invoke our function. For that, we need also to build our\ncode before invoke the lambda.")]),s._v(" "),a("p",[s._v("To simplify our workflow, we can add the following npm script command in our "),a("code",[s._v("package.json")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"invoke"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yarn serverless invoke local -f any --data \'{\\"path\\":\\"/timeslots\\", \\"httpMethod\\": \\"GET\\"}\'"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("Now, we can run the following command to invoke our lambda:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("yarn invoke\n// OR\nnpm run invoke\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("p",[s._v("You should see in the terminal the following result:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"statusCode"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"body"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"[{\\"id\\":\\"b6de4fc7-faaa-4cd7-a144-42f6af0dec6b\\",\\"title\\":\\"title\\",\\"description\\":\\"description\\",\\"start_date\\":\\"2021-10-29T10:40:57.019Z\\",\\"end_date\\":\\"2021-10-29T10:40:57.019Z\\",\\"created_at\\":\\"2021-10-29T10:40:57.019Z\\",\\"update_at\\":\\"2021-10-29T10:40:57.019Z\\"}]"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"headers"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"content-type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x-request-id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ebb52d5e-113b-40da-b34e-c14811df596b"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"isBase64Encoded"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("h2",{attrs:{id:"get-aws-context-and-aws-event"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-aws-context-and-aws-event"}},[s._v("#")]),s._v(" Get Aws Context and Aws Event")]),s._v(" "),a("p",[s._v("This package includes decorators to easily get the event object Lambda received from API Gateway:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ServerlessEvent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ServerlessContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-serverless-http"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ServerlessEvent")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" event"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ServerlessContext")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" context"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ServerlessContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Event"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Context"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("h2",{attrs:{id:"testing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[s._v("#")]),s._v(" Testing")]),s._v(" "),a("p",[s._v("Ts.ED provide a way to test you lambda with mocked Aws event and context by using the "),a("ApiSymbolName",[s._v("PlatformServerlessTest")]),s._v(" util.")],1),s._v(" "),a("p",[s._v("Here an example to test a Lambda controller:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformServerless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-serverless-http"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-serverless-testing"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/timeslots"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TimeslotsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"TimeslotsController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformServerlessHttp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n server"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("TimeslotsLambdaController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("reset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should call getAll Lambda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/timeslots"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("statusCode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("parse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br")])]),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers "),a("Badge",{attrs:{text:"Help wanted"}})],1),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/56.0f16c994.js b/assets/js/56.0f16c994.js new file mode 100644 index 00000000000..1feef38bca0 --- /dev/null +++ b/assets/js/56.0f16c994.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{804:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"graphql"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#graphql"}},[s._v("#")]),s._v(" GraphQL")]),s._v(" "),a("p",[s._v("GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL\nprovides a complete and understandable description of the data in your API, gives clients the power to ask for exactly\nwhat they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.")]),s._v(" "),a("h2",{attrs:{id:"feature"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#feature"}},[s._v("#")]),s._v(" Feature")]),s._v(" "),a("ul",[a("li",[s._v("Create "),a("a",{attrs:{href:"https://www.apollographql.com/docs/apollo-server/api/apollo-server.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("Apollo"),a("OutboundLink")],1),s._v(" Server and bind it with\nTs.ED,")]),s._v(" "),a("li",[s._v("Create multiple servers,")]),s._v(" "),a("li",[s._v("Support "),a("a",{attrs:{href:"https://typegraphql.com/",target:"_blank",rel:"noopener noreferrer"}},[s._v("TypeGraphQL"),a("OutboundLink")],1),s._v(", "),a("a",{attrs:{href:"https://nexusjs.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Nexus"),a("OutboundLink")],1),s._v(" or standalone Apollo server.")])]),s._v(" "),a("h2",{attrs:{id:"apollo"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#apollo"}},[s._v("#")]),s._v(" Apollo")]),s._v(" "),a("h3",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Express.js"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/apollo graphql apollo-server-express\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev apollo-server-testing\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Koa.js"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/apollo graphql apollo-server-koa\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev apollo-server-testing\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/apollo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("join"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n apollo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n server1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// GraphQL server configuration")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n playground"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// enable playground GraphQL IDE. Set false to use Apollo Studio")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Apollo plugins")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Give custom server instance")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// server?: (config: Config) => ApolloServer;")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ApolloServer options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// See options descriptions on https://www.apollographql.com/docs/apollo-server/api/apollo-server.html")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("h2",{attrs:{id:"nexus"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#nexus"}},[s._v("#")]),s._v(" Nexus")]),s._v(" "),a("h3",{attrs:{id:"installation-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-2"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Express.js"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/apollo\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save nexus graphql apollo-server-express\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev apollo-server-testing\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Koa.js"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/apollo graphql\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save nexus graphql apollo-server-koa\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev apollo-server-testing\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])])])],1),s._v(" "),a("p",[s._v("Now, we can configure the Ts.ED server by importing "),a("code",[s._v("@tsed/apollo")]),s._v(" in your Server:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/apollo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("join"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n apollo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n server1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// GraphQL server configuration")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n playground"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// enable playground GraphQL IDE. Set false to use Apollo Studio")]),s._v("\n schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Apollo plugins")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Give custom server instance")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// server?: (config: Config) => ApolloServer;")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ApolloServer options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// See options descriptions on https://www.apollographql.com/docs/apollo-server/api/apollo-server.html")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br")])]),a("p",[s._v("Then create "),a("code",[s._v("schema/index.ts")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("makeSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nexus"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("join"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("makeSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n types"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 1")]),s._v("\n outputs"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n typegen"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("join")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cwd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('".."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('".."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nexus-typegen.ts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 2")]),s._v("\n schema"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("join")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cwd")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('".."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('".."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"schema.graphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 3")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("h2",{attrs:{id:"typegraphql"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#typegraphql"}},[s._v("#")]),s._v(" TypeGraphQL")]),s._v(" "),a("h3",{attrs:{id:"installation-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-3"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("To begin, install the "),a("code",[s._v("@tsed/typegraphql")]),s._v(" package:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Express.js"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/typegraphql graphql apollo-server-express\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save type-graphql apollo-datasource apollo-datasource-rest\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev apollo-server-testing\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Koa.js"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/typegraphql graphql apollo-server-koa\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save type-graphql apollo-datasource apollo-datasource-rest\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev apollo-server-testing\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])])])],1),s._v(" "),a("p",[s._v("Now, we can configure the Ts.ED server by importing "),a("code",[s._v("@tsed/typegraphql")]),s._v(" in your Server:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Configuration",icon:"bx-code-alt"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/typegraphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./resolvers/index"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// barrel file with all resolvers")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n typegraphql"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n server1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// GraphQL server configuration")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n playground"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// enable playground GraphQL IDE. Set false to use Apollo Studio")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// resolvers?: (Function | string)[];")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// dataSources?: Function;")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// server?: (config: Config) => ApolloServer;")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Apollo Server options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// See options descriptions on https://www.apollographql.com/docs/apollo-server/api/apollo-server.html")]),s._v("\n serverConfig"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n plugins"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// middlewareOptions?: ServerRegistration;")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// type-graphql")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// See options descriptions on https://19majkel94.github.io/type-graphql/")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// buildSchemaOptions?: Partial;")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"CodeSandbox",icon:"bxl-codepen"}},[a("iframe",{staticStyle:{width:"100%",height:"500px",border:"0","border-radius":"4px",overflow:"hidden"},attrs:{src:"https://codesandbox.io/embed/tsed-graphql-pgvfz?fontsize=14&hidenavigation=1&theme=dark",title:"TsED Graphql",allow:"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi;\npayment; usb; vr; xr-spatial-tracking",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"}})])],1),s._v(" "),a("h3",{attrs:{id:"types"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#types"}},[s._v("#")]),s._v(" Types")]),s._v(" "),a("p",[s._v("We want to get the equivalent of this type described in SDL:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("type Recipe {\n id: ID!\n title: String!\n description: String\n creationDate: Date!\n ingredients: [String!]!\n}\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("So we create the Recipe class with all properties and types:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Recipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n creationDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n ingredients"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("Then we decorate the class and its properties with decorators:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Field"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("ID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type-graphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectType")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Recipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("ID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("nullable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n creationDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n ingredients"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("p",[s._v("The detailed rules for when to use nullable, array and others are described\nin "),a("a",{attrs:{href:"https://typegraphql.com/docs/types-and-fields.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("fields and types docs"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("h3",{attrs:{id:"resolvers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#resolvers"}},[s._v("#")]),s._v(" Resolvers")]),s._v(" "),a("p",[s._v("After that we want to create typical crud queries and mutation. To do that we create the resolver (controller) class\nthat will have injected RecipeService in the constructor:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ResolverController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/typegraphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Arg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type-graphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RecipeNotFoundError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../errors/RecipeNotFoundError"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RecipesService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/RecipesService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../types/Recipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RecipesArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../types/RecipesArgs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ResolverController")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RecipeResolver")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" recipesService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" RecipesService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Query")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("recipe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Arg")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" recipe "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("recipesService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("recipe "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RecipeNotFoundError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Query")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("recipes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Args")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("skip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" take"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" RecipesArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("recipesService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("skip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" take"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])]),a("h3",{attrs:{id:"data-source"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#data-source"}},[s._v("#")]),s._v(" Data Source")]),s._v(" "),a("p",[s._v("Data source is one of the Apollo server features which can be used as option for your Resolver or Query. Ts.ED provides\na "),a("ApiSymbolName",[s._v("DataSourceService")]),s._v(" decorator to declare a DataSource which will be injected to the Apollo server context.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/typegraphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RESTDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"apollo-datasource-rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("DataSource")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserDataSource")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RESTDataSource")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("baseURL "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"https://myapi.com/api/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getUserById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("Then you can retrieve your data source through the context in your resolver like that:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ResolverController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/typegraphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Arg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Authorized"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type-graphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UserDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../datasources/UserDataSource"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ResolverController")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserResolver")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Authorized")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Query")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("user")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Arg")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"userId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" userId"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ctx")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"dataSources"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" dataSources"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" userDataSource"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserDataSource "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" dataSources"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("userDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" userDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getUserById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("userId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("h2",{attrs:{id:"get-server-instance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-server-instance"}},[s._v("#")]),s._v(" Get Server instance")]),s._v(" "),a("p",[s._v("ApolloService (or TypeGraphQLService) lets you to retrieve an instance of ApolloServer.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AfterRoutesInit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ApolloService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/apollo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ApolloServer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"apollo-server-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AfterRoutesInit")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" ApolloService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ApolloService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// or private typeGraphQLService: TypeGraphQLService;")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" server"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ApolloServer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$afterRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("server "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apolloService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"server1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("p",[s._v("For more information about ApolloServer, look at its\ndocumentation "),a("a",{attrs:{href:"https://www.apollographql.com/docs/apollo-server/api/apollo-server.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(";")]),s._v(" "),a("h2",{attrs:{id:"testing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[s._v("#")]),s._v(" Testing")]),s._v(" "),a("p",[s._v("Here is an example to create a test server based on TypeGraphQL and run a query:")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("The unit example is also available to test any Apollo Server!")])]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ApolloService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/apollo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ApolloServerTestClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" createTestClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"apollo-server-testing"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" gql "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"graphql-tag"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./app/Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("GET_RECIPES")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" gql"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("\n query GetRecipes {\n recipes {\n title\n description\n creationDate\n }\n }\n")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Recipes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("let")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ApolloServerTestClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforeAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" server "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ApolloService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ApolloService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"server1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// OR const server = PlatformTest.get(ApolloService).get("typegraphql-server1")!;')]),s._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("createTestClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should get recipes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n query"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("GET_RECIPES")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n variables"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n recipes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n creationDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2020-08-20T00:00:00.000Z"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"title"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ApolloServerTestClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" createTestClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"apollo-server-testing"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" gql "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"graphql-tag"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ApolloService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/apollo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./app/Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("GET_RECIPES")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" gql"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("\n query GetRecipes {\n recipes {\n title\n description\n creationDate\n }\n }\n")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Recipes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("let")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ApolloServerTestClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" server "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ApolloService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ApolloService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"server1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// for TypeGraphQL")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// use PlatformTest.get(ApolloService).get("typegraphl-server1")!;')]),s._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("createTestClient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should get recipes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n query"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("GET_RECIPES")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n variables"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n recipes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n creationDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2020-08-20T00:00:00.000Z"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"title"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"RecipeResolver.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ResolverController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/typegraphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Arg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type-graphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RecipeNotFoundError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../errors/RecipeNotFoundError"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RecipesService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/RecipesService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../types/Recipe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RecipesArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../types/RecipesArgs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ResolverController")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RecipeResolver")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" recipesService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" RecipesService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Query")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("recipe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Arg")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" recipe "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("recipesService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("recipe "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RecipeNotFoundError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Query")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("recipes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Args")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("skip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" take"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" RecipesArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("recipesService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("skip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" take"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"RecipesService.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../types/Recipes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RecipesService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n recipes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Recipe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Recipe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"title"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n creationDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2020-08-20"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n ingredients"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("recipes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" item"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("recipes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Recipe.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Field"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("ID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type-graphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectType")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Recipe")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("ID")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("nullable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n description"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n creationDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n ingredients"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"RecipeArgs.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ArgsType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Field"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Int"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type-graphql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ArgsType")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RecipeArgs")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" Int"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("nullable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n skip"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" Int"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("nullable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n take"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Field")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("nullable"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:"['Romakita']"}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers")]),s._v(" "),a("GithubContributors",{attrs:{users:"['Romakita']"}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/57.7d99855b.js b/assets/js/57.7d99855b.js new file mode 100644 index 00000000000..bb66f95e042 --- /dev/null +++ b/assets/js/57.7d99855b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{803:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"ioredis"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ioredis"}},[s._v("#")]),s._v(" IORedis")]),s._v(" "),a("Banner",{attrs:{src:"/ioredis.svg",height:"200",href:"https://github.com/luin/ioredis"}}),s._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[s._v("#")]),s._v(" Features")]),s._v(" "),a("p",[s._v("Currently, "),a("code",[s._v("@tsed/ioredis")]),s._v(" allows you:")]),s._v(" "),a("ul",[a("li",[s._v("Configure one or more Redis database connections via the "),a("code",[s._v("@Configuration")]),s._v(" configuration.")]),s._v(" "),a("li",[s._v("Share redis connection with "),a("code",[s._v("@tsed/platform-cache")]),s._v(".")]),s._v(" "),a("li",[s._v("Support classic Redis connection and Cluster connection.")]),s._v(" "),a("li",[s._v("Inject connection to another service.")]),s._v(" "),a("li",[s._v("Mock connection for unit/integration test.")])]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/ioredis ioredis\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev ioredis-mock\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("Minimal supported ioredis version is v5+")])]),s._v(" "),a("h2",{attrs:{id:"create-connection"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-connection"}},[s._v("#")]),s._v(" Create connection")]),s._v(" "),a("p",[s._v("Create a new "),a("code",[s._v("RedisConnection.ts")]),s._v(" file in your project:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Redis "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ioredis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("registerConnectionProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/ioredis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"REDIS_CONNECTION"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("type")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Redis"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerConnectionProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[a("code",[s._v("registerConnectionProvider")]),s._v(" create automatically an injectable "),a("code",[s._v("RedisConnection")]),s._v(".")])]),s._v(" "),a("p",[s._v("Then, edit your "),a("code",[s._v("Server.ts")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-cache"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// add this module if you want to use cache")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/ioredis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ioredis"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// share the redis connection with @tsed/platform-cache")]),s._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// redis options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// host: "localhost",')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// port: 6379,")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// username: "...",')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// password: "...",')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// tls: false,")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// db: 0")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// cache options")]),s._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("300")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModule")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br")])]),a("p",[s._v("And finally, use the connection in your services:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ClientRepository")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ioredis instance")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("keys")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("keys")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"clients:*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("blockquote",[a("p",[s._v("See "),a("a",{attrs:{href:"https://github.com/luin/ioredis",target:"_blank",rel:"noopener noreferrer"}},[s._v("ioredis documentation"),a("OutboundLink")],1),s._v(" for more details.")])]),s._v(" "),a("h2",{attrs:{id:"cluster-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cluster-configuration"}},[s._v("#")]),s._v(" Cluster configuration")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-cache"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// add this module if you want to use cache")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/ioredis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ioredis"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// share the redis connection with @tsed/platform-cache")]),s._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// cluster options")]),s._v("\n nodes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// other cluster options")]),s._v("\n scaleReads"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"all"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n maxRedirections"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n retryDelayOnTryAgain"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n retryDelayOnFailover"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n retryDelayOnClusterDown"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n slotsRefreshTimeout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("15000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n slotsRefreshInterval"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("20000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n enableOfflineQueue"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n enableReadyCheck"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n redisOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n noDelay"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n connectTimeout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("15000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n autoResendUnfulfilledCommands"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n maxRetriesPerRequest"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n enableAutoPipelining"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n autoPipeliningIgnoredCommands"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"scan"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// cache options")]),s._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("300")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModule")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br")])]),a("h2",{attrs:{id:"sentinel-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sentinel-configuration"}},[s._v("#")]),s._v(" Sentinel configuration")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-cache"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// add this module if you want to use cache")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/ioredis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ioredis"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// share the redis connection with @tsed/platform-cache")]),s._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// sentinel master name")]),s._v("\n sentinelName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"redis-master"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// sentinels nodes")]),s._v("\n sentinels"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n redisOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n noDelay"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n connectTimeout"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("15000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n autoResendUnfulfilledCommands"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n maxRetriesPerRequest"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n enableAutoPipelining"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n autoPipeliningIgnoredCommands"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"scan"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// cache options")]),s._v("\n cache"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ttl"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("300")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModule")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br")])]),a("h2",{attrs:{id:"testing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[s._v("#")]),s._v(" Testing")]),s._v(" "),a("p",[s._v("Ts.ED provides a utility that allows you to test a service that consumes a Redis connection.\nThis use relies on the awesome "),a("a",{attrs:{href:"https://www.npmjs.com/package/ioredis-mock",target:"_blank",rel:"noopener noreferrer"}},[s._v("ioredis-mock"),a("OutboundLink")],1),s._v(" module.")]),s._v(" "),a("p",[s._v("Here is a class that consume a redis connection:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("v4"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"uuid"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("serialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" deserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./RedisConnection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ClientModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./ClientModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ClientRepository")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ioredis instance")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" raw "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"clients:"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("raw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("parse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("raw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ClientModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("client"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ClientModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("v4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"clients:"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("serialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])]),a("p",[s._v("The ClientModel:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ClientModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("p",[s._v("And his test:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ClientRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./ClientRepository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./RedisConnection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ClientModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./ClientModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"IORedisTest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" IORedisTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// create a new sandbox with ioredis-mock connection")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" IORedisTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("reset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return nothing"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" service "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" IORedisTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MyRepository"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" client "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"uid"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return all keys"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" service "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" IORedisTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MyRepository"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" client "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ClientModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" newClient "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("client"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("newClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("newClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" clientFound "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("newClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("clientFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toBeInstanceOf")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ClientModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("clientFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("newClient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("clientFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br")])]),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers")]),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}})],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/58.a03234e3.js b/assets/js/58.a03234e3.js new file mode 100644 index 00000000000..8ff435b75b3 --- /dev/null +++ b/assets/js/58.a03234e3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{806:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"keycloak"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#keycloak"}},[t._v("#")]),t._v(" Keycloak")]),t._v(" "),a("Banner",{attrs:{src:"/keycloak.svg",height:"200",href:"https://www.keycloak.org"}}),t._v(" "),a("p",[t._v("This tutorial shows you how you can secure your Ts.ED application with an existing Keycloak instance.")]),t._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),a("p",[t._v("Before securing the application with Keycloak, we need to install the "),a("a",{attrs:{href:"https://www.npmjs.com/package/keycloak-connect",target:"_blank",rel:"noopener noreferrer"}},[t._v("Keycloak Node.js Adapter"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://www.npmjs.com/package/express-session",target:"_blank",rel:"noopener noreferrer"}},[t._v("Express-Session"),a("OutboundLink")],1),t._v(" modules.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),a("p",[t._v("The version of the "),a("code",[t._v("keycloak-connect")]),t._v(" module should be the same version as your Keycloak instance.")])]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save keycloak-connect\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save express-session\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save-dev @types/express-session\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("h2",{attrs:{id:"download-keycloak-json"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#download-keycloak-json"}},[t._v("#")]),t._v(" Download keycloak.json")]),t._v(" "),a("p",[t._v("Put the keycloak.json file for your Keycloak client to "),a("code",[t._v("src/config/keycloak")]),t._v(".")]),t._v(" "),a("p",[t._v("How exactly the file is downloaded can be found in the official "),a("a",{attrs:{href:"https://www.keycloak.org/docs/latest/securing_apps/index.html#_nodejs_adapter",target:"_blank",rel:"noopener noreferrer"}},[t._v("Keycloak documentation"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"keycloakservice"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#keycloakservice"}},[t._v("#")]),t._v(" KeycloakService")]),t._v(" "),a("p",[t._v("Create a KeycloakService in "),a("code",[t._v("src/services")]),t._v(" that handles the memory store, the Keycloak instance and the token.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MemoryStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"express-session"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"keycloak-connect"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" KeycloakConnect "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"keycloak-connect"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Service")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeycloakService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" keycloak"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeycloakConnect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Keycloak"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" memoryStore"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MemoryStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" token"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("initKeycloak")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("initKeycloak")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeycloakConnect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Keycloak "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keycloak"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("warn")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Trying to init Keycloak again!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keycloak"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Initializing Keycloak..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("memoryStore "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MemoryStore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keycloak "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeycloakConnect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("store"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("memoryStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"src/config/keycloak/keycloak.json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keycloak"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getKeycloakInstance")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeycloakConnect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Keycloak "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keycloak"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getMemoryStore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" MemoryStore "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("memoryStore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getToken")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Token "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setToken")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("token"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("token "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br")])]),a("h3",{attrs:{id:"add-keycloakservice-to-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#add-keycloakservice-to-server"}},[t._v("#")]),t._v(" Add KeycloakService to Server")]),t._v(" "),a("p",[t._v("Make sure that the KeycloakService is part of the componentsScan array of the global configuration.")]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("KeycloakService")]),t._v(" can then be injected in the Server class and the middleware of "),a("code",[t._v("express-session")]),t._v(" and "),a("code",[t._v("keycloak-connect")]),t._v(" can be called.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" session "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"express-session"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n middlewares"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cors"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"json-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"urlencoded-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" app"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" keycloakService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeycloakService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("session")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"thisShouldBeLongAndSecret"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n resave"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n saveUninitialized"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n store"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keycloakService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getMemoryStore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keycloakService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getKeycloakInstance")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("middleware")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br")])]),a("h2",{attrs:{id:"keycloakmiddleware"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#keycloakmiddleware"}},[t._v("#")]),t._v(" KeycloakMiddleware")]),t._v(" "),a("p",[t._v("To secure your routes add a KeycloakMiddleware class to "),a("code",[t._v("src/middlewares")]),t._v(".")]),t._v(" "),a("p",[t._v("With each request the token is set to the request property "),a("code",[t._v("kauth")]),t._v(".")]),t._v(" "),a("p",[t._v("In order to be able to use the token we set this in the KeycloakService.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" MiddlewareMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Middleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("KeycloakAuthOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../decorators/KeycloakAuthDecorator"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("KeycloakService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../services/KeycloakService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeycloakMiddleware")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MiddlewareMethods")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" keycloakService"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeycloakService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeycloakAuthOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("store"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("KeycloakMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" keycloak "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keycloakService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getKeycloakInstance")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("kauth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("grant"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keycloakService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setToken")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("kauth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("grant"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("access_token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" keycloak"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("protect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br")])]),a("h2",{attrs:{id:"keycloakauthdecorator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#keycloakauthdecorator"}},[t._v("#")]),t._v(" KeycloakAuthDecorator")]),t._v(" "),a("p",[t._v("To protect certain routes create a KeycloakAuthDecorator at "),a("code",[t._v("src/decorators")]),t._v(".")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseAuth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("useDecorators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Security"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("KeycloakMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../middlewares/KeycloakMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeycloakAuthOptions")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Record"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n scopes"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("KeycloakAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeycloakAuthOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDecorators")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("KeycloakMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Security")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oauth2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("scopes "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("403")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("h2",{attrs:{id:"protecting-routes-role-based-in-a-controller"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#protecting-routes-role-based-in-a-controller"}},[t._v("#")]),t._v(" Protecting routes role-based in a controller")]),t._v(" "),a("p",[t._v("Now we can protect routes with our custom KeycloakAuth decorator.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("KeycloakAuth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../decorators/KeycloakAuthDecorator"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/hello-world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HelloWorldController")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("KeycloakAuth")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("role"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"realm:example-role"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"hello"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("h2",{attrs:{id:"swagger-integration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#swagger-integration"}},[t._v("#")]),t._v(" Swagger integration")]),t._v(" "),a("p",[t._v("If you would like to log in directly from your Swagger UI add the following code to your Swagger config.")]),t._v(" "),a("p",[t._v("Don't forget to replace "),a("code",[t._v("authorizationUrl")]),t._v(", "),a("code",[t._v("tokenUrl")]),t._v(" and "),a("code",[t._v("refreshUrl")]),t._v(" with your custom keycloak URLs.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[t._v("swagger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("/v3/docs")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n specVersion"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"3.0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n spec"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n components"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n securitySchemes"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n oauth2"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oauth2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n flows"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n authorizationCode"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n authorizationUrl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https:///auth/realms//protocol/openid-connect/auth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n tokenUrl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https:///auth/realms//protocol/openid-connect/token"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n refreshUrl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https:///auth/realms//protocol/openid-connect/token"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n scopes"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("openid"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"openid"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" profile"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"profile"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br")])]),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[t._v("#")]),t._v(" Author")]),t._v(" "),a("GithubContributors",{attrs:{users:"['xCryzed']"}})],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/59.25090171.js b/assets/js/59.25090171.js new file mode 100644 index 00000000000..0788b1ac230 --- /dev/null +++ b/assets/js/59.25090171.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{807:function(s,t,a){"use strict";a.r(t);var n=a(1),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"mikroorm"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mikroorm"}},[s._v("#")]),s._v(" MikroORM")]),s._v(" "),a("Banner",{attrs:{src:"https://raw.githubusercontent.com/mikro-orm/mikro-orm/master/docs/static/img/logo-readme.svg?sanitize=true",href:"https://mikro-orm.io/",height:"200"}}),s._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[s._v("#")]),s._v(" Features")]),s._v(" "),a("p",[s._v("Currently, "),a("code",[s._v("@tsed/mikro-orm")]),s._v(" allows you:")]),s._v(" "),a("ul",[a("li",[s._v("Configure one or more MikroORM instances via the "),a("code",[s._v("@Configuration")]),s._v(" decorator. All databases will be initialized\nwhen the server starts during the server's "),a("code",[s._v("OnInit")]),s._v(" phase.")]),s._v(" "),a("li",[s._v("Use the Entity MikroORM as Model for Controllers, AJV Validation and Swagger.")])]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("To begin, install the MikroORM module for TS.ED:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"NPM"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/mongodb "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for mongo")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/mysql "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for mysql/mariadb")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/mariadb "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for mysql/mariadb")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/postgresql "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for postgresql")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/sqlite "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for sqlite")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Yarn"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/mongodb "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for mongo")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/mysql "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for mysql/mariadb")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/mariadb "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for mysql/mariadb")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/postgresql "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for postgresql")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" @mikro-orm/core @tsed/mikro-orm @mikro-orm/sqlite "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for sqlite")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])])])],1),s._v(" "),a("p",[s._v("Once the installation process is completed, we can import the "),a("code",[s._v("MikroOrmModule")]),s._v(" into the "),a("code",[s._v("Server")]),s._v(" configuration:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MikroOrmModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mikro-orm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n imports"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("MikroOrmModule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n mikroOrm"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n contextName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'default'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'postgresql'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n\n entities"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./entity/*{.ts,.js}")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n contextName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'mongo'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'mongo'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("p",[s._v("The "),a("code",[s._v("mikroOrm")]),s._v(" options accepts the same configuration object as "),a("code",[s._v("init()")]),s._v(" from the MikroORM package. Check "),a("a",{attrs:{href:"https://mikro-orm.io/docs/configuration",target:"_blank",rel:"noopener noreferrer"}},[s._v("this page"),a("OutboundLink")],1),s._v(" for the complete configuration documentation.")]),s._v(" "),a("h2",{attrs:{id:"obtain-orm-instance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#obtain-orm-instance"}},[s._v("#")]),s._v(" Obtain ORM instance")]),s._v(" "),a("p",[a("code",[s._v("@Orm")]),s._v(" decorator lets you retrieve an instance of MikroORM.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" AfterRoutesInit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Orm"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mikro-orm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MikroORM"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@mikro-orm/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Orm")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" orm"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MikroORM"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Then save")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("orm"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("em"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("persistAndFlush")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Saved a new user with id: "')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" users "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("orm"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("em"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Loaded users: "')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" users"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" users"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br")])]),a("p",[s._v("It's also possible to inject an ORM by its context name:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Orm")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" orm"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MikroORM"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h2",{attrs:{id:"obtain-entitymanager"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#obtain-entitymanager"}},[s._v("#")]),s._v(" Obtain EntityManager")]),s._v(" "),a("p",[a("code",[s._v("@EntityManager")]),s._v(" and "),a("code",[s._v("@Em")]),s._v(" decorators lets you retrieve an instance of EntityManager.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" AfterRoutesInit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Em"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mikro-orm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("EntityManager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@mikro-orm/mysql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Import EntityManager from your driver package or `@mikro-orm/knex`")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Em")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" em"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" EntityManager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("em"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("persistAndFlush")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Saved a new user with id: "')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("p",[s._v("It's also possible to inject Entity manager by his context name:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" AfterRoutesInit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Em"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mikro-orm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("EntityManager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@mikro-orm/mysql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Import EntityManager from your driver package or `@mikro-orm/knex`")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Em")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"contextName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" em"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" EntityManager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("em"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("persistAndFlush")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Saved a new user with id: "')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("h2",{attrs:{id:"use-entity-with-controller"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-entity-with-controller"}},[s._v("#")]),s._v(" Use Entity with Controller")]),s._v(" "),a("p",[s._v("To begin, we need to define an Entity MikroORM like this and use Ts.ED Decorator to define the JSON Schema.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MaxLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PrimaryKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" Column"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@mikro-orm/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Entity")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PrimaryKey")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Column")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Column")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Column")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Mininum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Maximum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])]),a("p",[s._v("Now, the model is correctly defined and can be used with a "),a("a",{attrs:{href:"https://tsed.io/docs/controllers.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("Controller"),a("OutboundLink")],1),s._v("\n, "),a("RouterLink",{attrs:{to:"/tutorials/ajv.html"}},[s._v("AJV validation")]),s._v(",\n"),a("RouterLink",{attrs:{to:"/tutorials/swagger.html"}},[s._v("Swagger")]),s._v(" and "),a("a",{attrs:{href:"https://mikro-orm.io/docs/defining-entities",target:"_blank",rel:"noopener noreferrer"}},[s._v("MikroORM"),a("OutboundLink")],1),s._v(".")],1),s._v(" "),a("p",[s._v("We can use this model with a Controller like that:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" usersService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("h2",{attrs:{id:"transactions-and-request-context"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#transactions-and-request-context"}},[s._v("#")]),s._v(" Transactions and Request context")]),s._v(" "),a("p",[s._v("As mentioned in the "),a("a",{attrs:{href:"https://mikro-orm.io/docs/identity-map",target:"_blank",rel:"noopener noreferrer"}},[s._v("docs"),a("OutboundLink")],1),s._v(", we need to isolate a state for each request. That is\nhandled automatically thanks to the "),a("code",[s._v("AsyncLocalStorage")]),s._v(" registered via interceptor.")]),s._v(" "),a("p",[s._v("We can use the "),a("code",[s._v("@Transactional()")]),s._v(" decorator, which will register a new request context for your method and execute it\ninside the context.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Transactional"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mikro-orm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" usersService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Transactional")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("h2",{attrs:{id:"retry-policy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#retry-policy"}},[s._v("#")]),s._v(" Retry policy")]),s._v(" "),a("p",[s._v("By default, "),a("code",[s._v("IsolationLevel.READ_COMMITTED")]),s._v(" is used. You can override it, specifying the isolation level for the transaction by supplying it as the "),a("code",[s._v("isolationLevel")]),s._v(" parameter in the "),a("code",[s._v("@Transactional")]),s._v(" decorator:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Transactional")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("isolationLevel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" IsolationLevel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("SERIALIZABLE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("The MikroORM supports the standard isolation levels such as "),a("code",[s._v("SERIALIZABLE")]),s._v(" or "),a("code",[s._v("REPEATABLE READ")]),s._v(", the full list of available options see "),a("a",{attrs:{href:"https://mikro-orm.io/docs/transactions#isolation-levels",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("p",[s._v("You can also set the "),a("a",{attrs:{href:"https://mikro-orm.io/docs/unit-of-work#flush-modes",target:"_blank",rel:"noopener noreferrer"}},[s._v("flushing strategy"),a("OutboundLink")],1),s._v(" for the transaction by setting the "),a("code",[s._v("flushMode")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Transactional")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("flushMode"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" FlushMode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("AUTO")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("In some cases, you might need to avoid an explicit transaction, but preserve an async context to prevent the usage of the global identity map. For example, starting with v3.4, the MongoDB driver supports transactions. Yet, you have to use a replica set, otherwise, the driver will raise an exception.")]),s._v(" "),a("p",[s._v("To prevent "),a("code",[s._v("@Transactional()")]),s._v(" use of an explicit transaction, you just need to set the "),a("code",[s._v("disabled")]),s._v(" field to "),a("code",[s._v("true")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Transactional")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("disabled"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v('By default, the automatic retry policy is disabled. You can implement your own to match the business requirements and the nature of the failure. For some noncritical operations, it is better to fail as soon as possible rather than retry a coupe of times. For example, in an interactive web application, it is better to fail right after a smaller number of retries with only a short delay between retry attempts, and display a message to the user (for example, "please try again later").')]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("@Transactional()")]),s._v(" decorator allows you to enable a retry policy for the particular resources. You just need to implement the "),a("code",[s._v("RetryStrategy")]),s._v(" interface and use "),a("code",[s._v("registerProvider()")]),s._v(" or "),a("code",[s._v("@OverrideProvider()")]),s._v(" to register it in the IoC container. Below you can find an example to handle occurred optimistic locks based on "),a("a",{attrs:{href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"}},[s._v("an exponential backoff retry strategy"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OptimisticLockError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@mikro-orm/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("RetryStrategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mikro-orm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ExponentialBackoffOptions")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n maxDepth"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ExponentialBackoff")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RetryStrategy")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" depth "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ExponentialBackoffOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" acquire"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("task"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ReturnType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("task")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" ReturnType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("catch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("shouldRetry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("e "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" Error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("depth")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("maxDepth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("retry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("task"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("shouldRetry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("error"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" error "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("instanceof")]),s._v(" OptimisticLockError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" retry"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("task"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ReturnType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sleep")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("depth "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("50")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("depth "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("acquire")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("task"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sleep")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("milliseconds"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("resolve"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setTimeout")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("resolve"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" milliseconds"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" RetryStrategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("useFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ExponentialBackoff "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ExponentialBackoff")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("maxDepth"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br")])]),a("p",[a("code",[s._v("ExponentialBackoff")]),s._v(" invokes passed function recursively is contained in a try/catch block. The method returns control to the interceptor if the call to the "),a("code",[s._v("task")]),s._v(" function succeeds without throwing an exception. If the "),a("code",[s._v("task")]),s._v(" method fails, the catch block examines the reason for the failure. If it's optimistic locking the code waits for a short delay before retrying the operation.")]),s._v(" "),a("p",[s._v("Once a retry strategy is implemented, you can enable an automatic retry mechanism using the "),a("code",[s._v("@Transactional")]),s._v(" decorator like that:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Transactional"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mikro-orm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" usersService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Transactional")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("retry"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("h2",{attrs:{id:"managing-lifecycle-of-subscribers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#managing-lifecycle-of-subscribers"}},[s._v("#")]),s._v(" Managing Lifecycle of Subscribers")]),s._v(" "),a("p",[s._v("With Ts.ED, managing the lifecycle of subscribers registered with Mikro-ORM using the IoC container is simple. To automatically resolve a subscriber's dependencies, you can use the "),a("code",[s._v("@Subscriber")]),s._v(" decorator as follows:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("EventSubscriber"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@mikro-orm/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Subscriber"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mikro-orm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Subscriber")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SomeSubscriber")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EventSubscriber")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("In this example, we register the "),a("code",[s._v("SomeSubscriber")]),s._v(" subscriber, which is automatically instantiated by the module using the IoC container, allowing you to easily manage the dependencies of your subscribers.")]),s._v(" "),a("p",[s._v("You can also specify the context name for a subscriber to tie it to a particular instance of the ORM:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("EventSubscriber"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@mikro-orm/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Subscriber"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mikro-orm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Subscriber")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("contextName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongodb"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SomeSubscriber")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EventSubscriber")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:["derevnjuk"]}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers")]),s._v(" "),a("GithubContributors",{attrs:{users:["derevnjuk"]}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/6.751e2ab3.js b/assets/js/6.751e2ab3.js new file mode 100644 index 00000000000..494815a2d3c --- /dev/null +++ b/assets/js/6.751e2ab3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{735:function(t,s,a){t.exports=a.p+"assets/img/middleware-in-sequence.b2978130.svg"},746:function(t,s,a){t.exports=a.p+"assets/img/middleware.0ddb812b.png"},773:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"middlewares"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#middlewares"}},[t._v("#")]),t._v(" Middlewares")]),t._v(" "),n("p",[n("ApiSymbolName",[t._v("Middleware")]),t._v(" is similar to the Express middleware with the difference that it's a class and you can use the IoC\nto inject other services on its constructor.")],1),t._v(" "),n("p",[t._v("All middlewares decorated by "),n("ApiSymbolName",[t._v("Middleware")]),t._v(" have one method named "),n("code",[t._v("use()")]),t._v(".\nThis method can use all parameters decorators as you could see with the "),n("RouterLink",{attrs:{to:"/docs/controllers.html"}},[t._v("Controllers")]),t._v(" and return a promise.")],1),t._v(" "),n("figure",[n("img",{staticStyle:{"max-height":"300px",padding:"10px",background:"white"},attrs:{src:a(746)}})]),t._v(" "),n("h2",{attrs:{id:"configuration"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),n("p",[t._v("To begin, you must add the "),n("code",[t._v("middlewares")]),t._v(" folder on the "),n("code",[t._v("componentsScan")]),t._v(" attribute in your server settings as follows:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MyController"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./controllers/rest/MyController"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n mount"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/rest"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("MyController"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("p",[t._v("Then, create a new file in your middlewares folder. Create a new Class definition then add the "),n("ApiSymbolName",[t._v("Middleware")]),t._v(" decorator.")],1),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Middleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomMiddleware")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" $ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ID"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" $ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])]),n("p",[t._v("You have different usecases to declare and use a middleware as following:")]),t._v(" "),n("ul",[n("li",[n("RouterLink",{attrs:{to:"/docs/middlewares.html#global-middleware"}},[t._v("Global middleware")]),t._v(": this middleware can be used on the Server,")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/docs/middlewares.html#endpoint-middleware"}},[t._v("Endpoint middleware")]),t._v(": this middleware can be used on a controller method,")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/docs/middlewares.html#error-middleware"}},[t._v("Error middleware")]),t._v(": this middleware can be used to handle errors.")],1)]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),n("p",[t._v("Global middleware and endpoint middleware are similar, except that the Endpoint middleware\ncan access to the last executed endpoint information.")])]),t._v(" "),n("h2",{attrs:{id:"global-middleware"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#global-middleware"}},[t._v("#")]),t._v(" Global middleware")]),t._v(" "),n("p",[t._v("Global middlewares are generally used to handle requests before or after controllers.")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Constant"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MiddlewareMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Middleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("NotAcceptable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AcceptMimesMiddleware")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MiddlewareMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Constant")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"acceptMimes"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n acceptMimes"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" $ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("$ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("accepts")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("acceptMimes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NotAcceptable")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Accepted mimes are: "')]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("acceptMimes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('", "')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br")])]),n("p",[t._v("Then add your middleware on the Server by using the right hook:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformApplication"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("GlobalAcceptMimeMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./GlobalAcceptMimeMiddleware"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n acceptMimes"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"application/json"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add your custom configuration here")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n app"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformApplication"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$beforeRoutesInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("GlobalAcceptMimeMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// or")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("$afterRoutesInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("GlobalAcceptMimeMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// But maybe is too late ;)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("Since v6.28.0, it's also possible to register middlewares from "),n("code",[t._v("middlewares")]),t._v(" options on "),n("ApiSymbolName",[t._v("Configuration")]),t._v(" decorator.\nIn addition, it's also possible to configure the environment for which the middleware should be loaded.")],1),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ProviderScope"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ProviderType"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n middlewares"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("hook"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"$afterInit"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" use"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("helmet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("contentSecurityPolicy"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("env"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token constant"}},[t._v("PROD")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" use"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" EnsureHttpsMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("cors")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("cookieParser")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("compress")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("methodOverride")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n AuthTokenMiddleware\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])]),n("p",[t._v("The middlewares added through "),n("code",[t._v("middlewares")]),t._v(" options will always be registered after the middlewares registered through the hook methods!")])]),t._v(" "),n("h2",{attrs:{id:"endpoint-middleware"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#endpoint-middleware"}},[t._v("#")]),t._v(" Endpoint middleware")]),t._v(" "),n("p",[t._v("Endpoint middleware is not really different from global middleware, but its goal is to handle a request before or after endpoint.\nIt knows which endpoint is executed by using the "),n("ApiSymbolName",[t._v("EndpointInfo")]),t._v(" decorator.")],1),t._v(" "),n("p",[t._v("The following example, show you how to implement the middleware and use it with a custom decorator.")]),t._v(" "),n("Tabs",{staticClass:"-code"},[n("Tab",{attrs:{label:"AcceptMimesMiddleware.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("MiddlewareMethods"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Middleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("NotAcceptable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/exceptions"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AcceptMimesMiddleware")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MiddlewareMethods")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" $ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the parameters stored for the current endpoint or on the controller.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" mimes "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" $ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("endpoint"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("AcceptMimesMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("$ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("accepts")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mimes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NotAcceptable")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Accepted mimes are: "')]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" mimes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"accept.ts"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("StoreSet"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" useDecorators"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/core"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("AcceptMimesMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../middlewares/AcceptMimesMiddleware"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Accept")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("mimes"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("useDecorators")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("StoreSet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("AcceptMimesMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n mimes\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseBefore")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("AcceptMimesMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br")])])]),t._v(" "),n("Tab",{attrs:{label:"Usage"}},[n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Accept"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../decorators/Accept"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyCtrl")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Accept")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"application/json"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getContent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"title"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br")])])])],1),t._v(" "),n("p",[t._v("Middleware can be used on a class controller or endpoint method with the following decorators:")]),t._v(" "),n("ul",[n("li",[n("ApiSymbolName",[t._v("UseBefore")])],1),t._v(" "),n("li",[n("ApiSymbolName",[t._v("Use")])],1),t._v(" "),n("li",[n("ApiSymbolName",[t._v("UseAfter")])],1),t._v(" "),n("li",[t._v("or routes decorators: "),n("ApiSymbolName",[t._v("Get")]),t._v(", "),n("ApiSymbolName",[t._v("Post")]),t._v(", "),n("ApiSymbolName",[t._v("Delete")]),t._v(", "),n("ApiSymbolName",[t._v("Put")]),t._v(" and "),n("ApiSymbolName",[t._v("Patch")])],1)]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("UseBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CustomMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./middlewares/CustomMiddleware"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/test"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseBefore")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// global to the controller")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyCtrl")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseBefore")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CustomMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// only to this endpoint")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getContent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br")])]),n("h2",{attrs:{id:"error-middleware"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#error-middleware"}},[t._v("#")]),t._v(" Error middleware")]),t._v(" "),n("p",[t._v("Express allows you to handle any error when your middleware have 4 parameters like this:")]),t._v(" "),n("div",{staticClass:"language-javascript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("error"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" req"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" next")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br")])]),n("p",[t._v("Ts.ED has the same mechanism with "),n("ApiSymbolName",[t._v("Err")]),t._v(" decorator. Use this decorator on a middleware to create a handler which will only\ncalled when an error occurs on th decorated endpoint.")],1),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Middleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyMiddlewareError")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Err")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" err"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("unknown")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Next")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" next"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"===> Error:"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" err"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br")])]),n("p",[t._v("The following example is the GlobalErrorHandlerMiddleware\nused by Ts.ED to handle all errors thrown by your application.")]),t._v(" "),n("p",[t._v("If you planed to catch errors globally see our "),n("RouterLink",{attrs:{to:"/docs/exceptions.html"}},[t._v("Exception filter")]),t._v(" page.")],1),t._v(" "),n("h2",{attrs:{id:"specifics-parameters-decorators"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#specifics-parameters-decorators"}},[t._v("#")]),t._v(" Specifics parameters decorators")]),t._v(" "),n("p",[t._v("In addition, you have these specifics parameters decorators for the middlewares:")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",[t._v("Signature")]),t._v(" "),n("th",[t._v("Description")])])]),t._v(" "),n("tbody",[n("tr",[n("td",[n("ApiSymbolName",[t._v("Err")])],1),t._v(" "),n("td",[t._v("Inject the "),n("code",[t._v("Express.Err")]),t._v(" service.")])]),t._v(" "),n("tr",[n("td",[n("ApiSymbolName",[t._v("Context")])],1),t._v(" "),n("td",[t._v("Provide all information about the called endpoint")])])])]),t._v(" "),n("h2",{attrs:{id:"call-sequences"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#call-sequences"}},[t._v("#")]),t._v(" Call sequences")]),t._v(" "),n("p",[t._v("As you see in the previous section, a middleware can be used on different contexts:")]),t._v(" "),n("ul",[n("li",[n("RouterLink",{attrs:{to:"/docs/configuration.html"}},[t._v("Server")]),t._v(",")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/docs/controllers.html"}},[t._v("Controller")]),t._v(",")],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/docs/controllers.html"}},[t._v("Endpoint")]),t._v(".")],1)]),t._v(" "),n("p",[t._v("A middleware added to a controller or endpoint level has the same constraint as the endpoint method itself.\nIt'll be played only when the url request matches with the path associated to the controller and its endpoint method.")]),t._v(" "),n("p",[t._v("When a request is sent to the server all middlewares added in the Server, "),n("RouterLink",{attrs:{to:"/docs/controllers.html"}},[t._v("Controller")]),t._v(" or Endpoint with decorators\nwill be called while a response isn't sent by one of the handlers/middlewares in the stack.")],1),t._v(" "),n("figure",[n("img",{staticStyle:{"max-width":"400px",padding:"30px"},attrs:{src:a(735)}})]),t._v(" "),n("p",[t._v("For each executed endpoints and middlewares, Platform API store the return value to the "),n("ApiSymbolName",[t._v("Context")]),t._v(". We have two scenarios:")],1),t._v(" "),n("ol",[n("li",[t._v("If a data is stored in the "),n("ApiSymbolName",[t._v("Context")]),t._v(" object, the response will be immediately send to your consumer after the UseAfterEach middleware (if present).")],1),t._v(" "),n("li",[t._v("If no data is stored in the "),n("ApiSymbolName",[t._v("Context")]),t._v(" object, the call sequence middlewares continue to the next endpoint (if present) or to the UseAfter then Global middlewares until a data isn't returned by a handler.")],1)]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("The middlewares shown in the Endpoints box will be replayed as many times as it has endpoint that matches\nthe request url.")])]),t._v(" "),n("p",[t._v("For example:")]),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Use"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseAfter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UseBeforeEach"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-middlewares"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAfter")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MdlwCtrlAfter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseBefore")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MdlwCtrlBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseBeforeEach")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MdlwCtrlBeforeEach"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Use")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MdlwCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyCtrl")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseBefore")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MdlwBefore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Use")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Mdlw"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("UseAfter")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("MdlwAfter"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("endpointA")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Next")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" next"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Next"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"EndpointA"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("endpointB")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"EndpointB"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br"),n("span",{staticClass:"line-number"},[t._v("26")]),n("br"),n("span",{staticClass:"line-number"},[t._v("27")]),n("br")])]),n("p",[t._v("According to the call sequence scheme, the stack calls will be there:")]),t._v(" "),n("ul",[n("li",[n("strong",[t._v("Middlewares")]),t._v(" added in Server (logger, express middleware, etc...),")]),t._v(" "),n("li",[n("strong",[t._v("MdlwCtrlBefore")]),t._v(",")]),t._v(" "),n("li",[n("strong",[t._v("MdlwCtrlBeforeEach")])]),t._v(" "),n("li",[n("strong",[t._v("MdlwBefore")]),t._v(",")]),t._v(" "),n("li",[n("strong",[t._v("MdlwCtrl")]),t._v(",")]),t._v(" "),n("li",[n("strong",[t._v("MyCtrl.endpointA")]),t._v(",")]),t._v(" "),n("li",[n("strong",[t._v("MdlwAfter")]),t._v(",")]),t._v(" "),n("li",[n("strong",[t._v("SendResponse")]),t._v(", (but no data is returned by the endpointA)")]),t._v(" "),n("li",[n("strong",[t._v("MdlwCtrlBeforeEach")])]),t._v(" "),n("li",[n("strong",[t._v("MdlwCtrl")]),t._v(",")]),t._v(" "),n("li",[n("strong",[t._v("MyCtrl.endpointB")]),t._v(",")]),t._v(" "),n("li",[n("strong",[t._v("MdlwAfter")]),t._v(",")]),t._v(" "),n("li",[n("strong",[t._v("SendResponse")]),t._v(", send a response because endpointB returns data,")]),t._v(" "),n("li",[n("strong",[t._v("MdlwCtrlAfter")]),t._v(", but this middleware will not be called because a response is sent.")]),t._v(" "),n("li",[n("strong",[t._v("Middleware")]),t._v(" added in Server (not called too).")])]),t._v(" "),n("h2",{attrs:{id:"override-existing-middlewares"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#override-existing-middlewares"}},[t._v("#")]),t._v(" Override existing middlewares")]),t._v(" "),n("p",[t._v("The decorator "),n("ApiSymbolName",[t._v("OverrideProvider")]),t._v(" gives you the ability to override some internal Ts.ED middlewares.")],1),t._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("OriginalMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("OverrideProvider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OverrideProvider")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("OriginalMiddleware"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomMiddleware")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OriginalMiddleware")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" $ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n $ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("response"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Ts.ED response")]),t._v("\n $ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Ts.ED resquest")]),t._v("\n $ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResponse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return Express.js or Koa.js response")]),t._v("\n $ctx"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRequest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return Express.js or Koa.js request")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Do something")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("use")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br")])]),n("p",[t._v("Here we use the new "),n("RouterLink",{attrs:{to:"/docs/platform-api.html"}},[t._v("Platform API")]),t._v(" to write our middleware.\nBy using "),n("ApiSymbolName",[t._v("Context")]),t._v(" decorator and "),n("ApiSymbolName",[t._v("PlatformContext")]),t._v(" class we can get some information:")],1),t._v(" "),n("ul",[n("li",[t._v("The data returned by the last executed endpoint,")]),t._v(" "),n("li",[t._v("The "),n("ApiSymbolName",[t._v("EndpointMetadata")]),t._v(" itself,")],1),t._v(" "),n("li",[t._v("The "),n("ApiSymbolName",[t._v("PlatformRequest")]),t._v(" and "),n("ApiSymbolName",[t._v("PlatformResponse")]),t._v(" classes abstraction. These classes allow better code abstraction by exposing methods that are agnostic to Express.js.")],1)]),t._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("By default, the server imports automatically your middlewares matching with this rules "),n("code",[t._v("${rootDir}/middlewares/**/*.ts")]),t._v(" (See "),n("RouterLink",{attrs:{to:"/docs/configuration.html"}},[t._v("componentScan configuration")]),t._v(").")],1),t._v(" "),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v(".\n├── src\n│ ├── controllers\n│ ├── services\n│ ├── middlewares\n│ └── Server.ts\n└── package.json\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br")])]),n("p",[t._v("If not, just import your middleware in your server or edit the "),n("RouterLink",{attrs:{to:"/docs/configuration.html"}},[t._v("componentScan configuration")]),t._v(".")],1),t._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./src/other/directory/CustomMiddleware"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br")])])]),t._v(" "),n("h2",{attrs:{id:"provided-middlewares"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#provided-middlewares"}},[t._v("#")]),t._v(" Provided middlewares")]),t._v(" "),n("ApiList",{attrs:{query:"symbolType: class AND tags: middleware"}})],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/60.131307b5.js b/assets/js/60.131307b5.js new file mode 100644 index 00000000000..1b7094fa777 --- /dev/null +++ b/assets/js/60.131307b5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{809:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"mongoose"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mongoose"}},[s._v("#")]),s._v(" Mongoose")]),s._v(" "),a("Banner",{attrs:{src:"/mongoose.png",height:"200",href:"http://mongoosejs.com/"}}),s._v(" "),a("p",[s._v("This tutorial shows you how you can use mongoose package with Ts.ED.")]),s._v(" "),a("Projects",{attrs:{type:"projects"}}),s._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[s._v("#")]),s._v(" Features")]),s._v(" "),a("p",[s._v("Currently, "),a("a",{attrs:{href:"https://www.npmjs.com/package/@tsed/mongoose",target:"_blank",rel:"noopener noreferrer"}},[a("code",[s._v("@tsed/mongoose")]),a("OutboundLink")],1),s._v(" allows you to:")]),s._v(" "),a("ul",[a("li",[s._v("Configure one or more MongoDB database connections via the "),a("code",[s._v("@Configuration")]),s._v(" configuration.\nAll databases will be initialized when the server starts during the server's "),a("code",[s._v("OnInit")]),s._v(" phase.")]),s._v(" "),a("li",[s._v("Declare a Model from a class with annotation,")]),s._v(" "),a("li",[s._v("Declare inherited models in a single collection via "),a("code",[s._v("@DiscriminatorKey")])]),s._v(" "),a("li",[s._v("Add a plugin, PreHook method and PostHook on your model")]),s._v(" "),a("li",[s._v("Inject a Model to a Service, Controller, Middleware, etc.")]),s._v(" "),a("li",[s._v("Create and manage multiple connections")])]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[a("code",[s._v("@tsed/mongoose")]),s._v(" uses the JsonSchema and its decorators to generate the mongoose schema.")])]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("Before using the "),a("code",[s._v("@tsed/mongoose")]),s._v(" package, we need to install the "),a("a",{attrs:{href:"https://www.npmjs.com/package/mongoose",target:"_blank",rel:"noopener noreferrer"}},[s._v("mongoose"),a("OutboundLink")],1),s._v(" module.")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save mongoose\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/mongoose\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev @tsed/testing-mongoose\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Since mongoose v5.11.0, the module expose his own file definition and can broke your build!\nTo solve it, install @tsed/mongoose v6.14.1 and remove the "),a("code",[s._v("@types/mongoose")]),s._v(" dependencies.")])]),s._v(" "),a("p",[s._v("Then import "),a("code",[s._v("@tsed/mongoose")]),s._v(" in your "),a("RouterLink",{attrs:{to:"/docs/configuration.html"}},[s._v("Configuration")]),s._v(":")],1),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Configuration",icon:"bx-code-alt"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// import mongoose ts.ed module")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mongoose"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Recommended: define default connection. All models without dbName will be assigned to this connection")]),s._v("\n url"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongodb://127.0.0.1:27017/default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n connectionOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"db2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n url"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongodb://127.0.0.1:27017/db2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n connectionOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"CodeSandbox",icon:"bxl-codepen"}},[a("iframe",{staticStyle:{width:"100%",height:"500px",border:"0","border-radius":"4px",overflow:"hidden"},attrs:{src:"https://codesandbox.io/embed/tsed-mongoose-example-omkbm?fontsize=14&hidenavigation=1&theme=dark",title:"tsed-mongoose-example",allow:"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"}})])],1),s._v(" "),a("h2",{attrs:{id:"mongooseservice"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mongooseservice"}},[s._v("#")]),s._v(" MongooseService")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("MongooseService")]),s._v(" lets you to retrieve an instance of Mongoose.Connection.")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MongooseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Service")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("mongooseService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MongooseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mongooseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// OR mongooseService.get("default");')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// GET Other connection")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" db2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" mongooseService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'db2'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h2",{attrs:{id:"decorators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[s._v("#")]),s._v(" Decorators")]),s._v(" "),a("p",[s._v("Ts.ED gives some decorators and services to write your code:")]),s._v(" "),a("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('mongoose')"}}),s._v(" "),a("p",[s._v("You can also use the common decorators to describe model (See "),a("RouterLink",{attrs:{to:"/docs/model.html"}},[s._v("models")]),s._v(" documentation):")],1),s._v(" "),a("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('schema')"}}),s._v(" "),a("h2",{attrs:{id:"declaring-a-mongoose-object-schema-or-model"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#declaring-a-mongoose-object-schema-or-model"}},[s._v("#")]),s._v(" Declaring a Mongoose object (schema or model)")]),s._v(" "),a("h3",{attrs:{id:"declaring-a-model"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#declaring-a-model"}},[s._v("#")]),s._v(" Declaring a Model")]),s._v(" "),a("p",[a("code",[s._v("@tsed/mongoose")]),s._v(" works with models which must be explicitly declared.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n unique"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h3",{attrs:{id:"declaring-a-model-to-a-specific-connection"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#declaring-a-model-to-a-specific-connection"}},[s._v("#")]),s._v(" Declaring a Model to a specific connection")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"db2"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n unique"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("h3",{attrs:{id:"declaring-a-schema"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#declaring-a-schema"}},[s._v("#")]),s._v(" Declaring a Schema")]),s._v(" "),a("p",[a("code",[s._v("@tsed/mongoose")]),s._v(" supports subdocuments which must be explicitly declared.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Schema")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n unique"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("Schema decorator accepts a second parameter to configure the Schema (See "),a("a",{attrs:{href:"https://mongoosejs.com/docs/guide.html#options",target:"_blank",rel:"noopener noreferrer"}},[s._v("Mongoose Schema"),a("OutboundLink")],1),s._v(")")])]),s._v(" "),a("h3",{attrs:{id:"declaring-properties"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#declaring-properties"}},[s._v("#")]),s._v(" Declaring Properties")]),s._v(" "),a("p",[s._v("By default, "),a("code",[s._v("@tsed/mongoose")]),s._v(" reuses the metadata stored by the decorators dedicated\nto describe a JsonSchema. These decorators come from the "),a("code",[s._v("@tsed/common")]),s._v(" package.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Ignore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Maximum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MaxLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Pattern"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Indexed"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Unique"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" Categories "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CAT1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cat1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CAT2")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cat2"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ignore")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// exclude _id from mongoose in the generated schema")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Or rename _id by id (for response sent to the client)")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Unique")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n unique"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Indexed")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MinLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("50")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n indexed"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Maximum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n rate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Number "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Categories"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// or @Enum("type1", "type2")')]),s._v("\n category"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Categories"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Pattern")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token regex"}},[a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token regex-source language-regex"}},[s._v("[a-z]")]),a("span",{pre:!0,attrs:{class:"token regex-delimiter"}},[s._v("/")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// equivalent of match field in mongoose")]),s._v("\n pattern"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Format")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date-time"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Default")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("now"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n dateCreation"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("It isn't necessary to use "),a("ApiSymbolName",[s._v("Property")]),s._v(" decorator on property when you use one of these decorators:")],1),s._v(" "),a("ApiList",{attrs:{query:"(status.indexOf('jsonschema') > -1 || status.indexOf('mongoose') > -1 && status.indexOf('property') > -1) && status.indexOf('decorator') > -1"}}),s._v(" "),a("p",[s._v("These decorators call automatically the "),a("ApiSymbolName",[s._v("Property")]),s._v(" decorator.")],1)],1),s._v(" "),a("h3",{attrs:{id:"collections"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#collections"}},[s._v("#")]),s._v(" Collections")]),s._v(" "),a("p",[s._v("Mongoose and "),a("code",[s._v("@tsed/mongoose")]),s._v(" support both lists and maps.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n list"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n map"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Map"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// key must be a string.")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h3",{attrs:{id:"subdocuments"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#subdocuments"}},[s._v("#")]),s._v(" Subdocuments")]),s._v(" "),a("p",[a("code",[s._v("@tsed/mongoose")]),s._v(" supports "),a("code",[s._v("mongoose")]),s._v(" subdocuments as long as they are defined schemas. Therefore, subdocuments must be decorated by "),a("code",[s._v("@Schema()")]),s._v(".")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Schema")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MySchema")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n schema"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MySchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MySchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n schemes"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MySchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("h3",{attrs:{id:"references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[s._v("#")]),s._v(" References")]),s._v(" "),a("p",[a("code",[s._v("@tsed/mongoose")]),s._v(" supports "),a("code",[s._v("mongoose")]),s._v(" references between defined models.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Ref"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyRef")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ref")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyRef"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MyRef"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ref")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyRef"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n refs"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MyRef"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ref")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyRef"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n refs"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Map"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MyRef"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("h3",{attrs:{id:"circular-references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#circular-references"}},[s._v("#")]),s._v(" Circular References")]),s._v(" "),a("p",[a("code",[s._v("@tsed/mongoose")]),s._v(" supports "),a("code",[s._v("mongoose")]),s._v(" circular references between defined models.\nWhen you have models that either both refer to each other, or refer to themselves there is a slightly different way to declare this inside those models.")]),s._v(" "),a("p",[s._v("In this example a "),a("strong",[s._v("Customer")]),s._v(" has many "),a("strong",[s._v("Contracts")]),s._v(" and each "),a("strong",[s._v("Contract")]),s._v(" has a reference back to the "),a("strong",[s._v("Customer")]),s._v(". This is declared using an arrow function.")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("() => ModelName\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Customer")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ref")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" Contract"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" Contract"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n contracts"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Contract"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Contract")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ref")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" Customer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n customer"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Customer"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n contractName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br")])]),a("h3",{attrs:{id:"virtual-references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#virtual-references"}},[s._v("#")]),s._v(" Virtual References")]),s._v(" "),a("p",[a("code",[s._v("@tsed/mongoose")]),s._v(" supports "),a("code",[s._v("mongoose")]),s._v(" virtual references between defined models.")]),s._v(" "),a("p",[s._v("The same rules for Circular References apply ("),a("strong",[s._v("See above")]),s._v(");")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Ref"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" VirtualRef"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" VirtualRefs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Person")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n band"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Band")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("VirtualRef")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// The model to use")]),s._v("\n localField"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Find people where `localField`")]),s._v("\n foreignField"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"band"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// is equal to `foreignField`")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// If `justOne` is true, 'members' will be a single doc as opposed to")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// an array. `justOne` is false by default.")]),s._v("\n justOne"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Query options, see http://bit.ly/mongoose-query-options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n members"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" VirtualRefs"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Person"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("VirtualRef")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Person"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// The model to use")]),s._v("\n localField"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Find people where `localField`")]),s._v("\n foreignField"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"band"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// is equal to `foreignField`")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// If `count` is true, 'memberCount' will be the number of documents")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// instead of an array.")]),s._v("\n count"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n memberCount"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyRef")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("VirtualRef")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" justOne"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n virtual"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" VirtualRef"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MyModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("VirtualRef")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MyModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n virtuals"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" VirtualRefs"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MyModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ref")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyRef"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Ref"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MyRef"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br")])]),a("h3",{attrs:{id:"dynamic-references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dynamic-references"}},[s._v("#")]),s._v(" Dynamic References")]),s._v(" "),a("p",[a("code",[s._v("@tsed/mongoose")]),s._v(" supports "),a("code",[s._v("mongoose")]),s._v(" dynamic references between defined models.")]),s._v(" "),a("p",[s._v("This works by having a field with the referenced object model's name and a field with the referenced field.")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Example"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DynamicRef"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ClickedLinkEventModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n url"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SignedUpEventModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EventModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("DynamicRef")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"eventType"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ClickedLinkEventModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" SignedUpEventModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n event"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" DynamicRef"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ClickedLinkEventModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" SignedUpEventModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ClickedLinkEventModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SignedUpEventModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n eventType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ClickedLinkEventModel"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SignedUpEventModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"JsonSchema"}},[a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"definitions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"ClickedLinkEventModel"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Mongoose ObjectId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"examples"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5ce7ad3028890bd71749d477"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"pattern"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^[0-9a-fA-F]{24}$"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"url"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"SignedUpEventModel"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Mongoose ObjectId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"examples"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5ce7ad3028890bd71749d477"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"pattern"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^[0-9a-fA-F]{24}$"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"minLength"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"properties"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"event"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Mongoose Ref ObjectId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"examples"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5ce7ad3028890bd71749d477"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"oneOf"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Mongoose Ref ObjectId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"examples"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5ce7ad3028890bd71749d477"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/definitions/ClickedLinkEventModel"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"$ref"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"#/definitions/SignedUpEventModel"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"eventType"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"enum"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ClickedLinkEventModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SignedUpEventModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Mongoose ObjectId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"examples"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"5ce7ad3028890bd71749d477"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"pattern"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"^[0-9a-fA-F]{24}$"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"string"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"object"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"decimal-numbers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decimal-numbers"}},[s._v("#")]),s._v(" Decimal Numbers")]),s._v(" "),a("p",[a("code",[s._v("@tsed/mongoose")]),s._v(" supports "),a("code",[s._v("mongoose")]),s._v(" 128-bit decimal floating points data type "),a("a",{attrs:{href:"https://mongoosejs.com/docs/api.html#mongoose_Mongoose-Decimal128",target:"_blank",rel:"noopener noreferrer"}},[s._v("Decimal128"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("p",[s._v("The "),a("ApiSymbolName",[s._v("NumberDecimal")]),s._v(" decorator is used to set Decimal128 type for number fields.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" NumberDecimal"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Decimal128"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ProductModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n sku"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("NumberDecimal")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n price"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Decimal128"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("p",[s._v("Optionally a custom decimal type implementation, such as "),a("a",{attrs:{href:"https://www.npmjs.com/package/big.js",target:"_blank",rel:"noopener noreferrer"}},[s._v("big.js"),a("OutboundLink")],1),s._v(", can be used by passing a constructor to the field decorator.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" NumberDecimal"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Big "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"big.js"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PriceModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("NumberDecimal")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Big"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n price"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Big"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("h2",{attrs:{id:"register-hook"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#register-hook"}},[s._v("#")]),s._v(" Register hook")]),s._v(" "),a("p",[s._v("Mongoose allows the developer to add pre and post "),a("a",{attrs:{href:"http://mongoosejs.com/docs/middleware.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("hooks / middlewares"),a("OutboundLink")],1),s._v(" to the schema.\nWith this it is possible to add document transformations and observations before or after validation, save and more.")]),s._v(" "),a("p",[s._v("Ts.ED provides class decorator to register middlewares on the pre and post hook.")]),s._v(" "),a("h3",{attrs:{id:"pre-hook"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pre-hook"}},[s._v("#")]),s._v(" Pre hook")]),s._v(" "),a("p",[s._v("We can simply attach a "),a("ApiSymbolName",[s._v("PreHook")]),s._v(" decorator to the model class and\ndefine the hook function like we would normally do in Mongoose.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PreHook"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PreHook")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"save"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("model "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Tesla"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n car"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("isFast "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CarModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n model"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n isFast"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// or Prehook on static method")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PreHook")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"save"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("preSave")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("model "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Tesla"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n car"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("isFast "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])]),a("p",[s._v("This will execute the pre-save hook each time a "),a("code",[s._v("CarModel")]),s._v(" document is saved.")]),s._v(" "),a("h3",{attrs:{id:"post-hook"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#post-hook"}},[s._v("#")]),s._v(" Post hook")]),s._v(" "),a("p",[s._v("We can simply attach a "),a("ApiSymbolName",[s._v("PostHook")]),s._v(" decorator to the model class and\ndefine the hook function like we would normally do in Mongoose.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PostHook"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PostHook")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"save"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("topSpeedInKmH "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("300")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"is fast!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CarModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n model"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n isFast"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// or Prehook on static method")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PostHook")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"save"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("postSave")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("topSpeedInKmH "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("300")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("car"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"is fast!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br")])]),a("p",[s._v("This will execute the post-save hook each time a "),a("code",[s._v("CarModel")]),s._v(" document is saved.")]),s._v(" "),a("h2",{attrs:{id:"plugin"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#plugin"}},[s._v("#")]),s._v(" Plugin")]),s._v(" "),a("p",[s._v("Using the "),a("ApiSymbolName",[s._v("Plugin")]),s._v(" decorator enables the developer to attach various Mongoose plugins to the schema.\nJust like the regular "),a("code",[s._v("schema.plugin()")]),s._v(" call, the decorator accepts 1 or 2 parameters: the plugin itself, and an optional configuration object.\nMultiple "),a("code",[s._v("plugin")]),s._v(" decorator can be used for a single model class.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// eslint")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MongooseModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MongoosePlugin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" findOrCreate "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongoose-findorcreate"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MongoosePlugin")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("findOrCreate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// this isn't the complete method signature, just an example")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOrCreate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("condition"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" InstanceType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("doc"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" InstanceType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" created"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" userModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MongooseModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOrCreate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("then")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("findOrCreateResult"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("h2",{attrs:{id:"discriminators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#discriminators"}},[s._v("#")]),s._v(" Discriminators")]),s._v(" "),a("p",[s._v("Set the "),a("code",[s._v("@DiscriminatorKey")]),s._v(" decorator on a property in the parent class to define the name of the field for the discriminator value.")]),s._v(" "),a("p",[s._v("Extend the child model classes from the parent class. By default the value for the discriminator field is the class name but it can be overwritten via the "),a("code",[s._v("discriminatorValue")]),s._v(" option on the model.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DiscriminatorValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" DiscriminatorKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EventModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n time"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("DiscriminatorKey")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ClickedLinkEventModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EventModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n url"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("DiscriminatorValue")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sign_up_event"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SignedUpEventModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("EventModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("For further information, please refer to the "),a("a",{attrs:{href:"https://mongoosejs.com/docs/discriminators.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("mongoose documentation about discriminators"),a("OutboundLink")],1),s._v(".")])]),s._v(" "),a("h2",{attrs:{id:"document-versioning"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#document-versioning"}},[s._v("#")]),s._v(" Document Versioning")]),s._v(" "),a("p",[s._v("Set the "),a("code",[s._v("@VersionKey")]),s._v(" decorator on a "),a("code",[s._v("number")]),s._v(" property to define the name of the field used for versioning and optimistic concurrency.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" VersionKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PostModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("VersionKey")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n version"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("For further information, please refer to the "),a("a",{attrs:{href:"https://mongoosejs.com/docs/guide.html#versionKey",target:"_blank",rel:"noopener noreferrer"}},[s._v("mongoose documentation about the versionKey option"),a("OutboundLink")],1),s._v(".")])]),s._v(" "),a("h2",{attrs:{id:"inject-model"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#inject-model"}},[s._v("#")]),s._v(" Inject model")]),s._v(" "),a("p",[s._v("It's possible to inject a model into a Service (or Controller, Middleware, etc...):")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MongooseModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./models/MyModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyRepository")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" model"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MongooseModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MyModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MongooseModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MyModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" doc "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("model")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" doc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" doc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("query"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" list "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("exec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("You can find a working example on "),a("a",{attrs:{href:"https://github.com/tsedio/tsed-example-mongoose",target:"_blank",rel:"noopener noreferrer"}},[s._v("Mongoose here"),a("OutboundLink")],1),s._v(".")])]),s._v(" "),a("h3",{attrs:{id:"caveat"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#caveat"}},[s._v("#")]),s._v(" Caveat "),a("Badge",{attrs:{text:"v6.14.4"}})],1),s._v(" "),a("p",[s._v("Mongoose doesn't return a real instance of your class. If you inspected the returned item by one of mongoose's methods,\nyou'll see that the instance is as Model type instead of the expected class:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MongooseModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./models/Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyRepository")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" model"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MongooseModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("query"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" list "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("exec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Model { Product }")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("p",[s._v("There is no proper solution currently to have the expected instance without transforming the current instance to\nthe class with the "),a("ApiSymbolName",[s._v("deserialize")]),s._v(" function.")],1),s._v(" "),a("p",[s._v("To simplify this, Ts.ED adds a "),a("code",[s._v("toClass")]),s._v(" method to the MongooseModel to find, if necessary, an instance of type Product.")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MongooseModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./models/Product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyRepository")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" model"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MongooseModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Product"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("query"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" list "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("exec")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Model { Product }")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toClass")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Product {}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])]),a("h2",{attrs:{id:"testing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[s._v("#")]),s._v(" Testing")]),s._v(" "),a("p",[s._v("The package "),a("a",{attrs:{href:"https://www.npmjs.com/package/@tsed/testing-mongoose",target:"_blank",rel:"noopener noreferrer"}},[a("code",[s._v("@tsed/testing-mongoose")]),a("OutboundLink")],1),s._v(" allows you to test your server with a memory database.")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("This package uses the amazing "),a("a",{attrs:{href:"https://www.npmjs.com/package/mongodb-memory-server",target:"_blank",rel:"noopener noreferrer"}},[s._v("mongodb-memory-server"),a("OutboundLink")],1),s._v(" to mock the mongo database.")])]),s._v(" "),a("h3",{attrs:{id:"testing-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing-api"}},[s._v("#")]),s._v(" Testing API")]),s._v(" "),a("p",[s._v("This example shows you how you can test your Rest API with superagent and a mocked Mongo database:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/testing-mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// bootstrap your Server to load all endpoints before run your test")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("let")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Create a server with mocked database")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// reset database and injector")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"GET /rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should do something"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("typeof")]),s._v(" response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/testing-mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// bootstrap your Server to load all endpoints before run your test")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("let")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("platform"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Create a server with mocked database")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("done"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("done")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// reset database and injector")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"GET /rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should do something"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("an")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("To increase mocha timeout from 2000ms to 10000ms use option "),a("code",[s._v("--timeout 10000")]),s._v(".")])]),s._v(" "),a("h3",{attrs:{id:"testing-api-with-replicaset"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing-api-with-replicaset"}},[s._v("#")]),s._v(" Testing API with ReplicaSet")]),s._v(" "),a("p",[s._v("A "),a("a",{attrs:{href:"https://github.com/nodkz/mongodb-memory-server#replica-set-start",target:"_blank",rel:"noopener noreferrer"}},[s._v("ReplicaSet"),a("OutboundLink")],1),s._v(" can be easily started with:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/testing-mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// bootstrap your Server to load all endpoints before run your test")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("let")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n platform"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n mongod"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n replicaSet"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Create a server with mocked database")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("done"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("SuperTest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("done")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// reset database and injector")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"GET /rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should do something"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("an")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br")])]),a("h3",{attrs:{id:"jest-additional-setup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jest-additional-setup"}},[s._v("#")]),s._v(" Jest additional setup")]),s._v(" "),a("p",[s._v("Add a script to close connection after all unit test. In your jest configuration file add the following line:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"globalTeardown"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./scripts/jest/teardown.js"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("p",[s._v("And create the script with the following content:")]),s._v(" "),a("div",{staticClass:"language-js line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[s._v("module"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[s._v("exports")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" global"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("__MONGOD__"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" global"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("__MONGOD__"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stop")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("h3",{attrs:{id:"testing-model"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing-model"}},[s._v("#")]),s._v(" Testing Model")]),s._v(" "),a("p",[s._v("This example shows you how can test the model:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MongooseModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PostHook"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PreHook"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Unique"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/testing-mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("schemaOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("timestamps"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PreHook")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"save"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("pre "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello pre"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PostHook")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"save"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("post "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello post"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Unique")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n pre"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n post"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"UserModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should run pre and post hook"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" userModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MongooseModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// GIVEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("userModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test@test.fr"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// WHEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// THEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("pre"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello pre"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello post"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MongooseModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ObjectID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PostHook"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PreHook"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Unique"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/testing-mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Model")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("schemaOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("timestamps"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PreHook")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"save"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("pre "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello pre"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PostHook")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"save"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" next"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("post "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello post"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ObjectID")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n _id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Unique")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n pre"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n post"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"UserModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TestMongooseContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should run pre and post hook"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" userModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("MongooseModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// GIVEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("userModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test@test.fr"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// WHEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// THEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("pre"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello pre"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello post"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers")]),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/61.f1a2c1bc.js b/assets/js/61.f1a2c1bc.js new file mode 100644 index 00000000000..b2ea06d7a07 --- /dev/null +++ b/assets/js/61.f1a2c1bc.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{808:function(t,s,e){"use strict";e.r(s);var i=e(1),l=Object(i.a)({},(function(){var t=this.$createElement,s=this._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[s("h1",{attrs:{id:"multer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#multer"}},[this._v("#")]),this._v(" Multer")]),this._v(" "),s("p",[this._v("This page has moved to "),s("RouterLink",{attrs:{to:"/docs/upload-files.html"}},[this._v("/docs/upload-files.html")]),this._v(".")],1)])}),[],!1,null,null,null);s.default=l.exports}}]); \ No newline at end of file diff --git a/assets/js/62.459dcf8e.js b/assets/js/62.459dcf8e.js new file mode 100644 index 00000000000..51d47b0a406 --- /dev/null +++ b/assets/js/62.459dcf8e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{810:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"objection-js"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#objection-js"}},[s._v("#")]),s._v(" Objection.js")]),s._v(" "),a("Badge",{attrs:{text:"alpha"}}),s._v(" "),a("Badge",{attrs:{text:"Contributors are welcome"}}),s._v(" "),a("p",[s._v("This tutorial show yous how you can use "),a("a",{attrs:{href:"https://vincit.github.io/objection.js/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Objection.js"),a("OutboundLink")],1),s._v(" package with Ts.ED.")]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("Before using the "),a("code",[s._v("@tsed/objection")]),s._v(" package, we need to install the "),a("a",{attrs:{href:"https://www.npmjs.com/package/objection",target:"_blank",rel:"noopener noreferrer"}},[s._v("Obection.js"),a("OutboundLink")],1),s._v(" and "),a("a",{attrs:{href:"https://www.npmjs.com/package/knex",target:"_blank",rel:"noopener noreferrer"}},[s._v("Knex"),a("OutboundLink")],1),s._v(" modules.")]),s._v(" "),a("p",[s._v("Install the dependencies:")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/objection objection knex\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("We also need to install one of the following depending on the database you want to use:")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" pg\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" sqlite3\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" mysql\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" mysql2\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[s._v("#")]),s._v(" Configuration")]),s._v(" "),a("p",[s._v("Add a "),a("code",[s._v("knex")]),s._v(" configuration to your Ts.ED configuration (see: http://knexjs.org/#Installation-client for options):")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/objection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// don't forget to add this line!")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n knex"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n client"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sqlite3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('":memory:"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),a("p",[s._v("You can use the "),a("ApiSymbolName",[s._v("Entity")]),s._v(" decorator to create your models and make them work with Objection.js. "),a("code",[s._v("Entity")]),s._v(" expects the table name as its argument.")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MinLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MaxLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" IdColumn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/objection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"objection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Entity")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("IdColumn")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Decimal")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("scale"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" precision"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("12")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n score"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n active"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("h2",{attrs:{id:"relationships"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#relationships"}},[s._v("#")]),s._v(" Relationships")]),s._v(" "),a("p",[s._v("Ts.ED enables you to define relationships between models on properties directly, using decorators such as "),a("ApiSymbolName",[s._v("BelongsToOne")]),s._v(", "),a("ApiSymbolName",[s._v("HasMany")]),s._v(", "),a("ApiSymbolName",[s._v("HasOne")]),s._v(", "),a("ApiSymbolName",[s._v("HasOneThroughRelation")]),s._v(", "),a("ApiSymbolName",[s._v("ManyToMany")]),s._v(" or "),a("ApiSymbolName",[s._v("RelatesTo")]),s._v(".")],1),s._v(" "),a("p",[s._v("You can supply a configuration object via ("),a("ApiSymbolName",[s._v("RelationshipOpts")]),s._v(") into the decorator factor to override the default join keys and configure a relationship like you normally would via "),a("code",[s._v("relationMappings")]),s._v(". For collection-type relationships, you must also specify the model you wish to use and we will also apply the "),a("ApiSymbolName",[s._v("CollectionOf")]),s._v(" decorator for you automatically.")],1),s._v(" "),a("p",[s._v("This expressive usage ensures that your domain models are correctly typed for usage alongside "),a("a",{attrs:{href:"https://vincit.github.io/objection.js/api/query-builder/eager-methods.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("Objection.js's Graph API"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * All work in a similar manner:\n * - @HasMany, @HasOne, @HasOneThroughRelation, @ManyToMany, @RelatesTo\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BelongsToOne"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/objection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Entity")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("IdColumn")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Entity")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"movie"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Movie")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Model")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("IdColumn")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n ownerId"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BelongsToOne")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n owner"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Retrieve the related user")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" owner "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" Movie"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("relatedQuery")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"owner"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Retrieve the movie with their owner")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" movie "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" Movie"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("withGraphFetched")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"owner"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])]),a("h3",{attrs:{id:"default-joining-keys"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#default-joining-keys"}},[s._v("#")]),s._v(" Default joining keys")]),s._v(" "),a("p",[s._v("When used in conjunction with "),a("ApiSymbolName",[s._v("Entity")]),s._v(" and "),a("ApiSymbolName",[s._v("IdColumn")]),s._v(", Ts.ED attempts to provide you with a sensible default for your join keys out of the box, reducing the amount of boilerplate you need to write.")],1),s._v(" "),a("p",[s._v("In the instance of "),a("ApiSymbolName",[s._v("BelongsToOne")]),s._v(", the default join keys will be:")],1),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"from"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('".Id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"."')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("An example of the keys outputted above could be "),a("code",[s._v("movie.ownerId")]),s._v(" and "),a("code",[s._v("user.id")]),s._v(" respectively.")])]),s._v(" "),a("p",[s._v("In the instances of "),a("ApiSymbolName",[s._v("HasMany")]),s._v(" and "),a("ApiSymbolName",[s._v("HasOne")]),s._v(", the default join keys will be:")],1),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"from"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('".Id"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("An example of the keys outputted above could be "),a("code",[s._v("user.id")]),s._v(" and "),a("code",[s._v("authentication.userId")]),s._v(" respectively.")])]),s._v(" "),a("p",[s._v("In the instances of "),a("ApiSymbolName",[s._v("ManyToMany")]),s._v(" and "),a("ApiSymbolName",[s._v("HasOneThroughRelation")]),s._v(", the default join key will be:")],1),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"from"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"through"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"from"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"_.Id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"_.Id"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"to"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"."')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("An example of the keys outputted above could be "),a("code",[s._v("user.id")]),s._v(", "),a("code",[s._v("user_authentication.userId")]),s._v(", "),a("code",[s._v("user_authentication.authenticationId")]),s._v(" and "),a("code",[s._v("authentication.id")]),s._v(" respectively.")])]),s._v(" "),a("h2",{attrs:{id:"get-connection"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-connection"}},[s._v("#")]),s._v(" Get connection")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("OBJECTION_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/objection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("OBJECTION_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("OBJECTION_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h2",{attrs:{id:"migration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#migration"}},[s._v("#")]),s._v(" Migration")]),s._v(" "),a("p",[s._v("Ts.ED can create columns based on the declared Model. Using "),a("ApiSymbolName",[s._v("createColumns")]),s._v(", you can implement\na migration file as following:")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("createColumns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/objection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../domain/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" Knex "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"objection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("up")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("knex"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Knex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" knex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("createTable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("tableName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("table"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Knex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("TableBuilder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// createColumns for the given model")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("createColumns")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("table"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("down")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("knex"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Knex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" knex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("dropTable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("h2",{attrs:{id:"decorators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[s._v("#")]),s._v(" Decorators")]),s._v(" "),a("p",[s._v("Ts.ED gives some decorators and services to write your code:")]),s._v(" "),a("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('objection')"}}),s._v(" "),a("p",[s._v("You can also use the common decorators to describe model (See "),a("RouterLink",{attrs:{to:"/docs/model.html"}},[s._v("models")]),s._v(" documentation):")],1),s._v(" "),a("ApiList",{attrs:{query:"status.includes('decorator') && status.includes('schema')"}}),s._v(" "),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:["stefanvanherwijnen"]}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers")]),s._v(" "),a("GithubContributors",{attrs:{users:["stefanvanherwijnen"]}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/63.a812906b.js b/assets/js/63.a812906b.js new file mode 100644 index 00000000000..e9bde1158ca --- /dev/null +++ b/assets/js/63.a812906b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{813:function(s,t,a){"use strict";a.r(t);var n=a(1),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"passport-js"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#passport-js"}},[s._v("#")]),s._v(" Passport.js")]),s._v(" "),a("Banner",{attrs:{src:"/passportjs.png",height:"128",href:"http://www.passportjs.org/"}}),s._v(" "),a("blockquote",[a("p",[s._v("Passport is an authentication middleware for Node.js.")])]),s._v(" "),a("p",[s._v("Extremely flexible and modular, Passport can be unobtrusively dropped in to any Express-based web application.\nA comprehensive set of strategies support authentication using a username and password, Facebook, Twitter, and more.")]),s._v(" "),a("Projects",{attrs:{type:"projects"}}),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("Before using Passport, we need to install the "),a("a",{attrs:{href:"https://www.npmjs.com/package/passport",target:"_blank",rel:"noopener noreferrer"}},[s._v("Passport.js"),a("OutboundLink")],1),s._v(" and the Passport-local.")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save passport\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h2",{attrs:{id:"configure-your-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configure-your-server"}},[s._v("#")]),s._v(" Configure your server")]),s._v(" "),a("p",[s._v("Add this configuration to your server:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" bodyParser "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"body-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" cookieParser "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" session "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"express-session"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" methodOverride "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// import your protocol. Ts.ED will discover it automatically")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./protocols/LoginLocalProtocol"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n passport"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * Set a custom user info model. By default Ts.ED use UserInfo. Set false to disable Ts.ED json-mapper.\n */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// userInfoModel: CustomUserInfoModel")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// userProperty: string,")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// pauseStream: string,")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// disableSession: boolean")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n app"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("app\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cookieParser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("methodOverride")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("bodyParser"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("json")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n bodyParser"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("urlencoded")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n extended"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// @ts-ignore")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("session")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mysecretkey"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n resave"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n saveUninitialized"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// maxAge: 36000,")]),s._v("\n cookie"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n httpOnly"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n secure"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br")])]),a("h3",{attrs:{id:"userinfo"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#userinfo"}},[s._v("#")]),s._v(" UserInfo")]),s._v(" "),a("p",[s._v("By default Ts.ED use a UserInfo model to serialize and deserialize user in session:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserInfo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Format")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("p",[s._v("You can set your own UserInfo model by changing the passport server configuration:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CustomUserInfoModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n token"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n passport"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n userInfoModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CustomUserInfoModel\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("p",[s._v("It's also possible to disable model serialize/deserialize by setting a false value to "),a("code",[s._v("userInfoModel")]),s._v(" options.")]),s._v(" "),a("h2",{attrs:{id:"create-a-new-protocol"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-new-protocol"}},[s._v("#")]),s._v(" Create a new Protocol")]),s._v(" "),a("p",[s._v("A Protocol is a special Ts.ED service which is used to declare a Passport Strategy and handle Passport lifecycle.")]),s._v(" "),a("p",[s._v("Here is an example with the PassportLocal:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"LoginLocalProtocol.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BeforeInstall"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnInstall"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnVerify"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Protocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("IStrategyOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport-local"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Credentials"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Credentials"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/users/UsersService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Protocol")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("IStrategyOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"login"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useStrategy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n usernameField"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n passwordField"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("LoginLocalProtocol")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OnVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnInstall"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BeforeInstall "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" usersService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// hook added with v6.99.0")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeInstall")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" IStrategyOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("IStrategyOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// load something from backend")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// settings.usernameField = await this.usersService.loadFieldConfiguration()")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" settings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInstall")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("strategy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// intercept the strategy instance to adding extra configuration")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" credentials"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Credentials"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" password"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" credentials"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// OR throw new NotAuthorized("Wrong credentials")')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("verifyPassword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("password"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// OR throw new NotAuthorized("Wrong credentials")')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"LoginLocalProtocol.spec.ts"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" Sinon "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"sinon"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/users/UsersService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("LoginLocalProtocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./LoginLocalProtocol"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"LoginLocalProtocol"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("reset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('".$onVerify()"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return a user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// GIVEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" email "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email@domain.fr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" password "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("email "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("password "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" password"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" usersService "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n findOne"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("resolves")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" protocol"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" LoginLocalProtocol "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("invoke")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("LoginLocalProtocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n token"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n use"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" usersService\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// WHEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" protocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" password"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// THEN")]),s._v("\n usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("findOne"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("should"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("calledWithExactly")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email@domain.fr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("should"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return a user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// GIVEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" email "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email@domain.fr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" password "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("email "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("password "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("password"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" usersService "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n findOne"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("resolves")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" protocol"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" LoginLocalProtocol "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("invoke")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("LoginLocalProtocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n token"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n use"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" usersService\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// WHEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" protocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" password"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// THEN")]),s._v("\n usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("findOne"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("should"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("calledWithExactly")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email@domain.fr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("should"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should return a false when user isn\'t found"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// GIVEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" email "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email@domain.fr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" password "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" usersService "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n findOne"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Sinon"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("stub")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("resolves")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" protocol"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" LoginLocalProtocol "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("invoke")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("LoginLocalProtocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n token"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n use"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" usersService\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// WHEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" protocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" password"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// THEN")]),s._v("\n usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("findOne"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("should"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("be"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("calledWithExactly")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email@domain.fr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("should"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br"),a("span",{staticClass:"line-number"},[s._v("73")]),a("br"),a("span",{staticClass:"line-number"},[s._v("74")]),a("br"),a("span",{staticClass:"line-number"},[s._v("75")]),a("br"),a("span",{staticClass:"line-number"},[s._v("76")]),a("br"),a("span",{staticClass:"line-number"},[s._v("77")]),a("br"),a("span",{staticClass:"line-number"},[s._v("78")]),a("br"),a("span",{staticClass:"line-number"},[s._v("79")]),a("br"),a("span",{staticClass:"line-number"},[s._v("80")]),a("br"),a("span",{staticClass:"line-number"},[s._v("81")]),a("br"),a("span",{staticClass:"line-number"},[s._v("82")]),a("br"),a("span",{staticClass:"line-number"},[s._v("83")]),a("br"),a("span",{staticClass:"line-number"},[s._v("84")]),a("br"),a("span",{staticClass:"line-number"},[s._v("85")]),a("br"),a("span",{staticClass:"line-number"},[s._v("86")]),a("br"),a("span",{staticClass:"line-number"},[s._v("87")]),a("br"),a("span",{staticClass:"line-number"},[s._v("88")]),a("br"),a("span",{staticClass:"line-number"},[s._v("89")]),a("br"),a("span",{staticClass:"line-number"},[s._v("90")]),a("br"),a("span",{staticClass:"line-number"},[s._v("91")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("For signup and basic flow you can checkout one of our examples:")]),s._v(" "),a("Projects",{attrs:{type:"projects"}})],1),s._v(" "),a("h2",{attrs:{id:"create-the-passport-controller"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-the-passport-controller"}},[s._v("#")]),s._v(" Create the Passport controller")]),s._v(" "),a("p",[s._v("Create a new Passport controller as following:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Authenticate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Scope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/auth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Scope")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ProviderScope"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("SINGLETON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AuthCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/login"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Authenticate")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"login"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" req"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// FACADE")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("p",[s._v("This controller will provide all required endpoints that will be used by the different protocols.")]),s._v(" "),a("h2",{attrs:{id:"protect-a-route"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#protect-a-route"}},[s._v("#")]),s._v(" Protect a route")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Authorize")]),s._v(" and "),a("ApiSymbolName",[s._v("Authenticate")]),s._v(" decorators can be used as a Guard to protect your routes.")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Authorize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Calendar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Calendar"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CalendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../service/CalendarsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" calendarsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CalendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Authorize")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"owner"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" owner"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Calendar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("calendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("_id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" owner"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])]),a("h2",{attrs:{id:"basic-auth"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#basic-auth"}},[s._v("#")]),s._v(" Basic Auth")]),s._v(" "),a("p",[s._v("It is also possible to use the Basic Auth. To do that, you have to create a Protocol based on "),a("code",[s._v("passport-http")]),s._v(" strategy.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Arg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnInstall"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnVerify"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Protocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BasicStrategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport-http"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/users/UsersService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("checkEmail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../utils/checkEmail"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Protocol")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"basic"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useStrategy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" BasicStrategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BasicProtocol")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OnVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnInstall "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" usersService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Arg")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" username"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Arg")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("checkEmail")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("username"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" username"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("verifyPassword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("password"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInstall")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("strategy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// intercept the strategy instance to adding extra configuration")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br")])]),a("p",[s._v("Then, add the protocol name on the "),a("ApiSymbolName",[s._v("Authorize")]),s._v(" decorator:")],1),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Authorize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Calendar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Calendar"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CalendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../service/CalendarsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" calendarsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CalendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Authorize")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"basic"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"owner"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" owner"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Calendar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("calendarsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("_id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" owner"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])]),a("h2",{attrs:{id:"advanced-auth"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#advanced-auth"}},[s._v("#")]),s._v(" Advanced Auth")]),s._v(" "),a("h3",{attrs:{id:"jwt"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jwt"}},[s._v("#")]),s._v(" JWT")]),s._v(" "),a("p",[s._v("JWT auth scenario, for example, is different. The Strategy will produce a payload which contains data and JWT token. This information\nisn't attached to the request and cannot be retrieved using the default Ts.ED decorator.")]),s._v(" "),a("p",[s._v("To solve it, the "),a("code",[s._v("@tsed/passport")]),s._v(" has two decorators "),a("ApiSymbolName",[s._v("Arg")]),s._v(" and "),a("ApiSymbolName",[s._v("Args")]),s._v(" to get the argument given to the original verify function by the Strategy.")],1),s._v(" "),a("p",[s._v("For example, the official "),a("code",[s._v("passport-jwt")]),s._v(" documentation gives this javascript code to configure the strategy:")]),s._v(" "),a("div",{staticClass:"language-js line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("JwtStrategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ExtractJwt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport-jwt"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" opts "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\nopts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("jwtFromRequest "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ExtractJwt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("fromAuthHeaderAsBearerToken")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\nopts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("secretOrKey "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"secret"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\nopts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("issuer "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"accounts.examplesoft.com"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\nopts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("audience "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yoursite.net"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\npassport"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JwtStrategy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("opts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("jwt_payload"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" done")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n authService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("id")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" jwt_payload"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sub"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" user")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("done")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("err"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("done")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("else")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("done")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// or you could create a new account")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("p",[s._v("The example code can be written with Ts.ED as following:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Arg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnVerify"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Protocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ExtractJwt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" StrategyOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport-jwt"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AuthService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/auth/AuthService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Protocol")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("StrategyOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"jwt"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useStrategy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n jwtFromRequest"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ExtractJwt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("fromAuthHeaderAsBearerToken")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n secretOrKey"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"secret"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n issuer"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"accounts.examplesoft.com"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n audience"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yoursite.net"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("JwtProtocol")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OnVerify")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" authService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" AuthService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" req"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Arg")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" jwtPayload"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("authService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" jwtPayload"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("sub"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])]),a("h3",{attrs:{id:"azure-bearer-auth"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#azure-bearer-auth"}},[s._v("#")]),s._v(" Azure Bearer Auth")]),s._v(" "),a("p",[s._v("Azure bearer uses another scenario which requires to return multiple arguments. The "),a("code",[s._v("$onVerify")]),s._v(" method accepts an "),a("code",[s._v("Array")]),s._v(" to return multiple values.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Arg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnVerify"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PassportMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Protocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BearerStrategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ITokenPayload"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport-azure-ad"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AuthService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/auth/AuthService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Protocol")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"azure-bearer"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useStrategy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" BearerStrategy\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AzureBearerProtocol")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OnVerify")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" authService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" AuthService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Arg")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" token"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ITokenPayload"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Verify is the right place to check given token and return UserInfo")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("authService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("options "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PassportMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// retrieve options configured for the endpoint")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// check precondition and authenticate user by their token and given options")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" authService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("verify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" options"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n authService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("event"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"BearerStrategy - token: "')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("event"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"BearerStrategy - user: "')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("catch")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("event"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"BearerStrategy"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br")])]),a("h3",{attrs:{id:"discord-auth"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#discord-auth"}},[s._v("#")]),s._v(" Discord Auth")]),s._v(" "),a("p",[s._v("Discord passport gives an example to refresh the token. To do that you have to create a new Strategy and register with the refresh function from "),a("code",[s._v("passport-oauth2-refresh")]),s._v(" module.")]),s._v(" "),a("p",[s._v("Here is the JavaScript code:")]),s._v(" "),a("div",{staticClass:"language-js line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-js"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport-discord"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\npassport"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Strategy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("clientID")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("clientSecret")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"secret"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("callbackURL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"callbackURL"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[s._v("accessToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" refreshToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" profile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" cb")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n authService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOrCreate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[s._v("discordId")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" profile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" cb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("p",[s._v("Ts.ED provides a way to handle the strategy built by the "),a("code",[s._v("@tsed/passport")]),s._v(" by using the "),a("code",[s._v("$onInstall")]),s._v(" hook.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnInstall"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnVerify"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Protocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" StrategyOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport-discord"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" refresh "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport-oauth2-refresh"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AuthService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/auth/AuthService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Protocol")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("StrategyOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"discord"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useStrategy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n clientID"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n clientSecret"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"secret"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n callbackURL"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"callbackURL"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DiscordProtocol")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OnVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnInstall "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" authService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" AuthService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" req"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Args")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("accessToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" refreshToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" profile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n profile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("refreshToken "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" refreshToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("authService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("discordId"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" profile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInstall")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("strategy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n refresh"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br")])]),a("h3",{attrs:{id:"facebook-auth"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#facebook-auth"}},[s._v("#")]),s._v(" Facebook Auth")]),s._v(" "),a("p",[s._v("Facebook passport gives an example to use scope on routes (permissions). We'll see how we can configure a route with a mandatory "),a("code",[s._v("scope")]),s._v(".")]),s._v(" "),a("p",[s._v("Here is the corresponding Facebook protocol:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnInstall"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnVerify"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Protocol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" StrategyOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"passport-facebook"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AuthService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/auth/AuthService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Protocol")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("StrategyOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"facebook"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useStrategy"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Strategy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n settings"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n clientID"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"FACEBOOK_APP_ID"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n clientSecret"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"FACEBOOK_APP_SECRET"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n callbackURL"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"http://www.example.com/auth/facebook/callback"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n profileFields"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"emails"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("FacebookProtocol")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OnVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnInstall "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" authService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" AuthService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onVerify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" req"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Args")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("accessToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" refreshToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" profile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n profile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("refreshToken "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" refreshToken"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("authService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("facebookId"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" profile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("In order to use Facebook authentication, you must first create an app at Facebook Developers. When created, an app is assigned an App ID and an App Secret. Your application must also implement a redirect URL, to which Facebook will redirect users after they have approved access for your application.")]),s._v(" "),a("p",[s._v("The verify callback for Facebook authentication accepts "),a("code",[s._v("accessToken")]),s._v(", "),a("code",[s._v("refreshToken")]),s._v(", and "),a("code",[s._v("profile")]),s._v(" arguments. "),a("code",[s._v("profile")]),s._v(" will contain user profile information provided by Facebook; refer to User "),a("a",{attrs:{href:"http://www.passportjs.org/guide/profile/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Profile"),a("OutboundLink")],1),s._v(" for additional information.")])]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("For security reasons, the redirection URL must reside on the same host that is registered with Facebook.")])]),s._v(" "),a("p",[s._v("Then we have to implement routes as following:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Authenticate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/auth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AuthCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:provider"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Authenticate")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"facebook"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("scope"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"email"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("authenticated")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Facade")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:provider/callback"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Authenticate")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"facebook"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Facade")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[a("ApiSymbolName",[s._v("Authenticate")]),s._v(" decorator accepts a second option to configure the "),a("code",[s._v("scope")]),s._v(". It is equivalent to "),a("code",[s._v("passport.authenticate('facebook', {scope: 'read_stream' })")])],1)]),s._v(" "),a("h2",{attrs:{id:"roles"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#roles"}},[s._v("#")]),s._v(" Roles")]),s._v(" "),a("p",[s._v("Roles access management isn't a part of Passport.js and Ts.ED doesn't provide a way to handle this because it is specific for each application.")]),s._v(" "),a("p",[s._v("This section will give basic examples to implement your own roles strategy access.")]),s._v(" "),a("p",[s._v("To begin we have to implement a middleware which will be responsible to check the user role:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Middleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Unauthorized"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Middleware")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AcceptRolesMiddleware")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getReq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isAuthenticated")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" roles "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("endpoint"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("AcceptRolesMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("roles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("includes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Unauthorized")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Insufficient role"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])]),a("p",[s._v("Then, we have to create a decorator "),a("code",[s._v("AcceptRoles")]),s._v(". This decorator will store the given roles and register the AcceptRolesMiddleware created before.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UseBefore"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("useDecorators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" StoreSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AcceptRolesMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./AcceptRolesMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("AcceptRoles")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("roles"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("useDecorators")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseBefore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("AcceptRolesMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("StoreSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("AcceptRolesMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" roles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("Finally, we can use this decorator on an Endpoint like this:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Authorize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AcceptRoles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../decorators/acceptRoles"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Authorize")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"local"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("AcceptRoles")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("h2",{attrs:{id:"catch-passport-exception"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#catch-passport-exception"}},[s._v("#")]),s._v(" Catch Passport Exception "),a("Badge",{attrs:{text:"6.18.0+"}})],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Catch"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ExceptionFilterMethods"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PassportException"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/passport"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Catch")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PassportException"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PassportExceptionFilter")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ExceptionFilterMethods")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("catch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("exception"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PassportException"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("exception"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h2",{attrs:{id:"decorators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[s._v("#")]),s._v(" Decorators")]),s._v(" "),a("ApiList",{attrs:{query:"module == '@tsed/passport' && symbolType === 'decorator'"}}),s._v(" "),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:"['Romakita']"}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers "),a("Badge",{attrs:{text:"Help wanted"}})],1),s._v(" "),a("GithubContributors",{attrs:{users:"['Romakita']"}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/64.fb742fe2.js b/assets/js/64.fb742fe2.js new file mode 100644 index 00000000000..2e7f56d1156 --- /dev/null +++ b/assets/js/64.fb742fe2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{811:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"ts-ed-prisma-client"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ts-ed-prisma-client"}},[s._v("#")]),s._v(" Ts.ED Prisma client")]),s._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[s._v("#")]),s._v(" Features")]),s._v(" "),a("p",[s._v("Prisma Client generate only TypeScript interfaces based on the Prisma schema. Because, interfaces have no consistency in JavaScript, isn't possible to infer a Json Schema and therefore generate the Swagger documentation or perform validation on the models (without manually writing code).")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("@tsed/prisma")]),s._v(" will generates classes and enums compatible with Ts.ED decorators like "),a("ApiSymbolName",[s._v("Returns")]),s._v(" but also, but it will also generate the "),a("code",[s._v("PrismaService")]),s._v(" (connection to the database) but also the "),a("strong",[s._v("repositories")]),s._v(" for each "),a("strong",[s._v("model")]),s._v(" of your Prisma schema.")],1),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" i -D prisma\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" i @tsed/prisma @prisma/client\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[s._v("#")]),s._v(" Configuration")]),s._v(" "),a("p",[s._v("After installation, you need to update your "),a("code",[s._v("schema.prisma")]),s._v(" file and then add a new generator section below the "),a("code",[s._v("client")]),s._v(" one:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("generator client "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\ngenerator tsed "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"tsed-prisma"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("Then after running "),a("code",[s._v("npx prisma generate")]),s._v(", this will emit the generated Ts.ED classes and Enums to "),a("code",[s._v("@tsedio/prisma/.schema")]),s._v(" in "),a("code",[s._v("node_modules")]),s._v(" folder.")]),s._v(" "),a("p",[s._v("You can also configure the default output folder, e.g.:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("generator tsed "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"tsed-prisma"')]),s._v("\n output "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"../prisma/generated/tsed"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("p",[s._v("By default, when the output path contains "),a("code",[s._v("node_modules")]),s._v(", the generated code is transpiled - containing "),a("code",[s._v("*.js")]),s._v(" and "),a("code",[s._v("*.d.ts")]),s._v(" files that are ready to use (import) in your code.\nHowever, if you explicitly choose another folder in "),a("code",[s._v("output")]),s._v(" config, the generated code will be emitted as raw TS files which you can use and import as your other source code files.")]),s._v(" "),a("p",[s._v("You can overwrite that by explicitly setting "),a("code",[s._v("emitTranspiledCode")]),s._v(" config option:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("generator tsed "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"tsed-prisma"')]),s._v("\n output "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"../prisma/generated/tsed"')]),s._v("\n emitTranspiledCode "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),a("p",[s._v("Given that you have this part of datamodel definitions:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("model User "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/// @TsED.Groups("!creation")')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// Comment")]),s._v("\n id Int "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@id")]),s._v(" @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("autoincrement")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n createdAt DateTime @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// @TsED.Email()")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/// @TsED.Description("User email. This email must be unique!")')]),s._v("\n email String "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@unique")]),s._v("\n weight Float"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n is18 Boolean"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n name String"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n successorId Int"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n successor User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@relation")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"BlogOwnerHistory"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" fields"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("successorId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" references"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n predecessor User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@relation")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"BlogOwnerHistory"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n role Role @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("USER"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n posts Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n keywords String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n biography Json\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// @TsED.Ignore(ctx.endpoint === true)")]),s._v("\n ignored String\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\nmodel Post "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id Int "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@id")]),s._v(" @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("autoincrement")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n user User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@relation")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("fields"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("userId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" references"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n userId Int"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" Role "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n USER\n ADMIN\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br")])]),a("p",[s._v("it will generate the following UserModel:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../client"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Allow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../enums"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./PostModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Format")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date-time"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n createdAt"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Email")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User email. This email must be unique!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n weight"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n is18"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n successorId"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n predecessor"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n role"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n posts"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n keywords"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n biography"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("TsED")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ignore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("endpoint "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n ignored"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br")])]),a("p",[s._v("And, the following repository:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("isArray"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("deserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PrismaService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/PrismaService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../client"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersRepository")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" prisma"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PrismaService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("get")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("collection")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("get")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("groupBy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("groupBy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bind")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" User "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isArray")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findUnique")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserFindUniqueArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findUnique")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findFirst")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserFindFirstArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findFirst")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserFindManyArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserCreateArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserUpdateArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("upsert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserUpsertArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("upsert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("delete")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserDeleteArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("delete")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deleteMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserDeleteManyArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deleteMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("updateMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserUpdateManyArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("updateMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("aggregate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserAggregateArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("aggregate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br")])]),a("h2",{attrs:{id:"add-ts-ed-decorator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#add-ts-ed-decorator"}},[s._v("#")]),s._v(" Add Ts.ED decorator")]),s._v(" "),a("p",[s._v("The generator parse prisma command to find extra Ts.ED decorators. You can use any "),a("code",[s._v("@tsed/schema")]),s._v(" decorators from Ts.ED by\nadding a comment with the following format "),a("code",[s._v("/// @TsED.Decorator")]),s._v(". See example above:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("model User "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/// @TsED.Groups("!creation")')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// Comment")]),s._v("\n id Int "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@id")]),s._v(" @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("autoincrement")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n createdAt DateTime @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// @TsED.Email()")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/// @TsED.Description("User email. This email must be unique!")')]),s._v("\n email String "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@unique")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("p",[s._v("Output:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Email")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User email. This email must be unique!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("p",[s._v("Now that the Ts.ED generator is correctly configured, you can go back (or follow) the tutorial to create your "),a("RouterLink",{attrs:{to:"/tutorials/prisma.html#create-controllers"}},[s._v("first controller")])],1)])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/65.e38697b3.js b/assets/js/65.e38697b3.js new file mode 100644 index 00000000000..7d5e05157d1 --- /dev/null +++ b/assets/js/65.e38697b3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{812:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"prisma"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prisma"}},[s._v("#")]),s._v(" Prisma")]),s._v(" "),a("Banner",{attrs:{src:"/prisma-2.svg",height:"200",href:"https://www.prisma.io/"}}),s._v(" "),a("p",[a("a",{attrs:{href:"https://www.prisma.io/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Prisma"),a("OutboundLink")],1),s._v(" is an "),a("a",{attrs:{href:"https://github.com/prisma/prisma",target:"_blank",rel:"noopener noreferrer"}},[s._v("open-source"),a("OutboundLink")],1),s._v(" ORM for Node.js and TypeScript.\nIt is used as an alternative to writing plain SQL, or using another database access tool such as SQL query builders (like "),a("RouterLink",{attrs:{to:"/tutorials/objection.html"}},[s._v("knex.js")]),s._v(") or ORMs (like "),a("RouterLink",{attrs:{to:"/tutorials/typeorm.html"}},[s._v("TypeORM")]),s._v(" and "),a("a",{attrs:{href:"https://sequelize.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Sequelize"),a("OutboundLink")],1),s._v(").\nPrisma currently supports PostgreSQL, MySQL, SQL Server and SQLite.")],1),s._v(" "),a("p",[s._v("While Prisma can be used with plain JavaScript, it embraces TypeScript and provides a level to type-safety that goes beyond the guarantees other ORMs in the TypeScript ecosystem.\nYou can find an in-depth comparison of the type-safety guarantees of Prisma and TypeORM "),a("a",{attrs:{href:"https://www.prisma.io/docs/concepts/more/comparisons/prisma-and-typeorm#type-safety",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("p",[s._v("See issue for more details: "),a("a",{attrs:{href:"https://github.com/tsedio/tsed/issues/1389",target:"_blank",rel:"noopener noreferrer"}},[s._v("#1389"),a("OutboundLink")],1)]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("If you want to get a quick overview of how Prisma works, you can follow the "),a("a",{attrs:{href:"https://www.prisma.io/docs/getting-started/quickstart",target:"_blank",rel:"noopener noreferrer"}},[s._v("Quickstart"),a("OutboundLink")],1),s._v(" or read the "),a("a",{attrs:{href:"https://www.prisma.io/docs/understand-prisma/introduction",target:"_blank",rel:"noopener noreferrer"}},[s._v("Introduction"),a("OutboundLink")],1),s._v(" in the "),a("a",{attrs:{href:"https://www.prisma.io/docs/",target:"_blank",rel:"noopener noreferrer"}},[s._v("documentation"),a("OutboundLink")],1),s._v(".")])]),s._v(" "),a("Projects",{attrs:{type:"projects"}}),s._v(" "),a("h2",{attrs:{id:"getting-started"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[s._v("#")]),s._v(" Getting started")]),s._v(" "),a("p",[s._v("In this tutorial, you'll learn how to get started with Ts.ED and Prisma from scratch.\nYou are going to build a sample Ts.ED application with a REST API that can read and write data in a database.")]),s._v(" "),a("p",[s._v("For the purpose of this guide, you'll use a "),a("a",{attrs:{href:"https://sqlite.org/",target:"_blank",rel:"noopener noreferrer"}},[s._v("SQLite"),a("OutboundLink")],1),s._v(" database to save the overhead of setting up a database server.")]),s._v(" "),a("p",[s._v("Note that you can still follow this guide, even if you're using PostgreSQL or MySQL – you'll get extra instructions for using these databases at the right places.")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("If you already have an existing project and consider migrating to Prisma, you can follow the guide for "),a("a",{attrs:{href:"https://www.prisma.io/docs/getting-started/setup-prisma/add-to-existing-project-typescript-postgres",target:"_blank",rel:"noopener noreferrer"}},[s._v("adding Prisma to an existing project"),a("OutboundLink")],1),s._v(". If you are migrating from TypeORM, you can read the guide "),a("a",{attrs:{href:"https://www.prisma.io/docs/guides/migrate-to-prisma/migrate-from-typeorm",target:"_blank",rel:"noopener noreferrer"}},[s._v("Migrating from TypeORM to Prisma"),a("OutboundLink")],1),s._v(".")])]),s._v(" "),a("h2",{attrs:{id:"create-a-ts-ed-project"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-a-ts-ed-project"}},[s._v("#")]),s._v(" Create a Ts.ED project")]),s._v(" "),a("p",[s._v("To get started, install the Ts.ED CLI and create your app skeleton with the following commands:")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -g @tsed/cli\ntsed init tsed-prisma\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("From the CLI, select the following features: Swagger, Eslint, Jest, ORM > Prisma.")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("@tsed/prisma")]),s._v(" will be automatically installed. This package generates "),a("code",[s._v("enums")]),s._v(" and "),a("code",[s._v("classes")]),s._v(" compatible with the Ts.ED decorators like "),a("ApiSymbolName",[s._v("Returns")]),s._v(" and extends possibilities about the "),a("code",[s._v("prisma.schema")]),s._v(".\nIt also generates "),a("code",[s._v("PrismaService")]),s._v(" and "),a("code",[s._v("Repositories")]),s._v("!")],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("You can become a sponsor and help us to improve this module. A dedicated tiers is available on Github sponsors "),a("a",{attrs:{href:"https://github.com/sponsors/Romakita/sponsorships?sponsor=Romakita&tier_id=69644&preview=false",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(".\nBy choosing this options, your feature/fix request treated in top priority.")])]),s._v(" "),a("h2",{attrs:{id:"set-up-prisma"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-up-prisma"}},[s._v("#")]),s._v(" Set up Prisma")]),s._v(" "),a("p",[s._v("Start by installing the Prisma CLI as a development dependency in your project:")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" tsed-prisma\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev prisma\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("In the following steps, we'll be using the "),a("a",{attrs:{href:"https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-cli",target:"_blank",rel:"noopener noreferrer"}},[s._v("Prisma CLI"),a("OutboundLink")],1),s._v(".\nAs a best practice, it's recommended to invoke the CLI locally by prefixing it with "),a("code",[s._v("npx")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[s._v("npx prisma\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Now create your initial Prisma setup using the init command of the Prisma CLI:")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[s._v("npx prisma init\n// OR\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" prisma init\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("ul",[a("li",[a("code",[s._v("schema.prisma")]),s._v(": Specifies your database connection and contains the database schema,")]),s._v(" "),a("li",[a("code",[s._v(".env")]),s._v(": A dotenv file, typically used to store your database credentials in a group of environment variables.")])]),s._v(" "),a("h2",{attrs:{id:"set-the-database-connection"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-the-database-connection"}},[s._v("#")]),s._v(" Set the database connection")]),s._v(" "),a("p",[s._v("Your database connection is configured in the "),a("code",[s._v("datasource")]),s._v(" block in your "),a("code",[s._v("schema.prisma")]),s._v(" file. By default it's set to "),a("code",[s._v("postgresql")]),s._v(",\nbut since you're using a SQLite database in this guide you need to adjust the "),a("code",[s._v("provider")]),s._v(" field of the "),a("code",[s._v("datasource")]),s._v(" block to "),a("code",[s._v("sqlite")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("datasource db "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"sqlite"')]),s._v("\n url "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("env")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"DATABASE_URL"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\ngenerator client "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"prisma-client-js"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\ngenerator tsed "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"tsed-prisma"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("p",[s._v("Now, open up "),a("code",[s._v(".env")]),s._v(" and adjust the "),a("code",[s._v("DATABASE_URL")]),s._v(" environment variable to look as follows:")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DATABASE_URL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"file:./dev.db"')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("SQLite databases are simple files; no server is required to use a SQLite database. So instead of configuring a connection URL with a "),a("em",[s._v("host")]),s._v(" and "),a("em",[s._v("port")]),s._v(", you can just point it to a local file which in this case is called "),a("code",[s._v("dev.db")]),s._v(". This file will be created in the next step.")]),s._v(" "),a("p",[s._v("With PostgreSQL and MySQL, you need to configure the connection URL to point to the "),a("em",[s._v("database server")]),s._v(".\nYou can learn more about the required connection URL format "),a("a",{attrs:{href:"https://www.prisma.io/docs/reference/database-reference/connection-urls",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("Tabs",[a("Tab",{staticClass:"px-5 pb-5",attrs:{label:"PostgreSQL"}},[a("p",[s._v("If you're using PostgreSQL, you have to adjust the "),a("code",[s._v("schema.prisma")]),s._v(" and "),a("code",[s._v(".env")]),s._v(" files as follows:")]),s._v(" "),a("p",[a("strong",[a("code",[s._v("schema.prisma")])])]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("datasource db "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"postgresql"')]),s._v("\n url "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("env")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"DATABASE_URL"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\ngenerator client "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"prisma-client-js"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("p",[a("strong",[a("code",[s._v(".env")])])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DATABASE_URL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA"')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Replace the placeholders spelled in all uppercase letters with your database credentials. Note that if you're unsure what to provide for the "),a("code",[s._v("SCHEMA")]),s._v(" placeholder, it's most likely the default value "),a("code",[s._v("public")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DATABASE_URL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public"')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("If you want to learn how to set up a PostgreSQL database, you can follow this guide on "),a("a",{attrs:{href:"https://dev.to/prisma/how-to-setup-a-free-postgresql-database-on-heroku-1dc1",target:"_blank",rel:"noopener noreferrer"}},[s._v("setting up a free PostgreSQL database on Heroku"),a("OutboundLink")],1),s._v(".")])]),s._v(" "),a("Tab",{staticClass:"px-5 pb-5",attrs:{label:"MySQL"}},[a("p",[s._v("If you're using MySQL, you have to adjust the "),a("code",[s._v("schema.prisma")]),s._v(" and "),a("code",[s._v(".env")]),s._v(" files as follows:")]),s._v(" "),a("p",[a("strong",[a("code",[s._v("schema.prisma")])])]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("datasource db "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"mysql"')]),s._v("\n url "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("env")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"DATABASE_URL"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\ngenerator client "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"prisma-client-js"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("p",[a("strong",[a("code",[s._v(".env")])])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DATABASE_URL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mysql://USER:PASSWORD@HOST:PORT/DATABASE"')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Replace the placeholders spelled in all uppercase letters with your database credentials.")])])],1),s._v(" "),a("h2",{attrs:{id:"prisma-client-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prisma-client-configuration"}},[s._v("#")]),s._v(" Prisma client configuration")]),s._v(" "),a("p",[s._v("After installation, you need to update your "),a("code",[s._v("schema.prisma")]),s._v(" file and then add a new generator section below the "),a("code",[s._v("client")]),s._v(" one:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("generator client "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\ngenerator tsed "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"tsed-prisma"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("p",[s._v("Then after running "),a("code",[s._v("npx prisma generate")]),s._v(", this will emit the generated Ts.ED classes and Enums to "),a("code",[s._v("@tsedio/prisma/.schema")]),s._v(" in "),a("code",[s._v("node_modules")]),s._v(" folder.")]),s._v(" "),a("p",[s._v("You can also configure the default output folder, e.g.:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("generator tsed "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"tsed-prisma"')]),s._v("\n output "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"../prisma/generated/tsed"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("p",[s._v("By default, when the output path contains "),a("code",[s._v("node_modules")]),s._v(", the generated code is transpiled - containing "),a("code",[s._v("*.js")]),s._v(" and "),a("code",[s._v("*.d.ts")]),s._v(" files that are ready to use (import) in your code.\nHowever, if you explicitly choose another folder in "),a("code",[s._v("output")]),s._v(" config, the generated code will be emitted as raw TS files which you can use and import as your other source code files.")]),s._v(" "),a("p",[s._v("You can overwrite that by explicitly setting "),a("code",[s._v("emitTranspiledCode")]),s._v(" config option:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("generator tsed "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provider "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"tsed-prisma"')]),s._v("\n output "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"../prisma/generated/tsed"')]),s._v("\n emitTranspiledCode "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("h4",{attrs:{id:"create-two-database-tables-with-prisma-migrate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-two-database-tables-with-prisma-migrate"}},[s._v("#")]),s._v(" Create two database tables with Prisma Migrate")]),s._v(" "),a("p",[s._v("In this section, you'll create two new tables in your database using "),a("a",{attrs:{href:"https://www.prisma.io/docs/concepts/components/prisma-migrate",target:"_blank",rel:"noopener noreferrer"}},[s._v("Prisma Migrate"),a("OutboundLink")],1),s._v(".\nPrisma Migrate generates SQL migration files for your declarative data model definition in the Prisma schema.\nThese migration files are fully customizable so that you can configure any additional features of the underlying database or include additional commands, e.g. for seeding.")]),s._v(" "),a("p",[s._v("Add the following two models to your "),a("code",[s._v("schema.prisma")]),s._v(" file:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("model User "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id Int @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("autoincrement")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@id")]),s._v("\n email String "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@unique")]),s._v("\n name String"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n posts Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\nmodel Post "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id Int @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("autoincrement")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@id")]),s._v("\n title String\n content String"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n published Boolean"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n author User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@relation")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("fields"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("authorId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" references"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n authorId Int"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("With your Prisma models in place, you can generate your SQL migration files and run them against the database.\nRun the following commands in your terminal:")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[s._v("npx prisma migrate dev --name init\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("Add the previous command to your "),a("code",[s._v("scripts")]),s._v(" in the "),a("code",[s._v("package.json")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prisma:migrate"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"npx prisma migrate dev --name init"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])])]),s._v(" "),a("p",[s._v("This "),a("code",[s._v("prisma migrate dev")]),s._v(" command generates SQL files and directly runs them against the database.\nIn this case, the following migration file was created in the existing "),a("code",[s._v("prisma")]),s._v(" directory:")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ tree prisma\nprisma\n├── dev.db\n├── migrations\n│ └── 20210507100915_init\n│ └── migration.sql\n└── schema.prisma\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h3",{attrs:{id:"install-and-generate-prisma-client"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-and-generate-prisma-client"}},[s._v("#")]),s._v(" Install and generate Prisma Client")]),s._v(" "),a("p",[s._v("Prisma Client is a type-safe database client that's "),a("em",[s._v("generated")]),s._v(" from your Prisma model definition.\nBecause of this approach, Prisma Client can expose "),a("a",{attrs:{href:"https://www.prisma.io/docs/concepts/components/prisma-client/crud",target:"_blank",rel:"noopener noreferrer"}},[s._v("CRUD"),a("OutboundLink")],1),s._v(" operations that are "),a("em",[s._v("tailored")]),s._v(" specifically to your models.")]),s._v(" "),a("p",[s._v("To install Prisma Client in your project, run the following command in your terminal:")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("$ "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" @prisma/client\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Note that during installation, Prisma automatically invokes the "),a("code",[s._v("prisma generate")]),s._v(" command for you.\nIn the future, you need to run this command after "),a("em",[s._v("every")]),s._v(" change to your Prisma models to update your generated Prisma Client.")]),s._v(" "),a("p",[s._v("The "),a("code",[s._v("prisma generate")]),s._v(" command reads your Prisma schema and updates the generated Prisma Client library inside "),a("code",[s._v("node_modules/@prisma/client")]),s._v(".")]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("The generated interfaces cannot be used with "),a("code",[s._v("@Returns")]),s._v(" to describe the Swagger documentation! You have to use the premium package "),a("RouterLink",{attrs:{to:"/tutorials/prisma-client.html"}},[a("code",[s._v("@tsedio/prisma")])])],1)]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("Add the previous command to your "),a("code",[s._v("scripts")]),s._v(" in the "),a("code",[s._v("package.json")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"prisma:generate"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"npx prisma generate"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])])]),s._v(" "),a("h2",{attrs:{id:"generate-models-and-repositories"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#generate-models-and-repositories"}},[s._v("#")]),s._v(" Generate Models and Repositories")]),s._v(" "),a("p",[s._v("By using the Prisma client and the "),a("code",[s._v("@tsed/prisma")]),s._v(" module, you'll be able to generate models, enums and repositories each time you use the following command:")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" run prisma:generate\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[a("code",[s._v("@tsed/prisma")]),s._v(" let you adding extra decorators on your datamodel property to generate the Ts.ED model.\nHere is an example of Prisma datamodel with some decorators:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("model User "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/// @TsED.Groups("!creation")')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// Comment")]),s._v("\n id Int "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@id")]),s._v(" @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("autoincrement")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n createdAt DateTime @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// @TsED.Email()")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/// @TsED.Description("User email. This email must be unique!")')]),s._v("\n email String "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@unique")]),s._v("\n weight Float"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n is18 Boolean"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n name String"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n successorId Int"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n successor User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@relation")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"BlogOwnerHistory"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" fields"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("successorId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" references"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n predecessor User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@relation")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string gstring"}},[s._v('"BlogOwnerHistory"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n role Role @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("USER"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n posts Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n keywords String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n biography Json\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// @TsED.Ignore(ctx.endpoint === true)")]),s._v("\n ignored String\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\nmodel Post "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id Int "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@id")]),s._v(" @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("autoincrement")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n user User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@relation")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("fields"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("userId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" references"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n userId Int"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" Role "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n USER\n ADMIN\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br")])]),a("p",[s._v("Based on our previous example, Prisma Client will generate the following UserModel:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../client"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Format"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Allow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Enum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" CollectionOf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../enums"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./PostModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Format")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date-time"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n createdAt"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Email")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User email. This email must be unique!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n weight"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Boolean"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n is18"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("boolean")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n successorId"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Allow")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n predecessor"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Enum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n role"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Role"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n posts"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("CollectionOf")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n keywords"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n biography"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("TsED")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Ignore")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("endpoint "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n ignored"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br")])]),a("p",[s._v("And, the following repository:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("isArray"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("deserialize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/json-mapper"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PrismaService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/PrismaService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../client"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersRepository")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" prisma"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PrismaService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("get")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("collection")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("get")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("groupBy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("groupBy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bind")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" User "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" collectionType"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("isArray")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findUnique")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserFindUniqueArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findUnique")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findFirst")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserFindFirstArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findFirst")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserFindManyArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserCreateArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserUpdateArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("upsert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserUpsertArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("upsert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("delete")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserDeleteArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" obj "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("delete")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deserialize")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("obj"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deleteMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserDeleteManyArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deleteMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("updateMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserUpdateManyArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("updateMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("aggregate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Prisma"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("UserAggregateArgs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("collection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("aggregate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br")])]),a("p",[s._v("It will be the same for all the models that you declare in the "),a("code",[s._v("schema.prisma")]),s._v("!")]),s._v(" "),a("h3",{attrs:{id:"ts-ed-decorators-usage-in-prisma"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ts-ed-decorators-usage-in-prisma"}},[s._v("#")]),s._v(" Ts.ED decorators usage in Prisma")]),s._v(" "),a("p",[s._v("The generator parse prisma command to find extra Ts.ED decorators. You can use any "),a("code",[s._v("@tsed/schema")]),s._v(" decorators from Ts.ED by\nadding a comment with the following format "),a("code",[s._v("/// @TsED.Decorator")]),s._v(". See example above:")]),s._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[s._v("model User "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/// @TsED.Groups("!creation")')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// Comment")]),s._v("\n id Int "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@id")]),s._v(" @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("autoincrement")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n createdAt DateTime @"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/// @TsED.Email()")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/// @TsED.Description("User email. This email must be unique!")')]),s._v("\n email String "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@unique")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("p",[s._v("Output:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserModel")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Integer")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"!creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Email")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User email. This email must be unique!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("h2",{attrs:{id:"create-controllers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-controllers"}},[s._v("#")]),s._v(" Create controllers")]),s._v(" "),a("p",[s._v("Finally, you'll use the repository you generated in the previous sections to implement the different routes of your app.")]),s._v(" "),a("p",[s._v("Now we have to create controllers to expose your business to our consumers. So create the following controllers in "),a("code",[s._v("src/controllers")]),s._v(" directory:")]),s._v(" "),a("Tabs",{staticClass:"-codes"},[a("Tab",{attrs:{label:"UsersController.ts"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Summary"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UsersRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/prisma"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" service"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Create a new user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("signupUser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Filter posts by title or content"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("UserModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Return a list of User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"PostsController.ts"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Delete"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PathParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Put"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Groups"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Summary"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("NotFound"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/exceptions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PostsRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/prisma"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/posts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Name")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Posts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("PostsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" service"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PostsRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Fetch a single post by its id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("404")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" model "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findUnique")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("where"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),s._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("NotFound")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Post not found"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Create a new post"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("201")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("createDraft")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"post"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Groups")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"creation"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" post"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"authorEmail"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" authorEmail"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n author"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n connect"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("email"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" authorEmail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Put")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/publish/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Publish a post by its id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("publishPost")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n where"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n data"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("published"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Delete")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Delete a post by its id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("deletePost")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("delete")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("where"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/search/:searchString"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Filter posts by title or content"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getFilteredPosts")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"searchString"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" searchString"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n where"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("OR")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("contains"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" searchString"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n content"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("contains"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" searchString"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br"),a("span",{staticClass:"line-number"},[s._v("73")]),a("br"),a("span",{staticClass:"line-number"},[s._v("74")]),a("br"),a("span",{staticClass:"line-number"},[s._v("75")]),a("br"),a("span",{staticClass:"line-number"},[s._v("76")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"FeedsController.ts"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PostsRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/prisma"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Summary"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/feeds"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("FeedsController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" service"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PostsRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Fetch all published posts"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getFeeds")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("PostModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n where"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("published"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])])])],1),s._v(" "),a("p",[s._v("Now start the server and open the Swagger documentation to test your REST API!")]),s._v(" "),a("h2",{attrs:{id:"inject-prismaservice"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#inject-prismaservice"}},[s._v("#")]),s._v(" Inject PrismaService")]),s._v(" "),a("p",[a("code",[s._v("@tsed/prisma")]),s._v(" package generate also the "),a("code",[s._v("PrismaService")]),s._v(". You can inject this service as following:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PrismaService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/prisma"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" prisma"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PrismaService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("h3",{attrs:{id:"summary"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#summary"}},[s._v("#")]),s._v(" Summary")]),s._v(" "),a("p",[s._v("In this tutorial, you learned how to use Prisma along with Ts.ED to implement a REST API.\nThe controller implementing the routes of the API is calling our Repositories generated with the Prisma Client and uses the generated PrismaService to interact with the database.")])],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/66.b3cd284b.js b/assets/js/66.b3cd284b.js new file mode 100644 index 00000000000..ac7e2fb1459 --- /dev/null +++ b/assets/js/66.b3cd284b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{815:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"seq"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#seq"}},[s._v("#")]),s._v(" Seq")]),s._v(" "),a("Banner",{attrs:{src:"https://blog.datalust.co/content/images/2018/09/Seq-380px-1.png",href:"https://datalust.co/seq",height:128}}),s._v(" "),a("p",[s._v("This tutorial shows you how you can configure Seq logger with Ts.ED. Seq is centralized structured logs for NodeJS, .NET, Java etc.")]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("Run this command to install required dependencies by "),a("code",[s._v("@tsed/seq")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/seq\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Then add the following configuration in your Server:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/seq"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// import seq Ts.ED module")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n seq"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n serverUrl"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"http://localhost:5341"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// url props works also")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("Seq module uses the "),a("a",{attrs:{href:"https://logger.tsed.io/",target:"_blank",rel:"noopener noreferrer"}},[s._v("@tsed/logger"),a("OutboundLink")],1),s._v(" as a default system logger")])]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),a("p",[s._v("Seq module uses the log level from the "),a("ApiSymbolName",[s._v("LoggerSettings")]),s._v(" (default level is debug)")],1)]),s._v(" "),a("h2",{attrs:{id:"example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[s._v("#")]),s._v(" Example")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("$log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/logger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Calendar")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getCalendar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("p",[s._v("Then we should see the log in the Seq panel (by default "),a("code",[s._v("localhost:5341")]),s._v(")")]),s._v(" "),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:"['OskarLebuda']"}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers")]),s._v(" "),a("GithubContributors",{attrs:{users:"['OskarLebuda', 'Romakita']"}})],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/67.c2e943da.js b/assets/js/67.c2e943da.js new file mode 100644 index 00000000000..f9ab1e7e743 --- /dev/null +++ b/assets/js/67.c2e943da.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{816:function(t,s,e){"use strict";e.r(s);var i=e(1),r=Object(i.a)({},(function(){var t=this.$createElement,s=this._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[s("h1",{attrs:{id:"serve-static-files"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#serve-static-files"}},[this._v("#")]),this._v(" Serve static files")]),this._v(" "),s("p",[this._v("This page has moved to "),s("RouterLink",{attrs:{to:"/docs/serve-files.html"}},[this._v("/docs/serve-files.html")]),this._v(".")],1)])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/68.40b56377.js b/assets/js/68.40b56377.js new file mode 100644 index 00000000000..a0e6ac5c375 --- /dev/null +++ b/assets/js/68.40b56377.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{817:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"serverless"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#serverless"}},[s._v("#")]),s._v(" Serverless")]),s._v(" "),a("Badge",{attrs:{text:"Contributors are welcome"}}),s._v(" "),a("Banner",{attrs:{src:"/serverless.png",href:"https://www.serverless.com",height:180}}),s._v(" "),a("p",[a("a",{attrs:{href:"https://www.serverless.com/",target:"_blank",rel:"noopener noreferrer"}},[s._v("Serverless"),a("OutboundLink")],1),s._v(" is a free and open-source web framework written using Node.js. Serverless is\nthe first framework developed for building applications on AWS Lambda, a serverless computing platform provided by\nAmazon as a part of Amazon Web Services. This tutorial will show you how to install and use Serverless with Ts.ED.")]),s._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[s._v("#")]),s._v(" Features")]),s._v(" "),a("p",[s._v("This package allows the creation of pure Lambda AWS without mounting an Express.js/Koa.js server.")]),s._v(" "),a("p",[s._v("It supports:")]),s._v(" "),a("ul",[a("li",[s._v("Creating multiple lambda in one file,")]),s._v(" "),a("li",[s._v("Support routing,")]),s._v(" "),a("li",[s._v("DI injection with "),a("code",[s._v("@tsed/di")]),s._v(",")]),s._v(" "),a("li",[s._v("Models mapping using "),a("code",[s._v("@tsed/schema")]),s._v(" and "),a("code",[s._v("@tsed/json-mapper")]),s._v(",")]),s._v(" "),a("li",[s._v("Params decorators can be used from "),a("code",[s._v("@tsed/platform-params")]),s._v(" to get Query, Body, etc...")]),s._v(" "),a("li",[s._v("Response can be modified by using "),a("code",[s._v("@tsed/platform-response-filter")]),s._v(",")]),s._v(" "),a("li",[s._v("All error can be handled by using "),a("code",[s._v("@tsed/platform-exceptions")]),s._v(",")]),s._v(" "),a("li",[s._v("Operation descriptions like "),a("code",[s._v("@Returns")]),s._v(",")]),s._v(" "),a("li",[a("code",[s._v("@tsed/async-hook-context")]),s._v(" to inject Context anywhere in your class!")]),s._v(" "),a("li",[s._v("All ORM already available for other Ts.ED platform.")])]),s._v(" "),a("h2",{attrs:{id:"unsupported-features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#unsupported-features"}},[s._v("#")]),s._v(" Unsupported features")]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Some features that you can use with the Express.js or Koa.js platforms are not available with the Serverless\nplatform.\n(See also our "),a("RouterLink",{attrs:{to:"/getting-started/#platform-features-support"}},[s._v("table feature capabilities")]),s._v(").")],1)]),s._v(" "),a("h3",{attrs:{id:"middlewares"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#middlewares"}},[s._v("#")]),s._v(" Middlewares")]),s._v(" "),a("p",[s._v("This mechanism is specific to Koa.js / Express.js and doesn't exist with the Serverless approach.")]),s._v(" "),a("p",[s._v("Serverless provides a number of features such as Cors management via the configuration of "),a("code",[s._v("serverless.yml")]),s._v(" and doesn't\nneed to use middleware. In addition, serverless "),a("a",{attrs:{href:"https://www.serverless.com/plugins/",target:"_blank",rel:"noopener noreferrer"}},[s._v("plugins"),a("OutboundLink")],1),s._v(" are also available and\nallow you to manage advanced scenarios without having to develop anything!")]),s._v(" "),a("p",[s._v("If you can't find what you are looking for on the Serverless side, you can use "),a("code",[s._v("@tsed/di")]),s._v("'\ns "),a("RouterLink",{attrs:{to:"/docs/interceptors.html"}},[s._v("Interceptors")]),s._v(" to decorate the methods and add shareable features.")],1),s._v(" "),a("h3",{attrs:{id:"passport-oidc-graphql-etc"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#passport-oidc-graphql-etc"}},[s._v("#")]),s._v(" Passport/OIDC/GraphQL etc...")]),s._v(" "),a("p",[s._v("Because middlewares aren't supported Passport.js, OIDC, GraphQL won't be usable in this platform either.")]),s._v(" "),a("h3",{attrs:{id:"upload-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upload-files"}},[s._v("#")]),s._v(" Upload files")]),s._v(" "),a("p",[s._v("File upload isn't covered at this time. Any help is welcome to improve this platform 😃.")]),s._v(" "),a("h3",{attrs:{id:"statics-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#statics-files"}},[s._v("#")]),s._v(" Statics files")]),s._v(" "),a("p",[s._v("The goal of lambda isn't to expose static files. We do not plan to support this use in the near future.")]),s._v(" "),a("h2",{attrs:{id:"rule"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#rule"}},[s._v("#")]),s._v(" Rule")]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("By convention, try to not import something from "),a("code",[s._v("@tsed/common")]),s._v(". "),a("code",[s._v("@tsed/common")]),s._v(" embed a lot of codes designed\nfor the Full server platform which are not necessary in the Serverless context and aren't optimized for it.")]),s._v(" "),a("p",[s._v("The recent version of Ts.ED expose all necessary decorators from "),a("code",[s._v("@tsed/schema")]),s._v(", "),a("code",[s._v("@tsed/platform-params")]),s._v(" or "),a("code",[s._v("@tsed/di")]),s._v(".\nFor example, "),a("ApiSymbolName",[s._v("Get")]),s._v(" or "),a("ApiSymbolName",[s._v("Post")]),s._v(" are commonly imported like this:")],1),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Now, you have to import the decorator from "),a("code",[s._v("@tsed/schema")]),s._v(".")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("Generate a new project with the CLI (you can also start from an existing project):")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("tsed init "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v(".")]),s._v("\n? Choose the target platform: Express.js\n? Choose the architecture "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" your project: Ts.ED\n? Choose the convention "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("file")]),s._v(" styling: Ts.ED\n? Check the features needed "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("for")]),s._v(" your project Swagger, Testing, Linter\n? Choose unit framework Jest\n? Choose linter tools framework EsLint\n? Choose extra linter tools Prettier, Lint on commit\n? Choose the package manager: Yarn\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("This tutorial works also with NPM package manager!")])]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Yarn"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" @tsed/platform-serverless serverless serverless-offline\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("add")]),s._v(" -D @types/aws-lambda\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"NPM"}},[a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/platform-serverless serverless serverless-offline\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save-dev @types/aws-lambda\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])])])],1),s._v(" "),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[s._v("#")]),s._v(" Configuration")]),s._v(" "),a("p",[s._v("In the "),a("code",[s._v("src/lambda")]),s._v(" create a new Lambda class:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Summary"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// /!\\ don't import decorators from @tsed/common")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TimeslotsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/TimeslotsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TimeslotModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/TimeslotModel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/timeslots"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TimeslotsLambda")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" timeslotsService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" TimeslotsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Return a list of timeslots"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("TimeslotModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date_start"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" dateStart"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"date_end"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" dateEnd"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("timeslotsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n dateStart"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n dateEnd\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("p",[s._v("Create new "),a("code",[s._v("handler.ts")]),s._v(" to expose your lambda:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformServerless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/serverless"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TimeslotsLambda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./lambda/TimeslotsLambda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" PlatformServerless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n lambda"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("TimeslotsLambda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// put your Application configuration here")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// then export the lambda")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callbacks")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("p",[s._v("Finally, create the "),a("code",[s._v("serverless.yml")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-yml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("service")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" timeslots\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("frameworkVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3.21.0"')]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("provider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" aws\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("runtime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" nodejs14.x\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("lambdaHashingVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"20201221"')]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("plugins")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" serverless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("offline\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("functions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("timeslots")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("handler")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" dist/handler.getTimeslots\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("events")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("http")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" /timeslots\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" get\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("h2",{attrs:{id:"invoke-a-lambda-with-serverless"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#invoke-a-lambda-with-serverless"}},[s._v("#")]),s._v(" Invoke a lambda with serverless")]),s._v(" "),a("p",[s._v("Serverless provide a plugin named "),a("code",[s._v("serverless-offline")]),s._v(". This Serverless plugin emulates AWS λ and API Gateway on your\nlocal machine to speed up your development cycles. To do so, it starts an HTTP server that handles the request's\nlifecycle like APIG does and invokes your handlers.")]),s._v(" "),a("p",[s._v("So, by using the "),a("code",[s._v("serverless offline")]),s._v(" command, we'll be able to invoke our function. For that, we need also to build our\ncode before invoke the lambda.")]),s._v(" "),a("p",[s._v("To simplify our workflow, we can add the following npm script command in our "),a("code",[s._v("package.json")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"invoke:timeslots"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yarn build && serverless invoke local -f timeslots"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("Now, we can run the following command to invoke our lambda:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("yarn invoke:timeslots\n// OR\nnpm run invoke:timeslots\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("p",[s._v("You should see in the terminal the following result:")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"statusCode"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"body"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"[{\\"id\\":\\"b6de4fc7-faaa-4cd7-a144-42f6af0dec6b\\",\\"title\\":\\"title\\",\\"description\\":\\"description\\",\\"start_date\\":\\"2021-10-29T10:40:57.019Z\\",\\"end_date\\":\\"2021-10-29T10:40:57.019Z\\",\\"created_at\\":\\"2021-10-29T10:40:57.019Z\\",\\"update_at\\":\\"2021-10-29T10:40:57.019Z\\"}]"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"headers"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"content-type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"x-request-id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ebb52d5e-113b-40da-b34e-c14811df596b"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"isBase64Encoded"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("h2",{attrs:{id:"manage-routes-from-code"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#manage-routes-from-code"}},[s._v("#")]),s._v(" Manage routes from code")]),s._v(" "),a("p",[s._v("Declaring all routes in the "),a("code",[s._v("serverless.yml")]),s._v(" file can be a source of error. "),a("code",[s._v("@tsed/platform-serverless")]),s._v(" can handle all\nroutes and call the right lambda based on the decorators like "),a("ApiSymbolName",[s._v("Get")]),s._v(", "),a("ApiSymbolName",[s._v("Post")]),s._v(", etc...")],1),s._v(" "),a("p",[s._v("To use the embed router, change the "),a("code",[s._v("serverless.yml")]),s._v(" declaration by this example:")]),s._v(" "),a("div",{staticClass:"language-yml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("service")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" timeslots\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("frameworkVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("provider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" aws\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("runtime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" nodejs14.x\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("lambdaHashingVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"20201221"')]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("plugins")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" serverless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v("offline\n\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("functions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("handler")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" dist/handler.handler\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("events")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("http")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" ANY\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" /\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("http")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("method")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" ANY\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("path")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"{proxy+}"')]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("p",[s._v("Then, edit the "),a("code",[s._v("handler.ts")]),s._v(" and change the exported functions:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformServerless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-serverless"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TimeslotsLambda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./TimeslotsLambda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" PlatformServerless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n lambda"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("TimeslotsLambda"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" handler "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" platform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("handler")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("p",[s._v("Now, Ts.ED will handle request and call the expected lambda in your controllers.")]),s._v(" "),a("p",[s._v("To simplify our workflow, we can add the following npm script command in our "),a("code",[s._v("package.json")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"scripts"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"invoke:any"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yarn serverless invoke local -f any --data \'{\\"path\\":\\"/timeslots\\", \\"httpMethod\\": \\"GET\\"}\'"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("h2",{attrs:{id:"get-awscontext-and-awsevent"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-awscontext-and-awsevent"}},[s._v("#")]),s._v(" Get AwsContext and AwsEvent")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ServerlessContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-serverless"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// /!\\ don't import decorators from @tsed/common")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TimeslotsService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/TimeslotsService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("ServerlessContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./ServerlessContext"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TimeslotsLambda")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" $ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ServerlessContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("$ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// AWS Context")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("$ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// AWS Event")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("$ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Response Platform abstraction layer")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("$ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Request Platform abstraction layer")]),s._v("\n\n $ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setHeader")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x-test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br")])]),a("h2",{attrs:{id:"testing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing"}},[s._v("#")]),s._v(" Testing")]),s._v(" "),a("p",[s._v("Ts.ED provide a way to test you lambda with mocked Aws event and context by using the "),a("ApiSymbolName",[s._v("PlatformServerlessTest")]),s._v(" util.")],1),s._v(" "),a("p",[s._v("Here an example to test a Lambda controller:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-serverless-testing"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformServerless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-serverless"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TimeslotsLambdaController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PathParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"start_date"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" startDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"end_date"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" endDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n startDate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n endDate\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"TimeslotsLambdaController"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformServerless"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n lambda"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("TimeslotsLambdaController"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("reset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Invoke by lambda name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should call getAll Lambda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("request")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("call")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"getAll"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("statusCode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"x-request-id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"requestId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"content-type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("parse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should call getById Lambda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("request")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("call")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"getById"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("params")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n start_date"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2020-01-01"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n end_date"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Date")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2020-01-10"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("statusCode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"x-request-id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"requestId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"content-type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("parse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n endDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2020-01-10T00:00:00.000Z"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n startDate"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2020-01-01T00:00:00.000Z"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"invoke using the router"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should call getAll Lambda"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformServerlessTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("statusCode"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("headers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"x-request-id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"requestId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"content-type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"application/json"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("parse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br"),a("span",{staticClass:"line-number"},[s._v("50")]),a("br"),a("span",{staticClass:"line-number"},[s._v("51")]),a("br"),a("span",{staticClass:"line-number"},[s._v("52")]),a("br"),a("span",{staticClass:"line-number"},[s._v("53")]),a("br"),a("span",{staticClass:"line-number"},[s._v("54")]),a("br"),a("span",{staticClass:"line-number"},[s._v("55")]),a("br"),a("span",{staticClass:"line-number"},[s._v("56")]),a("br"),a("span",{staticClass:"line-number"},[s._v("57")]),a("br"),a("span",{staticClass:"line-number"},[s._v("58")]),a("br"),a("span",{staticClass:"line-number"},[s._v("59")]),a("br"),a("span",{staticClass:"line-number"},[s._v("60")]),a("br"),a("span",{staticClass:"line-number"},[s._v("61")]),a("br"),a("span",{staticClass:"line-number"},[s._v("62")]),a("br"),a("span",{staticClass:"line-number"},[s._v("63")]),a("br"),a("span",{staticClass:"line-number"},[s._v("64")]),a("br"),a("span",{staticClass:"line-number"},[s._v("65")]),a("br"),a("span",{staticClass:"line-number"},[s._v("66")]),a("br"),a("span",{staticClass:"line-number"},[s._v("67")]),a("br"),a("span",{staticClass:"line-number"},[s._v("68")]),a("br"),a("span",{staticClass:"line-number"},[s._v("69")]),a("br"),a("span",{staticClass:"line-number"},[s._v("70")]),a("br"),a("span",{staticClass:"line-number"},[s._v("71")]),a("br"),a("span",{staticClass:"line-number"},[s._v("72")]),a("br"),a("span",{staticClass:"line-number"},[s._v("73")]),a("br"),a("span",{staticClass:"line-number"},[s._v("74")]),a("br"),a("span",{staticClass:"line-number"},[s._v("75")]),a("br"),a("span",{staticClass:"line-number"},[s._v("76")]),a("br"),a("span",{staticClass:"line-number"},[s._v("77")]),a("br")])]),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers "),a("Badge",{attrs:{text:"Help wanted"}})],1),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/69.9e7b3973.js b/assets/js/69.9e7b3973.js new file mode 100644 index 00000000000..94d88efe3cf --- /dev/null +++ b/assets/js/69.9e7b3973.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{818:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"session-cookies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#session-cookies"}},[s._v("#")]),s._v(" Session & cookies")]),s._v(" "),a("p",[s._v("Ts.ED provides two decorators to get "),a("ApiSymbolName",[s._v("Session")]),s._v(" and "),a("ApiSymbolName",[s._v("Cookies")]),s._v(" values in your controller.")],1),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("Before using the Session and Cookies, we need to install a module like "),a("a",{attrs:{href:"https://www.npmjs.com/package/express-session",target:"_blank",rel:"noopener noreferrer"}},[s._v("express-session"),a("OutboundLink")],1),s._v(" but\nyou can use another module which follows the same convention.")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save express-session\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("The default server-side session storage, MemoryStore, is purposely not designed for a production environment. It will leak memory under most conditions, does not scale past a single process, and is meant for debugging and developing.")]),s._v(" "),a("p",[s._v("For a list of stores, see "),a("a",{attrs:{href:"https://www.npmjs.com/package/express-session#compatible-session-stores",target:"_blank",rel:"noopener noreferrer"}},[s._v("compatible session stores"),a("OutboundLink")],1),s._v(".")])]),s._v(" "),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[s._v("#")]),s._v(" Configuration")]),s._v(" "),a("p",[s._v("Edit your Server and add these lines:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" compress "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" cookieParser "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" session "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"express-session"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" methodOverride "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n middlewares"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cookieParser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("compress")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("methodOverride")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("session")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"keyboard cat"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n resave"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n saveUninitialized"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n cookie"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("secure"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n app"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getApp")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"trust proxy"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// trust first proxy")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br")])]),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),a("h3",{attrs:{id:"session"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#session"}},[s._v("#")]),s._v(" Session")]),s._v(" "),a("h4",{attrs:{id:"get-value"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-value"}},[s._v("#")]),s._v(" Get value")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("whoAmI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Session")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User in session =>"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("Hello user ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/login"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Session")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("logout")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Session")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("delete")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])]),a("h4",{attrs:{id:"set-value"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-value"}},[s._v("#")]),s._v(" Set value")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("updateSession")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Session")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("count "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("count "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"OK - "')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("count"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h3",{attrs:{id:"cookies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cookies"}},[s._v("#")]),s._v(" Cookies")]),s._v(" "),a("h4",{attrs:{id:"get-value-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-value-2"}},[s._v("#")]),s._v(" Get value")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Cookies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("IUser"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./interfaces/IUser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getCookies")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Cookies")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" cookies"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Entire cookies"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" cookies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getIdInCookies")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Cookies")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ID"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getObjectInCookies")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Cookies")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" IUser"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("h4",{attrs:{id:"set-value-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-value-2"}},[s._v("#")]),s._v(" Set value")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Cookies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("updateSession")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Cookies")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" cookies"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n cookies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("count "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("cookies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("count "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"OK - "')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" cookies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("count"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h2",{attrs:{id:"initialize-session"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#initialize-session"}},[s._v("#")]),s._v(" Initialize session")]),s._v(" "),a("p",[s._v("Sometimes we want to be sure that the session is correctly initialized with the right values.")]),s._v(" "),a("p",[s._v("Let's start by creating a middleware CreateRequestSessionMiddleware in "),a("code",[s._v("middlewares")]),s._v(" directory:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Middleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-middlewares"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Middleware")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CreateRequestSessionMiddleware")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("use")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Req")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Req"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("p",[s._v("Then, add this middleware on the server:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" compress "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"compression"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" cookieParser "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"cookie-parser"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" session "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"express-session"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" methodOverride "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"method-override"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CreateRequestSessionMiddleware"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./middlewares/CreateRequestSessionMiddleware"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n middlewares"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cookieParser")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("compress")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("methodOverride")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("session")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"keyboard cat"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// change secret key")]),s._v("\n resave"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n saveUninitialized"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n cookie"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n secure"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("false")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// set true if HTTPS is enabled")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n CreateRequestSessionMiddleware\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n app"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getApp")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"trust proxy"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// trust first proxy")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br")])]),a("p",[s._v("Finally, you can read and write values in your controller:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("whoAmI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Session")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"User in session =>"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("?")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("Hello user ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/login"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("login")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Session")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("logout")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Session")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("delete")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])]),a("p",[s._v("In addition, you can add integration tests with SuperTest and "),a("code",[s._v("@tsed/testing")]),s._v(" package.\nHere is an example of Rest API test:")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Jest"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../../src/Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Session"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("let")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Login / Logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should create session return hello world and connect a fake user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// WHEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/login"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("send")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"UserName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response3 "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// THEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello user UserName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br")])])]),s._v(" "),a("Tab",{attrs:{label:"Mocha"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../../src/Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Session"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("let")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("before")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("after")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Login / Logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"should create session return hello world and connect a fake user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// WHEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/login"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("send")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"UserName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/logout"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("204")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" response3 "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/rest/whoami"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// THEN")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello user UserName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("response3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br")])])])],1),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("You can find a working example on "),a("a",{attrs:{href:"https://github.com/tsedio/tsed-example-session",target:"_blank",rel:"noopener noreferrer"}},[s._v("Express Session here"),a("OutboundLink")],1),s._v(".")])])],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/7.e571d23a.js b/assets/js/7.e571d23a.js new file mode 100644 index 00000000000..524adc8c7fb --- /dev/null +++ b/assets/js/7.e571d23a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{731:function(t,s,r){t.exports=r.p+"assets/img/valid.36052327.svg"},732:function(t,s,r){t.exports=r.p+"assets/img/invalid.41be58de.svg"},790:function(t,s,r){"use strict";r.r(s);var e=r(1),a=Object(e.a)({},(function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"introduction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),e("p",[t._v("Ts.ED is a framework for building server-side and scalable applications for Node.js environment. It's built with "),e("a",{attrs:{href:"http://www.typescriptlang.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("TypeScript"),e("OutboundLink")],1),t._v(" and uses classes (OOP), decorators and Functional programming\nto develop your application.")]),t._v(" "),e("p",[t._v("It uses "),e("a",{attrs:{href:"https://expressjs.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Express.js"),e("OutboundLink")],1),t._v(" HTTP server frameworks by default, but it's also possible to use "),e("a",{attrs:{href:"https://koajs.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("Koa.js"),e("OutboundLink")],1),t._v(" or "),e("a",{attrs:{href:"https://www.serverless.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Serverless"),e("OutboundLink")],1),t._v(" as well.")]),t._v(" "),e("p",[t._v("Ts.ED provides a level of abstraction above these common Node.js frameworks (Express/Koa) with the "),e("RouterLink",{attrs:{to:"/docs/platform-api.html"}},[t._v("Platform API")]),t._v("\nbut also exposes their APIs directly for the developer. It gives developers the freedom to use the myriad of third-party\nnode modules which are available for the underlying platform.")],1),t._v(" "),e("h2",{attrs:{id:"philosophy"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#philosophy"}},[t._v("#")]),t._v(" Philosophy")]),t._v(" "),e("p",[t._v("Node.js opened the possibility of making server applications with Javascript, allowing to pool front-end and back-end skills.")]),t._v(" "),e("p",[t._v("With this we have seen the birth of extraordinary projects like "),e("a",{attrs:{href:"https://reactjs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("React.js"),e("OutboundLink")],1),t._v(", "),e("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Vue.js"),e("OutboundLink")],1),t._v(", "),e("a",{attrs:{href:"https://angular.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("Angular"),e("OutboundLink")],1),t._v(".\nEach of these projects bring their vision of a web application, but we have the same wish, to make the developer's life easier by providing\nall the right tools to developers so that they are quickly productive.")]),t._v(" "),e("p",[t._v("Ts.ED tends towards the same objective which is to achieve better productivity while remaining easy to understand.\nTo achieve this, Ts.ED provides out-of-the-box an application architecture, highly testable, scalable and maintainable.")]),t._v(" "),e("h2",{attrs:{id:"platform-features-support"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#platform-features-support"}},[t._v("#")]),t._v(" Platform features support")]),t._v(" "),e("p",[t._v("Here are the features list provided by Ts.ED and the compatibility with the different platforms:")]),t._v(" "),e("div",{staticClass:"table-features"},[e("table",[e("thead",[e("tr",[e("th",[t._v("Features")]),t._v(" "),e("th",[t._v("Express.js")]),t._v(" "),e("th",[t._v("Koa.js")]),t._v(" "),e("th",[e("RouterLink",{attrs:{to:"/tutorials/serverless.html"}},[t._v("Serverless λ")])],1),t._v(" "),e("th",[e("RouterLink",{attrs:{to:"/docs/command.html"}},[t._v("CLI")])],1)])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/controllers.html"}},[t._v("Controllers")]),t._v(" "),e("br"),t._v(" "),e("small",[t._v("("),e("RouterLink",{attrs:{to:"/docs/controllers.html"}},[t._v("routing")]),t._v(", "),e("RouterLink",{attrs:{to:"/docs/controllers.html#nested-controllers"}},[t._v("nested")]),t._v(", "),e("RouterLink",{attrs:{to:"/docs/controllers.html#inheritance"}},[t._v("inheritance")]),t._v(")")],1)],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/providers.html"}},[t._v("Providers")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/model.html"}},[t._v("Model & JsonSchema")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/json-mapper.html"}},[t._v("JsonMapper")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/middlewares.html"}},[t._v("Middlewares")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/pipes.html"}},[t._v("Pipes")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/interceptors.html"}},[t._v("Interceptors")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/authentication.html"}},[t._v("Authentication")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/hooks.html"}},[t._v("Hooks")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/exceptions.html"}},[t._v("Exceptions")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/logger.html"}},[t._v("Logger")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/upload-files.html"}},[t._v("Upload files")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/serve-files.html"}},[t._v("Serve files")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/templating.html"}},[t._v("Templating")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/validation.html"}},[t._v("Validation")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/response-filter.html"}},[t._v("Response Filters")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/docs/cache.html"}},[t._v("Cache")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("center",[t._v("?")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])])])])]),t._v(" "),e("h2",{attrs:{id:"platform-plugins-support"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#platform-plugins-support"}},[t._v("#")]),t._v(" Platform plugins support")]),t._v(" "),e("p",[t._v("Here are the plugins provided by Ts.ED and the compatibility with the different platforms:")]),t._v(" "),e("div",{staticClass:"table-features"},[e("table",[e("thead",[e("tr",[e("th",[t._v("Features")]),t._v(" "),e("th",[t._v("Express.js")]),t._v(" "),e("th",[t._v("Koa.js")]),t._v(" "),e("th",[e("RouterLink",{attrs:{to:"/tutorials/serverless.html"}},[t._v("Serverless λ")])],1),t._v(" "),e("th",[e("RouterLink",{attrs:{to:"/docs/command.html"}},[t._v("CLI")])],1)])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/passport.html"}},[t._v("Passport.js")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/prisma.html"}},[t._v("Prisma")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/typeorm.html"}},[t._v("TypeORM")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/mongoose.html"}},[t._v("Mongoose")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/ioredis.html"}},[t._v("IORedis")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/objection.html"}},[t._v("Objection.js")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/graphql.html"}},[t._v("GraphQL")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/socket-io.html"}},[t._v("Socket.io")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/swagger.html"}},[t._v("Swagger")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/oidc.html"}},[t._v("OIDC")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])]),t._v(" "),e("tr",[e("td",[e("RouterLink",{attrs:{to:"/tutorials/stripe.html"}},[t._v("Stripe")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("img",{attrs:{src:r(731),width:"15",alt:"yes"}})]),t._v(" "),e("td",[e("center",[t._v("?")])],1),t._v(" "),e("td",[e("img",{attrs:{src:r(732),width:"15",alt:"no"}})])])])])]),t._v(" "),e("h2",{attrs:{id:"installation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),e("p",[t._v("To get started, you can either scaffold the project with the Ts.ED CLI, or clone a starter project.")]),t._v(" "),e("p",[t._v("To scaffold the project with the CLI, run the following commands. This will create a new project directory,\nand populate the directory with the initial core Ts.ED files and supporting modules, creating a conventional base structure for your project.\nCreating a new project with the CLI is recommended for first-time users.")]),t._v(" "),e("div",{staticClass:"language-shell line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -g @tsed/cli\ntsed init "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br"),e("span",{staticClass:"line-number"},[t._v("2")]),e("br")])]),e("p",[t._v("By using the CLI, you will be able to choose between different options to generate your first application:")]),t._v(" "),e("ul",[e("li",[t._v("The web framework: Express.js / Koa.js")]),t._v(" "),e("li",[t._v("The convention project architecture: Ts.ED or Feature")]),t._v(" "),e("li",[t._v("The convention file styling: Ts.ED or Angular")]),t._v(" "),e("li",[t._v("The features:\n"),e("ul",[e("li",[t._v("Graphql,")]),t._v(" "),e("li",[t._v("Database,")]),t._v(" "),e("li",[t._v("Passport.js,")]),t._v(" "),e("li",[t._v("Socket.io,")]),t._v(" "),e("li",[t._v("Swagger,")]),t._v(" "),e("li",[t._v("OIDC,")]),t._v(" "),e("li",[t._v("Testing (Jest/Mocha),")]),t._v(" "),e("li",[t._v("Linter (Eslint, prettier),")]),t._v(" "),e("li",[t._v("Bundler (Babel/Webpack),")])])]),t._v(" "),e("li",[t._v("The Package manager: NPM, Yarn or PNPM")])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("By default, it's recommended to select the following options: Express, Ts.ED (convention), Swagger, Jest and Eslint + prettier.")])]),t._v(" "),e("figure",[e("img",{staticStyle:{"max-width":"400px",padding:"0"},attrs:{src:"/getting-started/cli-selected-features.png"}})]),t._v(" "),e("p",[t._v("When all options are selected, the CLI will generate all files.\nWhen it's done, run one of this command:")]),t._v(" "),e("div",{staticClass:"language-sh line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" start\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" start\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("pnpm")]),t._v(" start\n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br"),e("span",{staticClass:"line-number"},[t._v("2")]),e("br"),e("span",{staticClass:"line-number"},[t._v("3")]),e("br")])]),e("figure",[e("img",{staticStyle:{"max-height":"400px",padding:"0"},attrs:{src:"/getting-started/server-start.png"}})]),t._v(" "),e("h2",{attrs:{id:"update-dependencies"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#update-dependencies"}},[t._v("#")]),t._v(" Update dependencies")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("If you have to upgrade Ts.ED dependencies, keep in mind this point:")]),t._v(" "),e("p",[t._v("It's really important to keep the same version for all "),e("code",[t._v("@tsed/*")]),t._v(" (excepted @tsed/logger) packages.\nTo prevent errors, fix the version for each Ts.ED packages:")]),t._v(" "),e("div",{staticClass:"language-json line-numbers-mode"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dependencies"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/common"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6.10.0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/di"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6.10.0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/core"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6.10.0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/exceptions"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6.10.0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/plaftorm-express"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6.10.0"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@tsed/swagger"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6.10.0"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),e("div",{staticClass:"line-numbers-wrapper"},[e("span",{staticClass:"line-number"},[t._v("1")]),e("br"),e("span",{staticClass:"line-number"},[t._v("2")]),e("br"),e("span",{staticClass:"line-number"},[t._v("3")]),e("br"),e("span",{staticClass:"line-number"},[t._v("4")]),e("br"),e("span",{staticClass:"line-number"},[t._v("5")]),e("br"),e("span",{staticClass:"line-number"},[t._v("6")]),e("br"),e("span",{staticClass:"line-number"},[t._v("7")]),e("br"),e("span",{staticClass:"line-number"},[t._v("8")]),e("br"),e("span",{staticClass:"line-number"},[t._v("9")]),e("br"),e("span",{staticClass:"line-number"},[t._v("10")]),e("br")])])]),t._v(" "),e("h2",{attrs:{id:"project-examples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#project-examples"}},[t._v("#")]),t._v(" Project examples")]),t._v(" "),e("p",[t._v("Alternatively, you can check out one of these projects:")]),t._v(" "),e("Projects",{attrs:{type:"projects"}}),t._v(" "),e("p",[t._v("If none of previous solutions are satisfying maybe you are in these cases:")]),t._v(" "),e("ul",[e("li",[e("RouterLink",{attrs:{to:"/getting-started/migration-from-v6.html"}},[t._v("I want to migrate my application from Ts.ED v6")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/getting-started/migrate-from-express.html"}},[t._v("I want to migrate my application from Express.js")])],1)]),t._v(" "),e("h2",{attrs:{id:"what-s-next"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-s-next"}},[t._v("#")]),t._v(" What's next?")]),t._v(" "),e("p",[t._v("Now you can follow one of these links to develop your new application:")]),t._v(" "),e("ul",[e("li",[e("RouterLink",{attrs:{to:"/getting-started/create-your-first-controller.html"}},[t._v("Create your first controller")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/docs/configuration.html"}},[t._v("Change server configuration")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/docs/configuration.html"}},[t._v("Load configuration from files")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/docs/platform-api.html"}},[t._v("What is the Platform API")])],1)])],1)}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/70.5698492a.js b/assets/js/70.5698492a.js new file mode 100644 index 00000000000..a2339aabfa4 --- /dev/null +++ b/assets/js/70.5698492a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{819:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"stripe"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#stripe"}},[t._v("#")]),t._v(" Stripe")]),t._v(" "),a("Banner",{attrs:{src:"/stripe.svg",height:"200",href:"https://stripe.com/docs/js"}}),t._v(" "),a("p",[t._v("This tutorial shows you how you can use Stripe package with Ts.ED.")]),t._v(" "),a("p",[t._v("The Stripe Node library provides convenient access to the Stripe API from applications written in server-side JavaScript.")]),t._v(" "),a("p",[t._v("For collecting customer and payment information in the browser, use "),a("a",{attrs:{href:"https://stripe.com/docs/stripe.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("Stripe.js"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[t._v("#")]),t._v(" Features")]),t._v(" "),a("p",[t._v("Currently, "),a("a",{attrs:{href:"https://www.npmjs.com/package/@tsed/stripe",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("@tsed/stripe")]),a("OutboundLink")],1),t._v(" allows you to:")]),t._v(" "),a("ul",[a("li",[t._v("Configure Stripe,")]),t._v(" "),a("li",[t._v("Create webhooks,")]),t._v(" "),a("li",[t._v("Use Stripe API.")])]),t._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),a("p",[t._v("To begin, install the Stripe module for Ts.ED:")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save @tsed/stripe\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save stripe\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("p",[t._v("Then import "),a("code",[t._v("@tsed/stripe")]),t._v(" in your Server:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/stripe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stripe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n stripe"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n apiKey"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STRIPE_SECRET_KEY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n webhooks"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STRIPE_WEBHOOK_SECRET")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Stripe options")]),t._v("\n apiVersion"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2019-08-08"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n httpProxy"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ProxyAgent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("process"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("env"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("http_proxy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n stripe"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$afterInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// do something with stripe")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this.stripe.customers")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("See Stripe options for more details: https://www.npmjs.com/package/stripe")])]),t._v(" "),a("h2",{attrs:{id:"inject-stripe"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#inject-stripe"}},[t._v("#")]),t._v(" Inject Stripe")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyStripeService")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n stripe"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("$onInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// do something with stripe")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"request"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("onRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bind")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("onRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("h2",{attrs:{id:"webhook-signing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#webhook-signing"}},[t._v("#")]),t._v(" Webhook signing")]),t._v(" "),a("p",[t._v("Stripe can optionally sign the webhook events it sends to your endpoint, allowing you to validate that they were not sent by a third-party. You can read more about it "),a("a",{attrs:{href:"https://stripe.com/docs/webhooks#signatures",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("To register a Stripe webhook with Ts.ED, just use the "),a("ApiSymbolName",[t._v("WebhookEvent")]),t._v(" decorator. It'll call for you the "),a("code",[t._v("stripe.webhooks.constructEvent")]),t._v(" with the right parameters:")],1),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("RawBodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HeaderParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stripe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/webhooks"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StripWebhookCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" stripe"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/callback"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("successPaymentHook")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WebhookEvent")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Webhook success"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("received"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// with custom webhook options")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/callback2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("successPaymentHook")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WebhookEvent")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"....."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Context")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Webhook success"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("received"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br")])]),a("h2",{attrs:{id:"testing-webhook"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#testing-webhook"}},[t._v("#")]),t._v(" Testing webhook")]),t._v(" "),a("p",[t._v("You can use stripe.webhooks.generateTestHeaderString to mock webhook events that come from Stripe:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stripe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("StripWebhookCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./StripWebhookCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"StripWebhookCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v("\n PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n stripe"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n apiKey"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fake_api_key"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n webhooks"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"whsec_test_secret"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Stripe options")]),t._v("\n apiVersion"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2019-08-08"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should call event"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" stripe "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Stripe"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" payload "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"evt_test_webhook"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n object"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"event"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" payloadString "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("payload"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" header "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("webhooks"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateTestHeaderString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n payload"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" payloadString"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"whsec_test_secret"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" event "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("webhooks"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("constructEvent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("payloadString"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" header"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" secret"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ctx "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createRequestContext")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ctrl "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("invoke")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("StripWebhookCtrl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("StripWebhookCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("successPaymentHook")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("received"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br")])]),a("p",[t._v("With SuperTest:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PlatformTestUtils"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-test-utils"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"chai"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stripe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" SuperTest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"supertest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("StripeWebhooksCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./StripWebhookCtrl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("rootDir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"../Server"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" utils "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTestUtils"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n rootDir"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n platform"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" PlatformExpress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n server"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Server"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n logger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n level"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"info"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("describe")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Stripe"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Test"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n utils"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("bootstrap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n mount"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"/rest"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("StripWebhookCtrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beforeEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n request "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" SuperTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("afterEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("reset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("it")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"should call the webhook"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" stripe "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PlatformTest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Stripe"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" payload "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"evt_test_webhook"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n object"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"event"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" payloadString "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("payload"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" signature "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" stripe"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("webhooks"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateTestHeaderString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n payload"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" payloadString"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n secret"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"whsec_test_secret"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("post")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/webhooks/callback"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("send")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("payloadString"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"stripe-signature"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" signature"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("to"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("eq")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" payload"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n received"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br"),a("span",{staticClass:"line-number"},[t._v("53")]),a("br"),a("span",{staticClass:"line-number"},[t._v("54")]),a("br")])]),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[t._v("#")]),t._v(" Author")]),t._v(" "),a("GithubContributors",{attrs:{users:"['Romakita']"}}),t._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[t._v("#")]),t._v(" Maintainers")]),t._v(" "),a("GithubContributors",{attrs:{users:"['Romakita']"}}),t._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[t._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/71.c4734717.js b/assets/js/71.c4734717.js new file mode 100644 index 00000000000..3fde80d6ac6 --- /dev/null +++ b/assets/js/71.c4734717.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{820:function(t,s,a){"use strict";a.r(s);var n=a(1),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"swagger"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#swagger"}},[t._v("#")]),t._v(" Swagger")]),t._v(" "),a("Banner",{attrs:{src:"https://swagger.io/swagger/media/assets/images/swagger_logo.svg",href:"https://swagger.io/",height:200}}),t._v(" "),a("p",[t._v("This page shows you how you can configure Swagger-ui with Ts.ED. Swagger uses the OpenApi\nto describe a Rest API. Ts.ED operates the existing decorators as well as new decorators to build\na spec compliant with Swagger.")]),t._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),a("p",[t._v("Run this command to install required dependencies by "),a("code",[t._v("@tsed/swagger")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" --save @tsed/swagger\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("Then add the following configuration in your Server:")]),t._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Configuration",icon:"bx-code-alt"}},[a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// import swagger Ts.ED module")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n swagger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/v3/docs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n specVersion"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"3.0.1"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])])]),t._v(" "),a("Tab",{attrs:{label:"CodeSandbox",icon:"bxl-codepen"}},[a("iframe",{staticStyle:{width:"100%",height:"500px",border:"0","border-radius":"4px",overflow:"hidden"},attrs:{src:"https://codesandbox.io/embed/tsed-swagger-example-ripfl?fontsize=14&hidenavigation=1&theme=dark",title:"tsed-swagger-example",allow:"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"}})])],1),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("The path option for Swagger will be used to expose the documentation:")]),t._v(" "),a("ul",[a("li",[t._v("OAS2: "),a("code",[t._v("http://localhost:8000/v2/doc")])]),t._v(" "),a("li",[t._v("OAS3: "),a("code",[t._v("http://localhost:8000/v3/doc")])])]),t._v(" "),a("p",[t._v("Ts.ED will print the swagger-ui url in the console.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("OpenSpec 2 support will be removed in v7.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("When using helmet, there may be a problem with CSP, to solve this collision, configure the CSP as shown below:")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n middlewares"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("helmet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n contentSecurityPolicy"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n directives"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n defaultSrc"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'self'")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n styleSrc"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'self'")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'unsafe-inline'")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n imgSrc"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'self'")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"data:"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"validator.swagger.io"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n scriptSrc"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'self'")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("https: 'unsafe-inline'")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// If you are not going to use CSP at all, you can use this:")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n middlewares"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("helmet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n contentSecurityPolicy"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br")])])]),t._v(" "),a("h3",{attrs:{id:"swagger-options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#swagger-options"}},[t._v("#")]),t._v(" Swagger options")]),t._v(" "),a("p",[t._v("Some options are available to configure Swagger-ui, Ts.ED and the default spec information.")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Key")]),t._v(" "),a("th",[t._v("Example")]),t._v(" "),a("th",[t._v("Description")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("path")]),t._v(" "),a("td",[a("code",[t._v("/api-doc")])]),t._v(" "),a("td",[t._v("The url subpath to access to the documentation.")])]),t._v(" "),a("tr",[a("td",[t._v("specVersion")]),t._v(" "),a("td",[a("code",[t._v("2.0")]),t._v(", "),a("code",[t._v("3.0.1")])]),t._v(" "),a("td",[t._v("The OpenSpec version.")])]),t._v(" "),a("tr",[a("td",[t._v("fileName")]),t._v(" "),a("td",[a("code",[t._v("swagger.json")])]),t._v(" "),a("td",[t._v("Swagger file name. By default swagger.json.")])]),t._v(" "),a("tr",[a("td",[t._v("doc")]),t._v(" "),a("td",[a("code",[t._v("hidden-doc")])]),t._v(" "),a("td",[t._v("The documentation key used by "),a("code",[t._v("@Docs")]),t._v(" decorator to create several swagger documentations.")])]),t._v(" "),a("tr",[a("td",[t._v("viewPath")]),t._v(" "),a("td",[a("code",[t._v("${rootDir}/../views/swagger.ejs")]),t._v(" or "),a("code",[t._v("false")])]),t._v(" "),a("td",[t._v("The path to the ejs template. Set false to disabled swagger-ui.")])]),t._v(" "),a("tr",[a("td",[t._v("cssPath")]),t._v(" "),a("td",[a("code",[t._v("${rootDir}/spec/style.css")])]),t._v(" "),a("td",[t._v("The path to the CSS file.")])]),t._v(" "),a("tr",[a("td",[t._v("jsPath")]),t._v(" "),a("td",[a("code",[t._v("${rootDir}/spec/main.js")])]),t._v(" "),a("td",[t._v("The path to the JS file.")])]),t._v(" "),a("tr",[a("td",[t._v("viewPath")]),t._v(" "),a("td",[a("code",[t._v("${rootDir}/views/swagger.ejs")])]),t._v(" "),a("td",[t._v("The path to the ejs file to create html page.")])]),t._v(" "),a("tr",[a("td",[t._v("showExplorer")]),t._v(" "),a("td",[a("code",[t._v("true")])]),t._v(" "),a("td",[t._v("Display the search field in the navbar.")])]),t._v(" "),a("tr",[a("td",[t._v("spec")]),t._v(" "),a("td",[a("code",[t._v('{swagger: "2.0"}')])]),t._v(" "),a("td",[t._v("The default information spec.")])]),t._v(" "),a("tr",[a("td",[t._v("specPath")]),t._v(" "),a("td",[a("code",[t._v("${rootDir}/spec/swagger.base.json")])]),t._v(" "),a("td",[t._v("Load the base spec documentation from the specified path.")])]),t._v(" "),a("tr",[a("td",[t._v("outFile")]),t._v(" "),a("td",[a("code",[t._v("${rootDir}/spec/swagger.json")])]),t._v(" "),a("td",[t._v("Write the "),a("code",[t._v("swagger.json")]),t._v(" spec documentation on the specified path.")])]),t._v(" "),a("tr",[a("td",[t._v("hidden")]),t._v(" "),a("td",[a("code",[t._v("true")])]),t._v(" "),a("td",[t._v("Hide the documentation in the dropdown explorer list.")])]),t._v(" "),a("tr",[a("td",[t._v("options")]),t._v(" "),a("td",[t._v("Swagger-UI options")]),t._v(" "),a("td",[t._v("SwaggerUI options. See (https://github.com/swagger-api/swagger-ui/blob/HEAD/docs/usage/docs/configuration.md)")])]),t._v(" "),a("tr",[a("td",[t._v("operationIdFormatter")]),t._v(" "),a("td",[a("code",[t._v("(name: string, propertyKey: string, path: string) => string")])]),t._v(" "),a("td",[t._v("A function to generate the operationId.")])]),t._v(" "),a("tr",[a("td",[t._v("operationIdPattern")]),t._v(" "),a("td",[a("code",[t._v("%c_%m")])]),t._v(" "),a("td",[t._v("A pattern to generate the operationId. Format of operationId field (%c: class name, %m: method name).")])]),t._v(" "),a("tr",[a("td",[t._v("pathPatterns")]),t._v(" "),a("td",[a("code",[t._v("[]")])]),t._v(" "),a("td",[t._v("Include only controllers whose paths match the pattern list provided.")])])])]),t._v(" "),a("h3",{attrs:{id:"multi-documentations"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#multi-documentations"}},[t._v("#")]),t._v(" Multi documentations")]),t._v(" "),a("h4",{attrs:{id:"by-decorators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#by-decorators"}},[t._v("#")]),t._v(" By decorators")]),t._v(" "),a("p",[t._v("It's also possible to create several swagger documentations with the "),a("code",[t._v("doc")]),t._v(" option:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// import swagger Ts.ED module")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n swagger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/api-docs-v1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n doc"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"api-v1"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/api-docs-v2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n doc"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"api-v2"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])]),a("p",[t._v("Then use "),a("code",[t._v("@Docs")]),t._v(" decorators on your controllers to specify where the controllers should be displayed.")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Docs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Docs")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"api-v2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// display this controllers only for api-docs-v2")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarCtrlV2")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// OR")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Docs")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"api-v2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"api-v1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// display this controllers for api-docs-v2 and api-docs-v1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("h4",{attrs:{id:"by-path-patterns"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#by-path-patterns"}},[t._v("#")]),t._v(" By Path patterns "),a("Badge",{attrs:{text:"v6.66.0+"}})],1),t._v(" "),a("p",[t._v("You can use the "),a("code",[t._v("pathPatterns")]),t._v(" options to include only controllers whose paths match the pattern list provided.")]),t._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// import swagger Ts.ED module")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n swagger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/api-admin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n pathPatterns"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/rest/admin/**"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/api-all"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n pathPatterns"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"!/rest/admin/**"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])]),a("h2",{attrs:{id:"model-documentation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#model-documentation"}},[t._v("#")]),t._v(" Model documentation")]),t._v(" "),a("p",[t._v("One of the feature of Ts.ED is the model definition to serialize or deserialize a\nJSON Object based on JsonSchema (See "),a("RouterLink",{attrs:{to:"/docs/model.html"}},[t._v("model documentation")]),t._v(").")],1),t._v(" "),a("p",[t._v("A model can be used on a method controller along with "),a("RouterLink",{attrs:{to:"/api/common/filters/decorators/BodyParams.html"}},[t._v("@BodyParams")]),t._v(" or other decorators.")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Example"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarModel")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Title")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iD"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Description of calendar model id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Example")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Description example"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("h2",{attrs:{id:"endpoint-documentation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#endpoint-documentation"}},[t._v("#")]),t._v(" Endpoint documentation")]),t._v(" "),a("p",[t._v("This example shows you how to use the decorators to generate swagger documentation for an endpoint:")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" QueryParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Deprecated"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Security"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Summary"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./models/Calendar"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Summary")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Summary of this route"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Return a calendar from the given id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" CalendarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Not found"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCalendar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"A calendar Id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Return a list of Calendar"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" CalendarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCalendars")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/v0/:id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Deprecated")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Deprecated route, use /rest/calendars/:id instead of."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("description"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Not found"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCalendarDeprecated")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("QueryParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Security")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"calendar_auth"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"write:calendar"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"read:calendar"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCalendar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" body"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br")])]),a("h2",{attrs:{id:"extra-parameters"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#extra-parameters"}},[t._v("#")]),t._v(" Extra parameters")]),t._v(" "),a("p",[t._v("Sometimes you want to display extra "),a("code",[t._v("in")]),t._v(" parameters like "),a("code",[t._v("headers")]),t._v(" without consuming it in an endpoint.\nIt's possible describe extra parameters by using the "),a("ApiSymbolName",[t._v("In")]),t._v(" decorator over the method.")],1),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("In"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Security"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./models/Calendar"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/calendars"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CalendarCtrl")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("In")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Type")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bearer authorization"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Security")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"oidc"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCalendar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" body"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("CalendarModel"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("h2",{attrs:{id:"import-javascript"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#import-javascript"}},[t._v("#")]),t._v(" Import Javascript")]),t._v(" "),a("p",[t._v("It is possible to import a Javascript in the Swagger-ui documentation. This script lets you customize the swagger-ui instance.")]),t._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// import swagger Ts.ED module")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[t._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n swagger"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/api-docs"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n jsPath"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/spec/main.js"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Server")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("p",[t._v("In your JavaScript file, you can handle Swagger-ui configuration and the instance:")]),t._v(" "),a("div",{staticClass:"language-javascript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SwaggerUIBuilder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Swagger-ui config")]),t._v("\n\ndocument"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"swagger.init"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SwaggerUIBuilder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ui"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Swagger-ui instance")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("h2",{attrs:{id:"decorators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decorators"}},[t._v("#")]),t._v(" Decorators")]),t._v(" "),a("p",[t._v("These decorators already add a documentation on Swagger:")]),t._v(" "),a("ApiList",{attrs:{query:"((symbolName: Header OR Status) OR (tags: schema)) AND tags: decorator"}}),t._v(" "),a("p",[t._v("In addition, the Ts.ED Swagger plugin gives some decorators to manage documentation:")]),t._v(" "),a("ApiList",{attrs:{query:"(symbolName: Docs OR Hidden) AND symbolType: decorator"}}),t._v(" "),a("h2",{attrs:{id:"authors"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#authors"}},[t._v("#")]),t._v(" Authors")]),t._v(" "),a("GithubContributors",{attrs:{users:["vologab","Romakita"]}}),t._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[t._v("#")]),t._v(" Maintainers")]),t._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}})],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/72.063af841.js b/assets/js/72.063af841.js new file mode 100644 index 00000000000..1b2a62ca63b --- /dev/null +++ b/assets/js/72.063af841.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{822:function(t,s,e){"use strict";e.r(s);var i=e(1),a=Object(i.a)({},(function(){var t=this.$createElement,s=this._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[s("h1",{attrs:{id:"templating"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[this._v("#")]),this._v(" Templating")]),this._v(" "),s("p",[this._v("This page has moved to "),s("RouterLink",{attrs:{to:"/docs/templating.html"}},[this._v("/docs/templating.html")]),this._v(".")],1)])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/73.b9feb57d.js b/assets/js/73.b9feb57d.js new file mode 100644 index 00000000000..08106a8f195 --- /dev/null +++ b/assets/js/73.b9feb57d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{823:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"terminus"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#terminus"}},[s._v("#")]),s._v(" Terminus")]),s._v(" "),a("p",[s._v("Terminus is a package to adds graceful shutdown and Kubernetes readiness / liveliness checks for any HTTP applications.\nThis tutorial\nwill show you how to install and use Terminus with Ts.ED.")]),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("Before using terminus, we need to install the "),a("a",{attrs:{href:"https://www.npmjs.com/package/@godaddy/terminus",target:"_blank",rel:"noopener noreferrer"}},[s._v("terminus"),a("OutboundLink")],1),s._v(" module.")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @godaddy/terminus @tsed/terminus\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Then import "),a("code",[s._v("@tsed/terminus")]),s._v(" and add the following configuration in your "),a("code",[s._v("Server.ts")]),s._v(":")]),s._v(" "),a("Tabs",{staticClass:"-code"},[a("Tab",{attrs:{label:"Configuration",icon:"bx-code-alt"}},[a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/terminus"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// import terminus Ts.ED module")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("resolve"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n terminus"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n path"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/health"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ... see configuration")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])])])],1),s._v(" "),a("h3",{attrs:{id:"options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[s._v("#")]),s._v(" Options")]),s._v(" "),a("p",[a("code",[s._v("terminus")]),s._v(" configuration options waiting the same option description in the official Terminus\ndocumentation "),a("a",{attrs:{href:"https://github.com/godaddy/terminus",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(".\nThe following the options are managed by the "),a("code",[s._v("@tsed/terminus")]),s._v(" package:")]),s._v(" "),a("ul",[a("li",[s._v("healthChecks")]),s._v(" "),a("li",[s._v("onSignal")]),s._v(" "),a("li",[s._v("onSendFailureDuringShutdown")]),s._v(" "),a("li",[s._v("onShutdown")]),s._v(" "),a("li",[s._v("beforeShutdown")]),s._v(" "),a("li",[s._v("onSigterm")])]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("type")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TerminusSettings")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Omit"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("\n TerminusOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"healthChecks"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"onSignal"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"onSendFailureDuringShutdown"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"onShutdown"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"beforeShutdown"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"onSigterm"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),a("h3",{attrs:{id:"readiness-liveliness-checks"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#readiness-liveliness-checks"}},[s._v("#")]),s._v(" Readiness / liveliness checks")]),s._v(" "),a("p",[s._v("To create a readiness / liveliness checks use the "),a("code",[s._v("@Health")]),s._v(" decorator.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Health"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/terminus"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MongoCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Health")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("check")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Here check the mongo health")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ok"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("p",[s._v("You can also create an "),a("code",[s._v("HealthCheckError")]),s._v(" when an error appear during your check.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Health"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/terminus"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("HealthCheckError"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@godaddy/terminus"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./RedisConnection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RedisClient")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" redisConnection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("REDIS_CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Health")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"redis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("check")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("redisConnection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("status "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ready"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ok"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Here check the redis health")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("throw")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HealthCheckError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"failed"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n redis"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("redisConnection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("status\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("p",[s._v('Expected result when calling the "/health":')]),s._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"status"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ok"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"info"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"mongo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ok"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"redis"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ok"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"details"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"mongo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ok"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[s._v('"redis"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ok"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("h3",{attrs:{id:"graceful-shutdown"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#graceful-shutdown"}},[s._v("#")]),s._v(" Graceful shutdown")]),s._v(" "),a("p",[a("code",[s._v("@tsed/terminus")]),s._v(" package give some decorators to handle Terminus hooks. These hooks allow you to adds graceful shutdown.\nHere is the list of decorators:")]),s._v(" "),a("ul",[a("li",[a("code",[s._v("$beforeShutdown")]),s._v(": Use this hook if you deploy your application with Kubernetes (see more\ndetails "),a("a",{attrs:{href:"https://github.com/godaddy/terminus#how-to-set-terminus-up-with-kubernetes",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v("),")]),s._v(" "),a("li",[a("code",[s._v("$onSignal")]),s._v(": cleanup hook, returning a promise (used to be onSigterm),")]),s._v(" "),a("li",[a("code",[s._v("$onShutdown")]),s._v(": called right before exiting,")]),s._v(" "),a("li",[a("code",[s._v("$onSendFailureDuringShutdown")]),s._v(": called before sending each 503 during shutdowns.")])]),s._v(" "),a("p",[a("strong",[s._v("Example:")])]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RedisCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeShutdown")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"called before shutdown"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onSignal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"called on signal"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onShutdown")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"called on shutdown"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onSendFailureDuringShutdown")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"on send failure during shutdown"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])]),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:"['EmilienLeroy']"}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers")]),s._v(" "),a("GithubContributors",{attrs:{users:"['Romakita']"}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/74.80960340.js b/assets/js/74.80960340.js new file mode 100644 index 00000000000..2332fc8543d --- /dev/null +++ b/assets/js/74.80960340.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{824:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"typeorm"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#typeorm"}},[s._v("#")]),s._v(" TypeORM "),a("Badge",{attrs:{text:"Contributors are welcome"}})],1),s._v(" "),a("Banner",{attrs:{src:"https://github.com/typeorm/typeorm/raw/master/resources/logo_big.png",href:"https://typeorm.io/",height:"200"}}),s._v(" "),a("h2",{attrs:{id:"typeorm-v0-3-x"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#typeorm-v0-3-x"}},[s._v("#")]),s._v(" TypeORM v0.3.x")]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("TypeORM v0.3.x is available and change the way on how to create connection (DataSource). His new API,\ndoesn't require to install the dedicated Ts.ED module. If you come from v0.2.0, keep the Ts.ED module installed and\nchange the connection by DataSource and update your repositories' implementation.")]),s._v(" "),a("p",[s._v("See our next section for more details about DataSource and Custom Repository.")])]),s._v(" "),a("h3",{attrs:{id:"create-new-connection"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-new-connection"}},[s._v("#")]),s._v(" Create new connection")]),s._v(" "),a("p",[s._v("Ts.ED CLI support DataSource creation. Just install the latest Ts.ED CLI version and run the followings command:")]),s._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[s._v("tsed generate\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Then, select TypeORM DataSource options and follow the wizard.")]),s._v(" "),a("p",[s._v("You can also create your DataSource as following in your project:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("registerProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/logger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../entities/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("MYSQL_DATA_SOURCE")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"MySqlDataSource"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" MysqlDataSource "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DataSource")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// name: "default", if you come from v0.2.x')]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mysql"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n entities"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// add this to discover typeorm model")]),s._v("\n host"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"localhost"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n port"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3306")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n username"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n password"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n database"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"test"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("DataSource"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("MYSQL_DATA_SOURCE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm:datasource"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n deps"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("useAsyncFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("logger"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" MysqlDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("initialize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n logger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Connected with typeorm to database: MySQL"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" MysqlDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n hooks"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onDestroy")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("dataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" dataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("isInitialized "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" dataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("close")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br")])]),a("p",[s._v("Finally, inject the DataSource in your controller or service:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("MYSQL_DATA_SOURCE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../datasources/MysqlDataSource"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("MYSQL_DATA_SOURCE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" mysqlDataSource"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" DataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("if")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("mysqlDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("isInitialized"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"INIT"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("h3",{attrs:{id:"retrieve-all-datasources-from-a-service"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#retrieve-all-datasources-from-a-service"}},[s._v("#")]),s._v(" Retrieve all DataSources from a Service")]),s._v(" "),a("p",[s._v("All data sources connection can be retrieved as following:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" InjectorService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DataSourcesService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" injector"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" InjectorService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getDataSources")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("injector"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm:datasource"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h3",{attrs:{id:"use-entity-typeorm-with-controller"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-entity-typeorm-with-controller"}},[s._v("#")]),s._v(" Use Entity TypeORM with Controller")]),s._v(" "),a("p",[s._v("We need to define an Entity TypeORM like this and use Ts.ED Decorator to define the JSON Schema.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Maximum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MaxLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Column"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PrimaryGeneratedColumn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Entity")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PrimaryGeneratedColumn")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Column")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Column")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Column")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Maximum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])]),a("p",[s._v("Now, the model is correctly defined and can be used with a "),a("RouterLink",{attrs:{to:"/docs/controllers.html"}},[s._v("Controller")]),s._v("\n, "),a("RouterLink",{attrs:{to:"/tutorials/ajv.html"}},[s._v("AJV validation")]),s._v(",\n"),a("RouterLink",{attrs:{to:"/tutorials/swagger.html"}},[s._v("Swagger")]),s._v(" and "),a("a",{attrs:{href:"https://github.com/typeorm/typeorm",target:"_blank",rel:"noopener noreferrer"}},[s._v("TypeORM"),a("OutboundLink")],1),s._v(".")],1),s._v(" "),a("p",[s._v("We can use this model with a Controller like that:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("MYSQL_DATA_SOURCE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../datasources/MySqlDataSource"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../entities/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("MYSQL_DATA_SOURCE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" mysqlDataSource"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" DataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("mysqlDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("manager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("mysqlDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("manager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("h3",{attrs:{id:"create-an-injectable-repository"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-an-injectable-repository"}},[s._v("#")]),s._v(" Create an injectable repository")]),s._v(" "),a("p",[a("code",[s._v("Repository")]),s._v(" is just like "),a("code",[s._v("EntityManager")]),s._v(" but its operations are limited to a concrete entity.\nYou can access the repository via "),a("code",[s._v("DataSource")]),s._v(".")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MySqlDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../datasources/MySqlDataSource"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../entities/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" UserRepository "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" MySqlDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getRepository")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"UserRepository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("type")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("typeof")]),s._v(" UserRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useValue"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserRepository\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br")])]),a("p",[s._v("Then inject the "),a("code",[s._v("UserRepository")]),s._v(" in your controller:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../repositories/UserRepository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../entities/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" repository"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("repository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("repository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("p",[s._v("In order to extend "),a("code",[s._v("UserRepository")]),s._v(" functionality you can use "),a("code",[s._v(".extend")]),s._v(" method of "),a("code",[s._v("Repository")]),s._v(" class:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("MySqlDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../datasources/MySqlDataSource"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../entities/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" UserRepository "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" MySqlDataSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getRepository")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("extend")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findByName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("createQueryBuilder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("where")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user.firstName = :firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("andWhere")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"user.lastName = :lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("lastName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getMany")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"UserRepository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("type")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("typeof")]),s._v(" UserRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n useValue"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserRepository\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])]),a("p",[s._v("Then inject the "),a("code",[s._v("UserRepository")]),s._v(" in your controller:")]),s._v(" "),a("div",{staticClass:"language-typescript line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../entities/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../repositories/UserRepository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" repository"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("USER_REPOSITORY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getByName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("repository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findByName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"john"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br")])]),a("h2",{attrs:{id:"typeorm-v0-2-x-deprecated"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#typeorm-v0-2-x-deprecated"}},[s._v("#")]),s._v(" TypeORM v0.2.x (deprecated)")]),s._v(" "),a("h3",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[s._v("#")]),s._v(" Features")]),s._v(" "),a("p",[s._v("Currently, "),a("code",[s._v("@tsed/typeorm")]),s._v(" allows you to:")]),s._v(" "),a("ul",[a("li",[s._v("Configure one or more TypeORM connections via the "),a("code",[s._v("@Configuration")]),s._v(" configuration. All databases will be initialized\nwhen the server starts during the server's "),a("code",[s._v("OnInit")]),s._v(" phase.")]),s._v(" "),a("li",[s._v("Use the Entity TypeORM as Model for Controllers, AJV Validation and Swagger.")]),s._v(" "),a("li",[s._v("Declare a connection with asyncProvider or automatically by server configuration.")])]),s._v(" "),a("h3",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("p",[s._v("To begin, install the TypeORM module for TS.ED:")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save @tsed/typeorm\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --save typeorm\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("p",[s._v("Then import "),a("code",[s._v("@tsed/typeorm")]),s._v(" in your Server:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// !!! IMPORTANT TO ADD THIS !!!")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n typeorm"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"postgres"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...,")]),s._v("\n\n entities"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./entity/*{.ts,.js}")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n migrations"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./migrations/*{.ts,.js}")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n subscribers"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("./subscriber/*{.ts,.js}")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongodb"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Don't forget to import the TypeORM module in the Server. Ts.ED need it to load correctly the TypeORM DI,\nentities and repositories!")])]),s._v(" "),a("h3",{attrs:{id:"typeormservice"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#typeormservice"}},[s._v("#")]),s._v(" TypeORMService")]),s._v(" "),a("p",[s._v("TypeORMService lets you retrieve an instance of TypeORM Connection.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AfterRoutesInit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("TypeORMService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AfterRoutesInit")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" typeORMService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" TypeORMService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("$afterRoutesInit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("connection "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("typeORMService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"mongoose"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// get connection by name")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Then save")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("manager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("save")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Saved a new user with id: "')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" users "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("manager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Loaded users: "')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" users"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" users"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br")])]),a("p",[s._v("For more information about TypeORM, look its documentation "),a("a",{attrs:{href:"https://github.com/typeorm/typeorm",target:"_blank",rel:"noopener noreferrer"}},[s._v("here"),a("OutboundLink")],1),s._v(";")]),s._v(" "),a("h3",{attrs:{id:"declare-your-connection-as-provider"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#declare-your-connection-as-provider"}},[s._v("#")]),s._v(" Declare your connection as provider")]),s._v(" "),a("p",[s._v("It is also possible to create your connection with the "),a("code",[s._v("useAsyncFactory")]),s._v(" feature (\nSee "),a("RouterLink",{attrs:{to:"/docs/custom-providers.html"}},[s._v("custom providers")]),s._v(")\nThis approach allows you to inject your connection as a Service to another one.")],1),s._v(" "),a("p",[s._v("To create a new connection, declare your custom provider as follows:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" registerProvider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("createConnection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ConnectionOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Symbol"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CONNECTION"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// declare your own symbol")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("type")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Set alias types (optional)")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION_NAME")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// change the name according to your server configuration")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n deps"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("useAsyncFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("configuration"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" settings "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token generic-function"}},[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token generic class-name"}},[a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ConnectionOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" connectionOptions "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" settings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" o"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION_NAME")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("createConnection")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("connectionOptions"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br")])]),a("p",[s._v("Then inject your connection to another service or provide like this:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./typeorm-async-provider"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br")])]),a("h3",{attrs:{id:"use-entity-typeorm-with-controller-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#use-entity-typeorm-with-controller-2"}},[s._v("#")]),s._v(" Use Entity TypeORM with Controller")]),s._v(" "),a("p",[s._v("We need to define an Entity TypeORM like this and use Ts.ED Decorator to define the JSON Schema.")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Maximum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" MaxLength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Property"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Required"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Column"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" PrimaryGeneratedColumn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Entity")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("User")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("PrimaryGeneratedColumn")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Column")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Column")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MaxLength")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Required")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Column")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Minimum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Maximum")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n age"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("number")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])]),a("p",[s._v("Now, the model is correctly defined and can be used with a "),a("RouterLink",{attrs:{to:"/docs/controllers.html"}},[s._v("Controller")]),s._v("\n, "),a("RouterLink",{attrs:{to:"/tutorials/ajv.html"}},[s._v("AJV validation")]),s._v(",\n"),a("RouterLink",{attrs:{to:"/tutorials/swagger.html"}},[s._v("Swagger")]),s._v(" and "),a("a",{attrs:{href:"https://github.com/typeorm/typeorm",target:"_blank",rel:"noopener noreferrer"}},[s._v("TypeORM"),a("OutboundLink")],1),s._v(".")],1),s._v(" "),a("p",[s._v("We can use this model with a Controller like that:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../entities/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/UsersService"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/users"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UsersCtrl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" usersService"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UsersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" user"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("usersService"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])]),a("h3",{attrs:{id:"entityrepository"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entityrepository"}},[s._v("#")]),s._v(" EntityRepository")]),s._v(" "),a("p",[s._v("You can create a custom repository which should contain methods to work with your database. Usually custom repositories\nare created for a single entity and contain their specific queries. For example, let's say we want to have a method\ncalled "),a("code",[s._v("findByName(firstName: string, lastName: string)")]),s._v(" which will search for users by a given first and last names.\nThe best place for this method is in Repository, so we could call it like "),a("code",[s._v("userRepository.findByName(...)")]),s._v(". You can\nachieve this using custom repositories.")]),s._v(" "),a("p",[a("code",[s._v("@tsed/typeorm")]),s._v(" plugin configures the DI so that repositories declared for TypeORM can be injected into a Ts.ED\ncontroller or service.")]),s._v(" "),a("p",[s._v("The first way to create a custom repository is to extend Repository. Example:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Repository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" EntityRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../entity/User"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("EntityRepository")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UserRepository")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Repository"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("User"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findByName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("firstName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" lastName"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" lastName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("p",[s._v("Then inject your repository to another service:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UseConnection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/typeorm"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("UserRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./repository/UserRepository"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OtherService")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseConnection")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"db2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n userRepository2"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" userRepository"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseConnection")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"db3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" userRepository3"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" UserRepository"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Use @@UseConnection@@ decorator to select which database connection the injected repository should be used (")]),s._v(" "),a("p",[s._v("require Ts.ED v5.58.0+).")])]),s._v(" "),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers "),a("Badge",{attrs:{text:"Help wanted"}})],1),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/75.2eb0bec0.js b/assets/js/75.2eb0bec0.js new file mode 100644 index 00000000000..44b794b4812 --- /dev/null +++ b/assets/js/75.2eb0bec0.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{826:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"vite-plugin-ssr"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vite-plugin-ssr"}},[s._v("#")]),s._v(" Vite plugin ssr")]),s._v(" "),a("Banner",{attrs:{src:"https://vite-plugin-ssr.com/assets/static/vite-plugin-ssr.5177312a.svg",href:"https://vite-plugin-ssr.com/",height:"200"}}),s._v(" "),a("blockquote",[a("p",[s._v("Like Next.js/Nuxt but as do-one-thing-do-it-well Vite plugin.")])]),s._v(" "),a("p",[s._v("Use "),a("strong",[s._v("any UI framework")]),s._v(" (React, Vue, Svelte, Solid, ...) and "),a("strong",[s._v("any tool")]),s._v(" you want (any frontend library, web\ntechnology, deploy environment, Vite plugin, ...).")]),s._v(" "),a("p",[s._v("With "),a("code",[s._v("vite-plugin-ssr")]),s._v(", you integrate tools manually and keep "),a("code",[s._v("architectural control")]),s._v(".")]),s._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[s._v("#")]),s._v(" Features")]),s._v(" "),a("ul",[a("li",[s._v("Use "),a("code",[s._v("@Vite")]),s._v(" decorator to generate a page using "),a("code",[s._v("vite-plugin-ssr")])]),s._v(" "),a("li",[s._v("Render a page using any UI framework (React, Vue, Svelte, Solid, ...)")])]),s._v(" "),a("h2",{attrs:{id:"quick-start"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#quick-start"}},[s._v("#")]),s._v(" Quick start")]),s._v(" "),a("Projects",{attrs:{type:"projects"}}),s._v(" "),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[s._v("#")]),s._v(" Installation")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" vite-plugin-ssr @tsed/vite-ssr-plugin vite@4 --save\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("Then edit your "),a("code",[s._v("Server.ts")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("join"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"path"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-express"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// /!\\ keep this import")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/vite-ssr-plugin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// add this")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./config"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" rest "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/rest"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" pages "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/pages"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n vite"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n root"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../path/to/app/project"')]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("p",[s._v("We recommend you to start your project with\nthe "),a("a",{attrs:{href:"https://github.com/tsedio/tsed-vite-plugin-ssr-example",target:"_blank",rel:"noopener noreferrer"}},[s._v("starter project"),a("OutboundLink")],1),s._v(".")]),s._v(" "),a("p",[s._v("The start project is a monorepo (Nx) with 2 projects:")]),s._v(" "),a("ul",[a("li",[a("code",[s._v("packages/server")]),s._v(": the backend project\n"),a("ul",[a("li",[a("code",[s._v("packages/server/controllers/pages")]),s._v(": the controllers pages directory")]),s._v(" "),a("li",[a("code",[s._v("packages/server/controllers/rest")]),s._v(": the controllers Rest directory")])])]),s._v(" "),a("li",[a("code",[s._v("packages/app")]),s._v(": the frontend project\n"),a("ul",[a("li",[a("code",[s._v("packages/app/pages")]),s._v(": the pages directory")]),s._v(" "),a("li",[a("code",[s._v("packages/app/renderer")]),s._v(": the app shell directory (header, footer, layout, etc...)")])])])]),s._v(" "),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[s._v("#")]),s._v(" Usage")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Constant"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("HeaderParams"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Vite"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/vite-ssr-plugin"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("SwaggerSettings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Hidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Returns"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Hidden")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("IndexController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Constant")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"swagger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" swagger"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" SwaggerSettings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Vite")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ContentType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"text/html"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("HeaderParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x-forwarded-proto"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" protocol"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("HeaderParams")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"host"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" host"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" hostUrl "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("protocol "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("||")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"http"')]),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("://")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("${")]),s._v("host"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[s._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n docs"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("swagger"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("conf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n url"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" hostUrl "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" conf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("path"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("conf\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br")])]),a("p",[s._v("And his React component:")]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" React "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"react"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PageContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../renderer/types"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("type")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("SwaggerSettings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/swagger"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ! keep type import")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("HomePageProps")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n docs"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("url"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" SwaggerSettings"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Page")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("docs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PageContext "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" HomePageProps"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("h1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("Welcome"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("h1"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("p"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("This page "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("is")]),s._v(" built "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("with")]),s._v(" Ts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[s._v("ED")]),s._v(" and vite"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("plugin"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),s._v("ssr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("p"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("br "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("br "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ul"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("docs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("doc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("li"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("a href"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("doc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("path"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("span"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("OpenSpec "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("doc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("specVersion"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("span"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("a"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("li"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),s._v("ul"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br")])]),a("p",[s._v("Result:")]),s._v(" "),a("figure",[a("img",{staticStyle:{"max-height":"300px",background:"white"},attrs:{src:"/vite-plugin-ssr-tsed.png"}})]),s._v(" "),a("h2",{attrs:{id:"add-a-controlled-page"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#add-a-controlled-page"}},[s._v("#")]),s._v(" Add a controlled page")]),s._v(" "),a("p",[s._v("By default, vite-plugin-ssr does Filesystem Routing:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("FILESYSTEM URL\npages/index.page.js /\npages/about.page.js /about\npages/faq/index.page.js /faq\npages/movies/@id/index.page.js /movies/1, /movies/2, /movies/3, ...\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("p",[s._v("So if you want to expose a movies page with the following url "),a("code",[s._v("/movies")]),s._v(" url, create a new\nfile "),a("code",[s._v("packages/app/pages/movies/index.page.tsx")]),s._v(":")]),s._v(" "),a("div",{staticClass:"language-tsx line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-tsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" React "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"react"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PageContext"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../../renderer/types"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Movie")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MoviesPageProps")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n movies"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Movie"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Page")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("movies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PageContext "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v(" MoviesPageProps"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("Movies,")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("ul")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("movies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("doc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("li")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("a")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[s._v("href")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/movies/"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" movies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),s._v("span")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("movies"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[s._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("")])]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v('You can also define so-called "Route Strings" and "Route Functions".')]),s._v(" "),a("div",{staticClass:"language-tsx line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-tsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// /pages/movies.page.route.js")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// This file defines the route of `/pages/movies.page.js`")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Route String")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("default")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/movies/@movieId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br")])])]),s._v(" "),a("p",[s._v("Then create a new Ts.ED controller "),a("code",[s._v("MoviesController")]),s._v(" under "),a("code",[s._v("packages/server/src/controllers/pages")]),s._v(' to handle all\nrequest that match the "/movies" route:')]),s._v(" "),a("div",{staticClass:"language-ts line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-ts"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Get"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Movie")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Property")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/movies"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MoviesController")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Returns")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Movie"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token decorator"}},[a("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("Vite")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Movie 1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Movie 2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("id"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" title"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Movie 3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br")])]),a("h2",{attrs:{id:"author"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#author"}},[s._v("#")]),s._v(" Author")]),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("h2",{attrs:{id:"maintainers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#maintainers"}},[s._v("#")]),s._v(" Maintainers "),a("Badge",{attrs:{text:"Help wanted"}})],1),s._v(" "),a("GithubContributors",{attrs:{users:["Romakita"]}}),s._v(" "),a("div",{staticClass:"flex items-center justify-center p-5"},[a("Button",{staticClass:"rounded-medium",attrs:{href:"/contributing.html"}},[s._v("\n Become maintainer\n")])],1)],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/76.98826dff.js b/assets/js/76.98826dff.js new file mode 100644 index 00000000000..17e473e84a2 --- /dev/null +++ b/assets/js/76.98826dff.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[76],{825:function(e,t,r){"use strict";r.r(t);var s=r(1),o=Object(s.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey},scopedSlots:e._u([{key:"warehouse-header",fn:function(){return[r("p",[e._v("Discover our list of plugins to extend your Ts.ED project."),r("br"),e._v("Created by the Ts.ED team and community.")])]},proxy:!0}])},[r("h1",{attrs:{id:"warehouse"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#warehouse"}},[e._v("#")]),e._v(" Warehouse")])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/8.9ccea43c.js b/assets/js/8.9ccea43c.js new file mode 100644 index 00000000000..0eaa9689f87 --- /dev/null +++ b/assets/js/8.9ccea43c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{736:function(s,t,a){s.exports=a.p+"assets/img/hooks-in-sequence.c4f287f6.png"},767:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h1",{attrs:{id:"hooks"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#hooks"}},[s._v("#")]),s._v(" Hooks")]),s._v(" "),n("h2",{attrs:{id:"introduction"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[s._v("#")]),s._v(" Introduction")]),s._v(" "),n("p",[s._v("Ts.ED emits different events during its initialization\nphase (lifecycle). These lifecycle hooks provide visibility into these key life moments and the ability to act\nwhen they occur.")]),s._v(" "),n("p",[s._v("This schema resume the order of hooks regard to the providers:")]),s._v(" "),n("figure",[n("img",{staticStyle:{"max-height":"600px",padding:"20px",background:"white"},attrs:{src:a(736)}})]),s._v(" "),n("p",[s._v("Here is the related code described by the previous schema:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("function")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("try")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" platform "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" PlatformExpress"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Server"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" platform"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("listen")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n process"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("on")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SIGINT"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n platform"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("stop")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("catch")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("error"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n $log"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("error")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("event"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"SERVER_BOOTSTRAP_ERROR"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" message"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" error"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("message"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" stack"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" error"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("stack"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bootstrap")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("p",[s._v("All providers are called by the emitted "),n("code",[s._v("event")]),s._v(" and any provider can also emit his own "),n("code",[s._v("event")]),s._v(".")]),s._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),n("p",[s._v("By convention")]),s._v(" "),n("ul",[n("li",[s._v("A hook is always prefixed by "),n("code",[s._v("$")]),s._v(",")]),s._v(" "),n("li",[s._v("A hook is emitted from a module,")]),s._v(" "),n("li",[s._v("A module subscribe to a hook.")])])]),s._v(" "),n("h2",{attrs:{id:"subscribe-to-a-hook"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#subscribe-to-a-hook"}},[s._v("#")]),s._v(" Subscribe to a hook")]),s._v(" "),n("h3",{attrs:{id:"server"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#server"}},[s._v("#")]),s._v(" Server")]),s._v(" "),n("p",[s._v("You can subscribe to a hook in your Server:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BeforeInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BeforeInit")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$beforeInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br")])]),n("h3",{attrs:{id:"module-service"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#module-service"}},[s._v("#")]),s._v(" Module / Service")]),s._v(" "),n("p",[s._v("You can subscribe to a hook in your "),n("ApiSymbolName",[s._v("Module")]),s._v(" or "),n("ApiSymbolName",[s._v("Service")]),s._v(":")],1),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Module"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" OnInit"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyModule")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OnInit")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),n("p",[s._v("Database connection can be performed with Asynchronous Provider. See "),n("RouterLink",{attrs:{to:"/docs/custom-providers.html"}},[s._v("custom providers")])],1)]),s._v(" "),n("h3",{attrs:{id:"onrequest-onresponse"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#onrequest-onresponse"}},[s._v("#")]),s._v(" $onRequest/$onResponse")]),s._v(" "),n("p",[s._v("Ts.ED provide a way to intercept the request and response event. You can listen these hooks by implementing a "),n("code",[s._v("$onRequest")]),s._v(" and "),n("code",[s._v("$onResponse")]),s._v(" methods\non an injectable service:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Module"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("PlatformContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CustomContextModule")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onRequest")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("$ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onResponse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("$ctx"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" PlatformContext"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])]),n("h3",{attrs:{id:"custom-provider"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#custom-provider"}},[s._v("#")]),s._v(" Custom provider "),n("Badge",{attrs:{text:"v6.110.0+"}})],1),s._v(" "),n("p",[s._v("Since "),n("code",[s._v("v6.110.0")]),s._v(", it's also possible to subscribe to a hook in a "),n("RouterLink",{attrs:{to:"/docs/custom-providers.html"}},[s._v("custom provider")]),s._v(":")],1),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" registerProvider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("DatabaseConnection"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"connection-lib"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" Symbol"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("for")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CONNECTION"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("registerProvider")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("DatabaseConnection"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n provide"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("CONNECTION")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n deps"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("useFactory")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("configuration"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" options "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"myOptions"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DatabaseConnection")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n hooks"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onDestroy")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("connection"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// called when provider instance is destroyed")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" connection"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("close")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br")])]),n("p",[s._v("It's now easy to close database connection through the "),n("code",[s._v("hooks")]),s._v(" property!")]),s._v(" "),n("h2",{attrs:{id:"emit-event"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#emit-event"}},[s._v("#")]),s._v(" Emit event")]),s._v(" "),n("p",[s._v("Emit event let the developers subscribe and implement his tasks.")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Module"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" InjectorService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OnEvent")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$myEvent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ModuleEmitter")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" injector"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" InjectorService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("initSomething")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something before")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("await")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("injector"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("emit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$myEvent"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// emit accept extra parameters forwarded to subscribers")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something after")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br")])]),n("p",[s._v("A subscriber:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Module"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OnEvent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"module-emitter"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ModuleSubscriber")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OnEvent")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$alterEvent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("h2",{attrs:{id:"alterable-value-event"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#alterable-value-event"}},[s._v("#")]),s._v(" Alterable value event")]),s._v(" "),n("p",[s._v("This feature let you emit an event with a value. All providers who subscribe to it can modify the value passed as a parameter and return a new value which will be passed to the next provider.")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// module-emitter")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Module"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" InjectorService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AlterEvent")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$alterEvent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ModuleEmitter")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("protected")]),s._v(" injector"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" InjectorService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("initSomething")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something before")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("injector"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("alterAsync")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"$alterEvent"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hello"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// alterAsync and alter accept extra parameters forwarded to subscribers")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// "hello-world"')]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// do something after")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br")])]),n("p",[s._v("A subscriber:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Module"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("AlterEvent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"module-emitter"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Module")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ModuleSubscriber")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("AlterEvent")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$alterEvent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("value"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('" world"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/9.4c2e8ee7.js b/assets/js/9.4c2e8ee7.js new file mode 100644 index 00000000000..40c391ad2ff --- /dev/null +++ b/assets/js/9.4c2e8ee7.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{747:function(s,t,a){s.exports=a.p+"assets/img/providers.3d1881c2.png"},780:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h1",{attrs:{id:"providers"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#providers"}},[s._v("#")]),s._v(" Providers")]),s._v(" "),n("p",[s._v("Basically, almost everything may be considered as a provider – service, factory, interceptors, and so on. All of them\ncan inject dependencies, meaning, they can create various relationships with each other. But in fact, a provider is\nnothing else than just a simple class annotated with an "),n("code",[s._v("@Injectable()")]),s._v(" decorator.")]),s._v(" "),n("figure",[n("img",{staticStyle:{"max-height":"300px",padding:"5px"},attrs:{src:a(747)}})]),s._v(" "),n("p",[s._v("In controllers chapter, we've seen how to build a Controller, handle a request and create a response. Controllers shall\nhandle HTTP requests and delegate complex tasks to the "),n("strong",[s._v("providers")]),s._v(".")]),s._v(" "),n("p",[s._v("The providers are plain javascript class and use one of these decorators on top of them. Here the list:")]),s._v(" "),n("ApiList",{attrs:{query:"['Injectable', 'Module', 'Service', 'Controller', 'Interceptor', 'JsonMapper', 'Middleware', 'Filter', 'Protocol'].indexOf(symbolName) > -1"}}),s._v(" "),n("h2",{attrs:{id:"services"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#services"}},[s._v("#")]),s._v(" Services")]),s._v(" "),n("p",[s._v("Let's start by creating a simple CalendarService provider.")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Calendar"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarsService")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" calendars"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("calendar"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("calendars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("calendars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("Note")]),s._v(" "),n("p",[n("ApiSymbolName",[s._v("Service")]),s._v(" and "),n("ApiSymbolName",[s._v("Injectable")]),s._v(" have the same effect. "),n("ApiSymbolName",[s._v("Injectable")]),s._v(" accepts options, "),n("ApiSymbolName",[s._v("Service")]),s._v(" does not.\nA Service is always configured as "),n("code",[s._v("singleton")]),s._v(".")],1),s._v(" "),n("p",[s._v("Example with @@Injectable@:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderScope"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ProviderType"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Calendar"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ProviderType"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("SERVICE")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n scope"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" ProviderScope"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("SINGLETON")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarsService")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" calendars"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("calendar"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("calendars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("push")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("calendars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br")])])]),s._v(" "),n("p",[s._v("Now we have the service class already done, let's use it inside the "),n("code",[s._v("CalendarCtrl")]),s._v(":")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("BodyParams"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/platform-params"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Get"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Post"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/schema"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../models/Calendar"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CalendarsService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"../services/CalendarsService"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/calendars"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CalendarsController")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" calendarsService"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CalendarsService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("BodyParams")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" calendar"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("calendarsService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Get")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Calendar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("calendarsService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("findAll")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br")])]),n("p",[s._v("Finally, we can load the injector and use it:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Configuration"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("CalendarsCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"./controllers/CalendarsCtrl"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Configuration")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n mount"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string-property property"}},[s._v('"/rest"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("CalendarsCtrl"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Server")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("NOTE")]),s._v(" "),n("p",[s._v("You'll notice that we only import the CalendarsCtrl and not the CalendarsService as that would be the case\nwith other DIs (Angular / inversify). Ts.ED will discover automatically services/providers as soon as it is imported\ninto your application via an import ES6.")]),s._v(" "),n("p",[s._v("In most case, if a service is used by a controller or another service which is used by a controller, it's not necessary\nto import it explicitly!")])]),s._v(" "),n("h2",{attrs:{id:"dependency-injection"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#dependency-injection"}},[s._v("#")]),s._v(" Dependency injection")]),s._v(" "),n("p",[s._v("Ts.ED is built around the "),n("strong",[s._v("dependency injection")]),s._v(" pattern. TypeScript emits type metadata on the constructor which will\nbe exploited by the "),n("ApiSymbolName",[s._v("InjectorService")]),s._v(" to resolve dependencies automatically.")],1),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyInjectable")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" calendarsService"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CalendarsService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br")])]),n("p",[s._v("It's also possible to inject a service on a property by using "),n("ApiSymbolName",[s._v("Inject")]),s._v(" decorator:")],1),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyInjectable")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" calendarsService"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" CalendarService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("calendarsService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br")])]),n("p",[s._v("In this case, the service won't be usable in the constructor. If you have to do something with the injected service,\nyou can use the "),n("code",[s._v("$onInit")]),s._v(" hook.")]),s._v(" "),n("h2",{attrs:{id:"scopes"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#scopes"}},[s._v("#")]),s._v(" Scopes")]),s._v(" "),n("p",[s._v("All providers have a lifetime strictly dependent on the application lifecycle. Once the server is created, all providers\nhave to be instantiated. Similarly, when the application shuts down, all providers will be destroyed. However, there are\nways to make your provider lifetime "),n("strong",[s._v("request-scoped")]),s._v(" as well. You can read more about these\ntechniques "),n("RouterLink",{attrs:{to:"/docs/injection-scopes.html"}},[s._v("here")]),s._v(".")],1),s._v(" "),n("h2",{attrs:{id:"binding-configuration"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#binding-configuration"}},[s._v("#")]),s._v(" Binding configuration")]),s._v(" "),n("p",[s._v("All configurations set with "),n("ApiSymbolName",[s._v("Module")]),s._v(" or "),n("ApiSymbolName",[s._v("Configuration")]),s._v(" can be retrieved with "),n("ApiSymbolName",[s._v("Constant")]),s._v(" and "),n("ApiSymbolName",[s._v("Value")]),s._v(" decorators.\nThese decorators can be used with:")],1),s._v(" "),n("ul",[n("li",[n("RouterLink",{attrs:{to:"/docs/services.html"}},[s._v("Service")]),s._v(",")],1),s._v(" "),n("li",[n("RouterLink",{attrs:{to:"/docs/controllers.html"}},[s._v("Controller")]),s._v(",")],1),s._v(" "),n("li",[n("RouterLink",{attrs:{to:"/docs/middlewares.html"}},[s._v("Middleware")]),s._v(",")],1),s._v(" "),n("li",[n("RouterLink",{attrs:{to:"/docs/filters.html"}},[s._v("Filter")]),s._v(".")],1)]),s._v(" "),n("p",[n("ApiSymbolName",[s._v("Constant")]),s._v(" and "),n("ApiSymbolName",[s._v("Value")]),s._v(" accept an expression as parameter to inspect the configuration object and return the value.")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Constant"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Value"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/core"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyClass")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Constant")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"env"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n env"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Value")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"swagger.path"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n swaggerPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("$onInit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("env"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br")])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[n("ApiSymbolName",[s._v("Constant")]),s._v(" returns an Object.freeze() value.")],1)]),s._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[s._v("NOTE")]),s._v(" "),n("p",[s._v("The values for the decorated properties aren't available on constructor. Use $onInit() hook to use the\nvalue.")])]),s._v(" "),n("h2",{attrs:{id:"custom-providers"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#custom-providers"}},[s._v("#")]),s._v(" Custom providers")]),s._v(" "),n("p",[s._v("The Ts.ED IoC resolves relationships providers for you, but sometimes, you want to tell to the DI how you want to\ninstantiate a specific service or inject different kind of providers based on values, on asynchronous or synchronous\nfactory or on external library. Look "),n("RouterLink",{attrs:{to:"/docs/custom-providers.html"}},[s._v("here")]),s._v(" to find more examples.")],1),s._v(" "),n("h2",{attrs:{id:"configurable-provider"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#configurable-provider"}},[s._v("#")]),s._v(" Configurable provider")]),s._v(" "),n("p",[s._v("Sometimes you need to inject a provider with a specific configuration to another one.")]),s._v(" "),n("p",[s._v("This is possible with the combination of "),n("ApiSymbolName",[s._v("Opts")]),s._v(" and "),n("ApiSymbolName",[s._v("UseOpts")]),s._v(" decorators.")],1),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Opts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" UseOpts"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyConfigurableService")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n source"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Opts")])]),s._v(" options"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("any")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Hello "')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("source"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// log: Hello Service1 then Hello Service2")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("source "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" options"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("source"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseOpts")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("source"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Service1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" service"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyConfigurableService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("service"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("source"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// log: Service1")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService2")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("UseOpts")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("source"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Service2"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" service"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" MyConfigurableService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("console")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("service"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("source"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// log: Service2")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br")])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[s._v("Using "),n("ApiSymbolName",[s._v("Opts")]),s._v(" decorator on a constructor parameter changes the scope of the provider\nto "),n("code",[s._v("ProviderScope.INSTANCE")]),s._v(".")],1)]),s._v(" "),n("h2",{attrs:{id:"inject-many-provider"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#inject-many-provider"}},[s._v("#")]),s._v(" Inject many provider "),n("Badge",{attrs:{text:"6.129.0+"}})],1),s._v(" "),n("p",[s._v("This feature lets to simplify the dependency management while working on multiple implementations of the same interface with type code.")]),s._v(" "),n("p",[s._v("If users use the same token when registering providers, the IoC container should exchange a token for a list of instances. Let's consider the following real example:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Bar")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n type"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("string")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" Bar"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" unique "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("symbol")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Symbol")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Bar"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Bar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Foo")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Bar")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" type "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"foo"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("type"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Bar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Baz")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Bar")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" type "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"baz"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br")])]),n("p",[s._v("Now as a user, I would like to create a "),n("a",{attrs:{href:"https://www.martinfowler.com/eaaCatalog/registry.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("registry"),n("OutboundLink")],1),s._v(" and retrieve an appropriate instance by type:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/some"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SomeController")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Bar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" bars"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Bar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Body")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" type"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"baz"')]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"foo"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" bar"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Bar "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("bars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" type"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])]),n("p",[s._v("or in the following way as well:")]),s._v(" "),n("div",{staticClass:"language-typescript line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-typescript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Controller")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/some"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SomeController")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" injector"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" InjectorService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Post")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("async")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("create")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Body")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"type"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" type"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"baz"')]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"foo"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" bars"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Bar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("injector"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token generic-function"}},[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("getAll")]),n("span",{pre:!0,attrs:{class:"token generic class-name"}},[n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("Bar"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")])])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("Bar"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" bar"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" Bar "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("undefined")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" bars"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("find")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" x"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("type "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("===")]),s._v(" type"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// your code")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br")])]),n("h2",{attrs:{id:"override-an-injection-token"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#override-an-injection-token"}},[s._v("#")]),s._v(" Override an injection token "),n("Badge",{attrs:{text:"6.93.0+"}})],1),s._v(" "),n("p",[s._v("By default, the "),n("code",[s._v("@Injectable()")]),s._v(" are register a class provider with an injection token obtained from the metadata generated by Typescript.\nThat means that you have to use a concrete class as a token to resolve a provider.")]),s._v(" "),n("p",[s._v("To override an injection token, that is needed to resolve an instance, use the "),n("code",[s._v("@Injectable")]),s._v(" decorator like this:")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("Inject"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" Injectable"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RetryPolicy")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n retry"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("args"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("task"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ReturnType"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("const")]),s._v(" RetryPolicy"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" unique "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("symbol")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Symbol")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"RetryPolicy"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("provide"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" RetryPolicy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TokenBucket")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("RetryPolicy")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" retry"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("...")]),s._v("args"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("unknown")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("task"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token builtin"}},[s._v("Promise")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("ReturnType"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),n("span",{pre:!0,attrs:{class:"token constant"}},[s._v("T")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ...")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Injectable")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MyService")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("constructor")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("Inject")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("RetryPolicy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("readonly")]),s._v(" retryPolicy"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" RetryPolicy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// an instance of `TokenBucket`")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br")])]),n("p",[s._v("An injection token may be either a string, a symbol, a class constructor.")]),s._v(" "),n("blockquote",[n("p",[s._v("Just don't forgot to import your provider in your project !")])]),s._v(" "),n("h2",{attrs:{id:"lazy-load-provider"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#lazy-load-provider"}},[s._v("#")]),s._v(" Lazy load provider "),n("Badge",{attrs:{text:"6.81.0+"}})],1),s._v(" "),n("p",[s._v("By default, modules are eagerly loaded, which means that as soon as the application loads, so do all the modules,\nwhether or not they are immediately necessary. While this is fine for most applications,\nit may become a bottleneck for apps running in the "),n("strong",[s._v("serverless environment")]),s._v(", where the startup latency "),n("code",[s._v('("cold start")')]),s._v(" is crucial.")]),s._v(" "),n("p",[s._v('Lazy loading can help decrease bootstrap time by loading only modules required by the specific serverless function invocation.\nIn addition, you could also load other modules asynchronously once the serverless function is "warm" to speed-up the bootstrap time for subsequent calls even further (deferred modules registration).')]),s._v(" "),n("p",[s._v("You can read more about these techniques "),n("RouterLink",{attrs:{to:"/docs/providers-lazy-loading.html"}},[s._v("here")]),s._v(".")],1),s._v(" "),n("h2",{attrs:{id:"override-provider"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#override-provider"}},[s._v("#")]),s._v(" Override provider")]),s._v(" "),n("p",[s._v("Any provider (Provider, Service, Controller, Middleware, etc...) already registered by Ts.ED or third-party can be\noverridden by your own class.")]),s._v(" "),n("div",{staticClass:"language-ts line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-ts"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OriginalService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/common"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("OverrideProvider"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"@tsed/di"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token decorator"}},[n("span",{pre:!0,attrs:{class:"token at operator"}},[s._v("@")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("OverrideProvider")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("OriginalService"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("export")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CustomMiddleware")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("extends")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("OriginalService")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("method")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Do something")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("super")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("method")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br")])]),n("blockquote",[n("p",[s._v("Just don't forgot to import your provider in your project !")])])],1)}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/app.24a4f424.js b/assets/js/app.24a4f424.js new file mode 100644 index 00000000000..8d0e552263f --- /dev/null +++ b/assets/js/app.24a4f424.js @@ -0,0 +1,305 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(e){function t(t){for(var r,a,s=t[0],l=t[1],u=t[2],d=0,f=[];d>>0;for(t=0;t0)for(n=0;n=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}i.suppressDeprecationWarnings=!1,i.deprecationHandler=null,L=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)s(e,t)&&n.push(t);return n};var E=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,C=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,A={},P={};function H(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(P[e]=i),t&&(P[t[0]]=function(){return O(i.apply(this,arguments),t[1],t[2])}),n&&(P[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function I(e,t){return e.isValid()?(t=R(t,e.localeData()),A[t]=A[t]||function(e){var t,n,r,i=e.match(E);for(t=0,n=i.length;t=0&&C.test(e);)e=e.replace(C,r),C.lastIndex=0,n-=1;return e}var F={};function N(e,t){var n=e.toLowerCase();F[n]=F[n+"s"]=F[t]=e}function $(e){return"string"==typeof e?F[e]||F[e.toLowerCase()]:void 0}function U(e){var t,n,r={};for(n in e)s(e,n)&&(t=$(n))&&(r[t]=e[n]);return r}var z={};function B(e,t){z[e]=t}function q(e){return e%4==0&&e%100!=0||e%400==0}function W(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function V(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=W(t)),n}function G(e,t){return function(n){return null!=n?(K(this,e,n),i.updateOffset(this,t),this):J(this,e)}}function J(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function K(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&q(e.year())&&1===e.month()&&29===e.date()?(n=V(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),ke(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}var Z,Q=/\d/,X=/\d\d/,ee=/\d{3}/,te=/\d{4}/,ne=/[+-]?\d{6}/,re=/\d\d?/,ie=/\d\d\d\d?/,oe=/\d\d\d\d\d\d?/,ae=/\d{1,3}/,se=/\d{1,4}/,le=/[+-]?\d{1,6}/,ue=/\d+/,ce=/[+-]?\d+/,de=/Z|[+-]\d\d:?\d\d/gi,fe=/Z|[+-]\d\d(?::?\d\d)?/gi,pe=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function he(e,t,n){Z[e]=T(t)?t:function(e,r){return e&&n?n:t}}function me(e,t){return s(Z,e)?Z[e](t._strict,t._locale):new RegExp(_e(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,r,i){return t||n||r||i}))))}function _e(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}Z={};var ge,ve={};function ye(e,t){var n,r,i=t;for("string"==typeof e&&(e=[e]),c(t)&&(i=function(e,n){n[t]=V(e)}),r=e.length,n=0;n68?1900:2e3)};var Ce=G("FullYear",!0);function Ae(e,t,n,r,i,o,a){var s;return e<100&&e>=0?(s=new Date(e+400,t,n,r,i,o,a),isFinite(s.getFullYear())&&s.setFullYear(e)):s=new Date(e,t,n,r,i,o,a),s}function Pe(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function He(e,t,n){var r=7+t-n;return-(7+Pe(e,0,r).getUTCDay()-t)%7+r-1}function Ie(e,t,n,r,i){var o,a,s=1+7*(t-1)+(7+n-r)%7+He(e,r,i);return s<=0?a=Ee(o=e-1)+s:s>Ee(e)?(o=e+1,a=s-Ee(e)):(o=e,a=s),{year:o,dayOfYear:a}}function Re(e,t,n){var r,i,o=He(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return a<1?r=a+Fe(i=e.year()-1,t,n):a>Fe(e.year(),t,n)?(r=a-Fe(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function Fe(e,t,n){var r=He(e,t,n),i=He(e+1,t,n);return(Ee(e)-r+i)/7}function Ne(e,t){return e.slice(t,7).concat(e.slice(0,t))}H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),N("week","w"),N("isoWeek","W"),B("week",5),B("isoWeek",5),he("w",re),he("ww",re,X),he("W",re),he("WW",re,X),be(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=V(e)})),H("d",0,"do","day"),H("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),H("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),H("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),N("day","d"),N("weekday","e"),N("isoWeekday","E"),B("day",11),B("weekday",11),B("isoWeekday",11),he("d",re),he("e",re),he("E",re),he("dd",(function(e,t){return t.weekdaysMinRegex(e)})),he("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),he("dddd",(function(e,t){return t.weekdaysRegex(e)})),be(["dd","ddd","dddd"],(function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:m(n).invalidWeekday=e})),be(["d","e","E"],(function(e,t,n,r){t[r]=V(e)}));var $e="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ue="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Be=pe,qe=pe,We=pe;function Ve(e,t,n){var r,i,o,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)o=h([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(o,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=ge.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=ge.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=ge.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=ge.call(this._weekdaysParse,a))||-1!==(i=ge.call(this._shortWeekdaysParse,a))||-1!==(i=ge.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=ge.call(this._shortWeekdaysParse,a))||-1!==(i=ge.call(this._weekdaysParse,a))||-1!==(i=ge.call(this._minWeekdaysParse,a))?i:null:-1!==(i=ge.call(this._minWeekdaysParse,a))||-1!==(i=ge.call(this._weekdaysParse,a))||-1!==(i=ge.call(this._shortWeekdaysParse,a))?i:null}function Ge(){function e(e,t){return t.length-e.length}var t,n,r,i,o,a=[],s=[],l=[],u=[];for(t=0;t<7;t++)n=h([2e3,1]).day(t),r=_e(this.weekdaysMin(n,"")),i=_e(this.weekdaysShort(n,"")),o=_e(this.weekdays(n,"")),a.push(r),s.push(i),l.push(o),u.push(r),u.push(i),u.push(o);a.sort(e),s.sort(e),l.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Je(){return this.hours()%12||12}function Ke(e,t){H(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function Ze(e,t){return t._meridiemParse}H("H",["HH",2],0,"hour"),H("h",["hh",2],0,Je),H("k",["kk",2],0,(function(){return this.hours()||24})),H("hmm",0,0,(function(){return""+Je.apply(this)+O(this.minutes(),2)})),H("hmmss",0,0,(function(){return""+Je.apply(this)+O(this.minutes(),2)+O(this.seconds(),2)})),H("Hmm",0,0,(function(){return""+this.hours()+O(this.minutes(),2)})),H("Hmmss",0,0,(function(){return""+this.hours()+O(this.minutes(),2)+O(this.seconds(),2)})),Ke("a",!0),Ke("A",!1),N("hour","h"),B("hour",13),he("a",Ze),he("A",Ze),he("H",re),he("h",re),he("k",re),he("HH",re,X),he("hh",re,X),he("kk",re,X),he("hmm",ie),he("hmmss",oe),he("Hmm",ie),he("Hmmss",oe),ye(["H","HH"],3),ye(["k","kk"],(function(e,t,n){var r=V(e);t[3]=24===r?0:r})),ye(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),ye(["h","hh"],(function(e,t,n){t[3]=V(e),m(n).bigHour=!0})),ye("hmm",(function(e,t,n){var r=e.length-2;t[3]=V(e.substr(0,r)),t[4]=V(e.substr(r)),m(n).bigHour=!0})),ye("hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[3]=V(e.substr(0,r)),t[4]=V(e.substr(r,2)),t[5]=V(e.substr(i)),m(n).bigHour=!0})),ye("Hmm",(function(e,t,n){var r=e.length-2;t[3]=V(e.substr(0,r)),t[4]=V(e.substr(r))})),ye("Hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[3]=V(e.substr(0,r)),t[4]=V(e.substr(r,2)),t[5]=V(e.substr(i))}));var Qe,Xe=G("Hours",!0),et={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Me,monthsShort:xe,week:{dow:0,doy:6},weekdays:$e,weekdaysMin:ze,weekdaysShort:Ue,meridiemParse:/[ap]\.?m?\.?/i},tt={},nt={};function rt(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n0;){if(r=ot(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&rt(i,n)>=t-1)break;t--}o++}return Qe}(e)}function ut(e){var t,n=e._a;return n&&-2===m(e).overflow&&(t=n[1]<0||n[1]>11?1:n[2]<1||n[2]>ke(n[0],n[1])?2:n[3]<0||n[3]>24||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||n[4]>59?4:n[5]<0||n[5]>59?5:n[6]<0||n[6]>999?6:-1,m(e)._overflowDayOfYear&&(t<0||t>2)&&(t=2),m(e)._overflowWeeks&&-1===t&&(t=7),m(e)._overflowWeekday&&-1===t&&(t=8),m(e).overflow=t),e}var ct=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,dt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ft=/Z|[+-]\d\d(?::?\d\d)?/,pt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],ht=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],mt=/^\/?Date\((-?\d+)/i,_t=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,gt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function vt(e){var t,n,r,i,o,a,s=e._i,l=ct.exec(s)||dt.exec(s),u=pt.length,c=ht.length;if(l){for(m(e).iso=!0,t=0,n=u;t7)&&(l=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,u=Re(St(),o,a),n=wt(t.gg,e._a[0],u.year),r=wt(t.w,u.week),null!=t.d?((i=t.d)<0||i>6)&&(l=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(l=!0)):i=o),r<1||r>Fe(n,o,a)?m(e)._overflowWeeks=!0:null!=l?m(e)._overflowWeekday=!0:(s=Ie(n,r,i,o,a),e._a[0]=s.year,e._dayOfYear=s.dayOfYear)}(e),null!=e._dayOfYear&&(a=wt(e._a[0],r[0]),(e._dayOfYear>Ee(a)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),n=Pe(a,0,e._dayOfYear),e._a[1]=n.getUTCMonth(),e._a[2]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=s[t]=r[t];for(;t<7;t++)e._a[t]=s[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[3]&&0===e._a[4]&&0===e._a[5]&&0===e._a[6]&&(e._nextDay=!0,e._a[3]=0),e._d=(e._useUTC?Pe:Ae).apply(null,s),o=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[3]=24),e._w&&void 0!==e._w.d&&e._w.d!==o&&(m(e).weekdayMismatch=!0)}}function Mt(e){if(e._f!==i.ISO_8601)if(e._f!==i.RFC_2822){e._a=[],m(e).empty=!0;var t,n,r,o,a,s,l,u=""+e._i,c=u.length,d=0;for(l=(r=R(e._f,e._locale).match(E)||[]).length,t=0;t0&&m(e).unusedInput.push(a),u=u.slice(u.indexOf(n)+n.length),d+=n.length),P[o]?(n?m(e).empty=!1:m(e).unusedTokens.push(o),we(o,n,e)):e._strict&&!n&&m(e).unusedTokens.push(o);m(e).charsLeftOver=c-d,u.length>0&&m(e).unusedInput.push(u),e._a[3]<=12&&!0===m(e).bigHour&&e._a[3]>0&&(m(e).bigHour=void 0),m(e).parsedDateParts=e._a.slice(0),m(e).meridiem=e._meridiem,e._a[3]=function(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}(e._locale,e._a[3],e._meridiem),null!==(s=m(e).era)&&(e._a[0]=e._locale.erasConvertYear(s,e._a[0])),kt(e),ut(e)}else bt(e);else vt(e)}function xt(e){var t=e._i,n=e._f;return e._locale=e._locale||lt(e._l),null===t||void 0===n&&""===t?g({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),k(t)?new w(ut(t)):(d(t)?e._d=t:o(n)?function(e){var t,n,r,i,o,a,s=!1,l=e._f.length;if(0===l)return m(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ithis?this:e:g()}));function Yt(e,t){var n,r;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return St();for(n=t[0],r=1;r=0?new Date(e+400,t,n)-126227808e5:new Date(e,t,n).valueOf()}function on(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-126227808e5:Date.UTC(e,t,n)}function an(e,t){return t.erasAbbrRegex(e)}function sn(){var e,t,n=[],r=[],i=[],o=[],a=this.eras();for(e=0,t=a.length;e(o=Fe(e,r,i))&&(t=o),cn.call(this,e,t,n,r,i))}function cn(e,t,n,r,i){var o=Ie(e,t,n,r,i),a=Pe(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}H("N",0,0,"eraAbbr"),H("NN",0,0,"eraAbbr"),H("NNN",0,0,"eraAbbr"),H("NNNN",0,0,"eraName"),H("NNNNN",0,0,"eraNarrow"),H("y",["y",1],"yo","eraYear"),H("y",["yy",2],0,"eraYear"),H("y",["yyy",3],0,"eraYear"),H("y",["yyyy",4],0,"eraYear"),he("N",an),he("NN",an),he("NNN",an),he("NNNN",(function(e,t){return t.erasNameRegex(e)})),he("NNNNN",(function(e,t){return t.erasNarrowRegex(e)})),ye(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,r){var i=n._locale.erasParse(e,r,n._strict);i?m(n).era=i:m(n).invalidEra=e})),he("y",ue),he("yy",ue),he("yyy",ue),he("yyyy",ue),he("yo",(function(e,t){return t._eraYearOrdinalRegex||ue})),ye(["y","yy","yyy","yyyy"],0),ye(["yo"],(function(e,t,n,r){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[0]=n._locale.eraYearOrdinalParse(e,i):t[0]=parseInt(e,10)})),H(0,["gg",2],0,(function(){return this.weekYear()%100})),H(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),ln("gggg","weekYear"),ln("ggggg","weekYear"),ln("GGGG","isoWeekYear"),ln("GGGGG","isoWeekYear"),N("weekYear","gg"),N("isoWeekYear","GG"),B("weekYear",1),B("isoWeekYear",1),he("G",ce),he("g",ce),he("GG",re,X),he("gg",re,X),he("GGGG",se,te),he("gggg",se,te),he("GGGGG",le,ne),he("ggggg",le,ne),be(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=V(e)})),be(["gg","GG"],(function(e,t,n,r){t[r]=i.parseTwoDigitYear(e)})),H("Q",0,"Qo","quarter"),N("quarter","Q"),B("quarter",7),he("Q",Q),ye("Q",(function(e,t){t[1]=3*(V(e)-1)})),H("D",["DD",2],"Do","date"),N("date","D"),B("date",9),he("D",re),he("DD",re,X),he("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),ye(["D","DD"],2),ye("Do",(function(e,t){t[2]=V(e.match(re)[0])}));var dn=G("Date",!0);H("DDD",["DDDD",3],"DDDo","dayOfYear"),N("dayOfYear","DDD"),B("dayOfYear",4),he("DDD",ae),he("DDDD",ee),ye(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=V(e)})),H("m",["mm",2],0,"minute"),N("minute","m"),B("minute",14),he("m",re),he("mm",re,X),ye(["m","mm"],4);var fn=G("Minutes",!1);H("s",["ss",2],0,"second"),N("second","s"),B("second",15),he("s",re),he("ss",re,X),ye(["s","ss"],5);var pn,hn,mn=G("Seconds",!1);for(H("S",0,0,(function(){return~~(this.millisecond()/100)})),H(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),H(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),H(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),H(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),H(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),H(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),N("millisecond","ms"),B("millisecond",16),he("S",ae,Q),he("SS",ae,X),he("SSS",ae,ee),pn="SSSS";pn.length<=9;pn+="S")he(pn,ue);function _n(e,t){t[6]=V(1e3*("0."+e))}for(pn="S";pn.length<=9;pn+="S")ye(pn,_n);hn=G("Milliseconds",!1),H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var gn=w.prototype;function vn(e){return e}gn.add=Vt,gn.calendar=function(e,t){1===arguments.length&&(arguments[0]?Kt(arguments[0])?(e=arguments[0],t=void 0):Zt(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||St(),r=It(n,this).startOf("day"),o=i.calendarFormat(this,r)||"sameElse",a=t&&(T(t[o])?t[o].call(this,n):t[o]);return this.format(a||this.localeData().calendar(o,this,St(n)))},gn.clone=function(){return new w(this)},gn.diff=function(e,t,n){var r,i,o;if(!this.isValid())return NaN;if(!(r=It(e,this)).isValid())return NaN;switch(i=6e4*(r.utcOffset()-this.utcOffset()),t=$(t)){case"year":o=Qt(this,r)/12;break;case"month":o=Qt(this,r);break;case"quarter":o=Qt(this,r)/3;break;case"second":o=(this-r)/1e3;break;case"minute":o=(this-r)/6e4;break;case"hour":o=(this-r)/36e5;break;case"day":o=(this-r-i)/864e5;break;case"week":o=(this-r-i)/6048e5;break;default:o=this-r}return n?o:W(o)},gn.endOf=function(e){var t,n;if(void 0===(e=$(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?on:rn,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-nn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-nn(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-nn(t,1e3)-1}return this._d.setTime(t),i.updateOffset(this,!0),this},gn.format=function(e){e||(e=this.isUtc()?i.defaultFormatUtc:i.defaultFormat);var t=I(this,e);return this.localeData().postformat(t)},gn.from=function(e,t){return this.isValid()&&(k(e)&&e.isValid()||St(e).isValid())?Ut({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},gn.fromNow=function(e){return this.from(St(),e)},gn.to=function(e,t){return this.isValid()&&(k(e)&&e.isValid()||St(e).isValid())?Ut({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},gn.toNow=function(e){return this.to(St(),e)},gn.get=function(e){return T(this[e=$(e)])?this[e]():this},gn.invalidAt=function(){return m(this).overflow},gn.isAfter=function(e,t){var n=k(e)?e:St(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=$(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()9999?I(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",I(n,"Z")):I(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},gn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,r="moment",i="";return this.isLocal()||(r=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+r+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=i+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+n)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(gn[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),gn.toJSON=function(){return this.isValid()?this.toISOString():null},gn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},gn.unix=function(){return Math.floor(this.valueOf()/1e3)},gn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},gn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},gn.eraName=function(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;ethis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},gn.isLocal=function(){return!!this.isValid()&&!this._isUTC},gn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},gn.isUtc=Ft,gn.isUTC=Ft,gn.zoneAbbr=function(){return this._isUTC?"UTC":""},gn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},gn.dates=x("dates accessor is deprecated. Use date instead.",dn),gn.months=x("months accessor is deprecated. Use month instead",je),gn.years=x("years accessor is deprecated. Use year instead",Ce),gn.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()})),gn.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!u(this._isDSTShifted))return this._isDSTShifted;var e,t={};return b(t,this),(t=xt(t))._a?(e=t._isUTC?h(t._a):St(t._a),this._isDSTShifted=this.isValid()&&function(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),a=0;for(r=0;r0):this._isDSTShifted=!1,this._isDSTShifted}));var yn=j.prototype;function bn(e,t,n,r){var i=lt(),o=h().set(r,t);return i[n](o,e)}function wn(e,t,n){if(c(e)&&(t=e,e=void 0),e=e||"",null!=t)return bn(e,t,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=bn(e,r,n,"month");return i}function kn(e,t,n,r){"boolean"==typeof e?(c(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,c(t)&&(n=t,t=void 0),t=t||"");var i,o=lt(),a=e?o._week.dow:0,s=[];if(null!=n)return bn(t,(n+a)%7,r,"day");for(i=0;i<7;i++)s[i]=bn(t,(i+a)%7,r,"day");return s}yn.calendar=function(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return T(r)?r.call(t,n):r},yn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(E).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])},yn.invalidDate=function(){return this._invalidDate},yn.ordinal=function(e){return this._ordinal.replace("%d",e)},yn.preparse=vn,yn.postformat=vn,yn.relativeTime=function(e,t,n,r){var i=this._relativeTime[n];return T(i)?i(e,t,n,r):i.replace(/%d/i,e)},yn.pastFuture=function(e,t){var n=this._relativeTime[e>0?"future":"past"];return T(n)?n(t):n.replace(/%s/i,t)},yn.set=function(e){var t,n;for(n in e)s(e,n)&&(T(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},yn.eras=function(e,t){var n,r,o,a=this._eras||lt("en")._eras;for(n=0,r=a.length;n=0)return l[r]},yn.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?i(e.since).year():i(e.since).year()+(t-e.offset)*n},yn.erasAbbrRegex=function(e){return s(this,"_erasAbbrRegex")||sn.call(this),e?this._erasAbbrRegex:this._erasRegex},yn.erasNameRegex=function(e){return s(this,"_erasNameRegex")||sn.call(this),e?this._erasNameRegex:this._erasRegex},yn.erasNarrowRegex=function(e){return s(this,"_erasNarrowRegex")||sn.call(this),e?this._erasNarrowRegex:this._erasRegex},yn.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Le).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone},yn.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Le.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},yn.monthsParse=function(e,t,n){var r,i,o;if(this._monthsParseExact)return Te.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(i=h([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}},yn.monthsRegex=function(e){return this._monthsParseExact?(s(this,"_monthsRegex")||Oe.call(this),e?this._monthsStrictRegex:this._monthsRegex):(s(this,"_monthsRegex")||(this._monthsRegex=De),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},yn.monthsShortRegex=function(e){return this._monthsParseExact?(s(this,"_monthsRegex")||Oe.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(s(this,"_monthsShortRegex")||(this._monthsShortRegex=Se),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},yn.week=function(e){return Re(e,this._week.dow,this._week.doy).week},yn.firstDayOfYear=function(){return this._week.doy},yn.firstDayOfWeek=function(){return this._week.dow},yn.weekdays=function(e,t){var n=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Ne(n,this._week.dow):e?n[e.day()]:n},yn.weekdaysMin=function(e){return!0===e?Ne(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},yn.weekdaysShort=function(e){return!0===e?Ne(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},yn.weekdaysParse=function(e,t,n){var r,i,o;if(this._weekdaysParseExact)return Ve.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=h([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}},yn.weekdaysRegex=function(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Ge.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(s(this,"_weekdaysRegex")||(this._weekdaysRegex=Be),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},yn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Ge.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(s(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=qe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},yn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||Ge.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(s(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=We),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},yn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},yn.meridiem=function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},at("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===V(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),i.lang=x("moment.lang is deprecated. Use moment.locale instead.",at),i.langData=x("moment.langData is deprecated. Use moment.localeData instead.",lt);var Mn=Math.abs;function xn(e,t,n,r){var i=Ut(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Ln(e){return e<0?Math.floor(e):Math.ceil(e)}function Sn(e){return 4800*e/146097}function Dn(e){return 146097*e/4800}function Tn(e){return function(){return this.as(e)}}var Yn=Tn("ms"),jn=Tn("s"),On=Tn("m"),En=Tn("h"),Cn=Tn("d"),An=Tn("w"),Pn=Tn("M"),Hn=Tn("Q"),In=Tn("y");function Rn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Fn=Rn("milliseconds"),Nn=Rn("seconds"),$n=Rn("minutes"),Un=Rn("hours"),zn=Rn("days"),Bn=Rn("months"),qn=Rn("years"),Wn=Math.round,Vn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Gn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}var Jn=Math.abs;function Kn(e){return(e>0)-(e<0)||+e}function Zn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,i,o,a,s,l=Jn(this._milliseconds)/1e3,u=Jn(this._days),c=Jn(this._months),d=this.asSeconds();return d?(e=W(l/60),t=W(e/60),l%=60,e%=60,n=W(c/12),c%=12,r=l?l.toFixed(3).replace(/\.?0+$/,""):"",i=d<0?"-":"",o=Kn(this._months)!==Kn(d)?"-":"",a=Kn(this._days)!==Kn(d)?"-":"",s=Kn(this._milliseconds)!==Kn(d)?"-":"",i+"P"+(n?o+n+"Y":"")+(c?o+c+"M":"")+(u?a+u+"D":"")+(t||e||l?"T":"")+(t?s+t+"H":"")+(e?s+e+"M":"")+(l?s+r+"S":"")):"P0D"}var Qn=Ot.prototype;return Qn.isValid=function(){return this._isValid},Qn.abs=function(){var e=this._data;return this._milliseconds=Mn(this._milliseconds),this._days=Mn(this._days),this._months=Mn(this._months),e.milliseconds=Mn(e.milliseconds),e.seconds=Mn(e.seconds),e.minutes=Mn(e.minutes),e.hours=Mn(e.hours),e.months=Mn(e.months),e.years=Mn(e.years),this},Qn.add=function(e,t){return xn(this,e,t,1)},Qn.subtract=function(e,t){return xn(this,e,t,-1)},Qn.as=function(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=$(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+Sn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Dn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}},Qn.asMilliseconds=Yn,Qn.asSeconds=jn,Qn.asMinutes=On,Qn.asHours=En,Qn.asDays=Cn,Qn.asWeeks=An,Qn.asMonths=Pn,Qn.asQuarters=Hn,Qn.asYears=In,Qn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*V(this._months/12):NaN},Qn._bubble=function(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||o<=0&&a<=0&&s<=0||(o+=864e5*Ln(Dn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=W(o/1e3),l.seconds=e%60,t=W(e/60),l.minutes=t%60,n=W(t/60),l.hours=n%24,a+=W(n/24),i=W(Sn(a)),s+=i,a-=Ln(Dn(i)),r=W(s/12),s%=12,l.days=a,l.months=s,l.years=r,this},Qn.clone=function(){return Ut(this)},Qn.get=function(e){return e=$(e),this.isValid()?this[e+"s"]():NaN},Qn.milliseconds=Fn,Qn.seconds=Nn,Qn.minutes=$n,Qn.hours=Un,Qn.days=zn,Qn.weeks=function(){return W(this.days()/7)},Qn.months=Bn,Qn.years=qn,Qn.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,i=!1,o=Vn;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(i=e),"object"==typeof t&&(o=Object.assign({},Vn,t),null!=t.s&&null==t.ss&&(o.ss=t.s-1)),n=this.localeData(),r=function(e,t,n,r){var i=Ut(e).abs(),o=Wn(i.as("s")),a=Wn(i.as("m")),s=Wn(i.as("h")),l=Wn(i.as("d")),u=Wn(i.as("M")),c=Wn(i.as("w")),d=Wn(i.as("y")),f=o<=n.ss&&["s",o]||o0,f[4]=r,Gn.apply(null,f)}(this,!i,o,n),i&&(r=n.pastFuture(+this,r)),n.postformat(r)},Qn.toISOString=Zn,Qn.toString=Zn,Qn.toJSON=Zn,Qn.locale=Xt,Qn.localeData=tn,Qn.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Zn),Qn.lang=en,H("X",0,0,"unix"),H("x",0,0,"valueOf"),he("x",ce),he("X",/[+-]?\d+(\.\d{1,3})?/),ye("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),ye("x",(function(e,t,n){n._d=new Date(V(e))})), +//! moment.js +i.version="2.29.4",t=St,i.fn=gn,i.min=function(){var e=[].slice.call(arguments,0);return Yt("isBefore",e)},i.max=function(){var e=[].slice.call(arguments,0);return Yt("isAfter",e)},i.now=function(){return Date.now?Date.now():+new Date},i.utc=h,i.unix=function(e){return St(1e3*e)},i.months=function(e,t){return wn(e,t,"months")},i.isDate=d,i.locale=at,i.invalid=g,i.duration=Ut,i.isMoment=k,i.weekdays=function(e,t,n){return kn(e,t,n,"weekdays")},i.parseZone=function(){return St.apply(null,arguments).parseZone()},i.localeData=lt,i.isDuration=Et,i.monthsShort=function(e,t){return wn(e,t,"monthsShort")},i.weekdaysMin=function(e,t,n){return kn(e,t,n,"weekdaysMin")},i.defineLocale=st,i.updateLocale=function(e,t){if(null!=t){var n,r,i=et;null!=tt[e]&&null!=tt[e].parentLocale?tt[e].set(Y(tt[e]._config,t)):(null!=(r=ot(e))&&(i=r._config),t=Y(i,t),null==r&&(t.abbr=e),(n=new j(t)).parentLocale=tt[e],tt[e]=n),at(e)}else null!=tt[e]&&(null!=tt[e].parentLocale?(tt[e]=tt[e].parentLocale,e===at()&&at(e)):null!=tt[e]&&delete tt[e]);return tt[e]},i.locales=function(){return L(tt)},i.weekdaysShort=function(e,t,n){return kn(e,t,n,"weekdaysShort")},i.normalizeUnits=$,i.relativeTimeRounding=function(e){return void 0===e?Wn:"function"==typeof e&&(Wn=e,!0)},i.relativeTimeThreshold=function(e,t){return void 0!==Vn[e]&&(void 0===t?Vn[e]:(Vn[e]=t,"s"===e&&(Vn.ss=t-1),!0))},i.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},i.prototype=gn,i.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},i}()}).call(this,n(90)(e))},function(e,t,n){"use strict";function r(e,t,n,r,i,o,a,s){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):i&&(l=s?function(){i.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},function(e,t,n){var r=n(8),i=n(46).f,o=n(34),a=n(23),s=n(126),l=n(182),u=n(81);e.exports=function(e,t){var n,c,d,f,p,h=e.target,m=e.global,_=e.stat;if(n=m?r:_?r[h]||s(h,{}):(r[h]||{}).prototype)for(c in t){if(f=t[c],d=e.noTargetGet?(p=i(n,c))&&p.value:n[c],!u(m?c:h+(_?".":"#")+c,e.forced)&&void 0!==d){if(typeof f==typeof d)continue;l(f,d)}(e.sham||d&&d.sham)&&o(f,"sham",!0),a(n,c,f,e)}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));n(42),n(48),n(17),n(543),n(54),n(55),n(196),n(544),n(92);var r=n(38);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0&&Math.floor(t)===t&&isFinite(e)}function p(e){return o(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function h(e){return null==e?"":Array.isArray(e)||c(e)&&e.toString===u?JSON.stringify(e,null,2):String(e)}function m(e){var t=parseFloat(e);return isNaN(t)?e:t}function _(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var y=Object.prototype.hasOwnProperty;function b(e,t){return y.call(e,t)}function w(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var k=/-(\w)/g,M=w((function(e){return e.replace(k,(function(e,t){return t?t.toUpperCase():""}))})),x=w((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),L=/\B([A-Z])/g,S=w((function(e){return e.replace(L,"-$1").toLowerCase()}));var D=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function T(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function Y(e,t){for(var n in t)e[n]=t[n];return e}function j(e){for(var t={},n=0;n0,Z=G&&G.indexOf("edge/")>0,Q=(G&&G.indexOf("android"),G&&/iphone|ipad|ipod|ios/.test(G)||"ios"===V),X=(G&&/chrome\/\d+/.test(G),G&&/phantomjs/.test(G),G&&G.match(/firefox\/(\d+)/)),ee={}.watch,te=!1;if(q)try{var ne={};Object.defineProperty(ne,"passive",{get:function(){te=!0}}),window.addEventListener("test-passive",null,ne)}catch(e){}var re=function(){return void 0===z&&(z=!q&&!W&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),z},ie=q&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function oe(e){return"function"==typeof e&&/native code/.test(e.toString())}var ae,se="undefined"!=typeof Symbol&&oe(Symbol)&&"undefined"!=typeof Reflect&&oe(Reflect.ownKeys);ae="undefined"!=typeof Set&&oe(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var le=O,ue=0,ce=function(){this.id=ue++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){v(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){var e=this.subs.slice();for(var t=0,n=e.length;t-1)if(o&&!b(i,"default"))a=!1;else if(""===a||a===S(e)){var l=$e(String,i.type);(l<0||s0&&(ct((l=e(l,(n||"")+"_"+r))[0])&&ct(c)&&(d[u]=ge(c.text+l[0].text),l.shift()),d.push.apply(d,l)):s(l)?ct(c)?d[u]=ge(c.text+l):""!==l&&d.push(ge(l)):ct(l)&&ct(c)?d[u]=ge(c.text+l.text):(a(t._isVList)&&o(l.tag)&&i(l.key)&&o(n)&&(l.key="__vlist"+n+"_"+r+"__"),d.push(l)));return d}(e):void 0}function ct(e){return o(e)&&o(e.text)&&!1===e.isComment}function dt(e,t){if(e){for(var n=Object.create(null),r=se?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=e?!!e.$stable:!o,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(a&&n&&n!==r&&s===n.$key&&!o&&!n.$hasNormal)return n;for(var l in i={},e)e[l]&&"$"!==l[0]&&(i[l]=mt(t,l,e[l]))}else i={};for(var u in t)u in i||(i[u]=_t(t,u));return e&&Object.isExtensible(e)&&(e._normalized=i),$(i,"$stable",a),$(i,"$key",s),$(i,"$hasNormal",o),i}function mt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:ut(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function _t(e,t){return function(){return e[t]}}function gt(e,t){var n,r,i,a,s;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,i=e.length;rdocument.createEvent("Event").timeStamp&&(ln=function(){return un.now()})}function cn(){var e,t;for(sn=ln(),on=!0,en.sort((function(e,t){return e.id-t.id})),an=0;anan&&en[n].id>e.id;)n--;en.splice(n+1,0,e)}else en.push(e);rn||(rn=!0,tt(cn))}}(this)},fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||l(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Ue(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||v(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:O,set:O};function hn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,pn)}function mn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&Me(!1);var o=function(o){i.push(o);var a=Re(o,t,n,e);Se(r,o,a),o in e||hn(e,"_props",o)};for(var a in t)o(a);Me(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?O:D(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;c(t=e._data="function"==typeof t?function(e,t){fe();try{return e.call(t,t)}catch(e){return Ue(e,t,"data()"),{}}finally{pe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];0,r&&b(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&hn(e,"_data",o))}var a;Le(t,!0)}(e):Le(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=re();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;0,r||(n[i]=new fn(e,a||O,O,_n)),i in e||gn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==ee&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!d(e)&&e.test(t)}function Dn(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=Ln(a.componentOptions);s&&!t(s)&&Tn(n,o,r,i)}}}function Tn(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,v(n,t)}!function(e){e.prototype._init=function(e){var t=this;t._uid=wn++,t._isVue=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=He(kn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Gt(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,i=n&&n.context;e.$slots=ft(t._renderChildren,i),e.$scopedSlots=r,e._c=function(t,n,r,i){return Ft(e,t,n,r,i,!1)},e.$createElement=function(t,n,r,i){return Ft(e,t,n,r,i,!0)};var o=n&&n.data;Se(e,"$attrs",o&&o.attrs||r,null,!0),Se(e,"$listeners",t._parentListeners||r,null,!0)}(t),Xt(t,"beforeCreate"),function(e){var t=dt(e.$options.inject,e);t&&(Me(!1),Object.keys(t).forEach((function(n){Se(e,n,t[n])})),Me(!0))}(t),mn(t),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(t),Xt(t,"created"),t.$options.el&&t.$mount(t.$options.el)}}(Mn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=De,e.prototype.$delete=Te,e.prototype.$watch=function(e,t,n){if(c(t))return bn(this,e,t,n);(n=n||{}).user=!0;var r=new fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){Ue(e,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(Mn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?T(n):n;for(var r=T(arguments,1),i='event handler for "'+e+'"',o=0,a=n.length;oparseInt(this.max)&&Tn(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:le,extend:Y,mergeOptions:He,defineReactive:Se},e.set=De,e.delete=Te,e.nextTick=tt,e.observable=function(e){return Le(e),e},e.options=Object.create(null),I.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,Y(e.options.components,jn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=T(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=He(this.options,e),this}}(e),xn(e),function(e){I.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&c(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(Mn),Object.defineProperty(Mn.prototype,"$isServer",{get:re}),Object.defineProperty(Mn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Mn,"FunctionalRenderContext",{value:Et}),Mn.version="2.6.12";var On=_("style,class"),En=_("input,textarea,option,select,progress"),Cn=_("contenteditable,draggable,spellcheck"),An=_("events,caret,typing,plaintext-only"),Pn=_("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Hn="http://www.w3.org/1999/xlink",In=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Rn=function(e){return In(e)?e.slice(6,e.length):""},Fn=function(e){return null==e||!1===e};function Nn(e){for(var t=e.data,n=e,r=e;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=$n(r.data,t));for(;o(n=n.parent);)n&&n.data&&(t=$n(t,n.data));return function(e,t){if(o(e)||o(t))return Un(e,zn(t));return""}(t.staticClass,t.class)}function $n(e,t){return{staticClass:Un(e.staticClass,t.staticClass),class:o(e.class)?[e.class,t.class]:t.class}}function Un(e,t){return e?t?e+" "+t:e:t||""}function zn(e){return Array.isArray(e)?function(e){for(var t,n="",r=0,i=e.length;r-1?fr(e,t,n):Pn(t)?Fn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Cn(t)?e.setAttribute(t,function(e,t){return Fn(t)||"false"===t?"false":"contenteditable"===e&&An(t)?t:"true"}(t,n)):In(t)?Fn(n)?e.removeAttributeNS(Hn,Rn(t)):e.setAttributeNS(Hn,t,n):fr(e,t,n)}function fr(e,t,n){if(Fn(n))e.removeAttribute(t);else{if(J&&!K&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var pr={create:cr,update:cr};function hr(e,t){var n=t.elm,r=t.data,a=e.data;if(!(i(r.staticClass)&&i(r.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var s=Nn(t),l=n._transitionClasses;o(l)&&(s=Un(s,zn(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var mr,_r={create:hr,update:hr};function gr(e,t,n){var r=mr;return function i(){var o=t.apply(null,arguments);null!==o&&br(e,i,n,r)}}var vr=Ve&&!(X&&Number(X[1])<=53);function yr(e,t,n,r){if(vr){var i=sn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}mr.addEventListener(e,t,te?{capture:n,passive:r}:n)}function br(e,t,n,r){(r||mr).removeEventListener(e,t._wrapper||t,n)}function wr(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=e.data.on||{};mr=t.elm,function(e){if(o(e.__r)){var t=J?"change":"input";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}o(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(n),at(n,r,yr,br,gr,t.context),mr=void 0}}var kr,Mr={create:wr,update:wr};function xr(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,r,a=t.elm,s=e.data.domProps||{},l=t.data.domProps||{};for(n in o(l.__ob__)&&(l=t.data.domProps=Y({},l)),s)n in l||(a[n]="");for(n in l){if(r=l[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),r===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=r;var u=i(r)?"":String(r);Lr(a,u)&&(a.value=u)}else if("innerHTML"===n&&Wn(a.tagName)&&i(a.innerHTML)){(kr=kr||document.createElement("div")).innerHTML=""+r+"";for(var c=kr.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;c.firstChild;)a.appendChild(c.firstChild)}else if(r!==s[n])try{a[n]=r}catch(e){}}}}function Lr(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(o(r)){if(r.number)return m(n)!==m(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var Sr={create:xr,update:xr},Dr=w((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}})),t}));function Tr(e){var t=Yr(e.style);return e.staticStyle?Y(e.staticStyle,t):t}function Yr(e){return Array.isArray(e)?j(e):"string"==typeof e?Dr(e):e}var jr,Or=/^--/,Er=/\s*!important$/,Cr=function(e,t,n){if(Or.test(t))e.style.setProperty(t,n);else if(Er.test(n))e.style.setProperty(S(t),n.replace(Er,""),"important");else{var r=Pr(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(Rr).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Nr(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(Rr).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function $r(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&Y(t,Ur(e.name||"v")),Y(t,e),t}return"string"==typeof e?Ur(e):void 0}}var Ur=w((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),zr=q&&!K,Br="transition",qr="transitionend",Wr="animation",Vr="animationend";zr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Br="WebkitTransition",qr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Wr="WebkitAnimation",Vr="webkitAnimationEnd"));var Gr=q?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Jr(e){Gr((function(){Gr(e)}))}function Kr(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),Fr(e,t))}function Zr(e,t){e._transitionClasses&&v(e._transitionClasses,t),Nr(e,t)}function Qr(e,t,n){var r=ei(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s="transition"===i?qr:Vr,l=0,u=function(){e.removeEventListener(s,c),n()},c=function(t){t.target===e&&++l>=a&&u()};setTimeout((function(){l0&&(n="transition",c=a,d=o.length):"animation"===t?u>0&&(n="animation",c=u,d=l.length):d=(n=(c=Math.max(a,u))>0?a>u?"transition":"animation":null)?"transition"===n?o.length:l.length:0,{type:n,timeout:c,propCount:d,hasTransform:"transition"===n&&Xr.test(r[Br+"Property"])}}function ti(e,t){for(;e.length1}function si(e,t){!0!==t.data.show&&ri(t)}var li=function(e){var t,n,r={},l=e.modules,u=e.nodeOps;for(t=0;th?y(e,i(n[g+1])?null:n[g+1].elm,n,p,g,r):p>g&&w(t,f,h)}(f,_,g,n,c):o(g)?(o(e.text)&&u.setTextContent(f,""),y(f,null,g,0,g.length-1,n)):o(_)?w(_,0,_.length-1):o(e.text)&&u.setTextContent(f,""):e.text!==t.text&&u.setTextContent(f,t.text),o(h)&&o(p=h.hook)&&o(p=p.postpatch)&&p(e,t)}}}function L(e,t,n){if(a(n)&&o(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r-1,a.selected!==o&&(a.selected=o);else if(A(pi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function fi(e,t){return t.every((function(t){return!A(t,e)}))}function pi(e){return"_value"in e?e._value:e.value}function hi(e){e.target.composing=!0}function mi(e){e.target.composing&&(e.target.composing=!1,_i(e.target,"input"))}function _i(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function gi(e){return!e.componentInstance||e.data&&e.data.transition?e:gi(e.componentInstance._vnode)}var vi={model:ui,show:{bind:function(e,t,n){var r=t.value,i=(n=gi(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,ri(n,(function(){e.style.display=o}))):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=gi(n)).data&&n.data.transition?(n.data.show=!0,r?ri(n,(function(){e.style.display=e.__vOriginalDisplay})):ii(n,(function(){e.style.display="none"}))):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},yi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function bi(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?bi(Bt(t.children)):e}function wi(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[M(o)]=i[o];return t}function ki(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var Mi=function(e){return e.tag||zt(e)},xi=function(e){return"show"===e.name},Li={name:"transition",props:yi,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Mi)).length){0;var r=this.mode;0;var i=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return i;var o=bi(i);if(!o)return i;if(this._leaving)return ki(e,i);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:s(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var l=(o.data||(o.data={})).transition=wi(this),u=this._vnode,c=bi(u);if(o.data.directives&&o.data.directives.some(xi)&&(o.data.show=!0),c&&c.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(o,c)&&!zt(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var d=c.data.transition=Y({},l);if("out-in"===r)return this._leaving=!0,st(d,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),ki(e,i);if("in-out"===r){if(zt(o))return u;var f,p=function(){f()};st(l,"afterEnter",p),st(l,"enterCancelled",p),st(d,"delayLeave",(function(e){f=e}))}}return i}}},Si=Y({tag:String,moveClass:String},yi);function Di(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Ti(e){e.data.newPos=e.elm.getBoundingClientRect()}function Yi(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete Si.mode;var ji={Transition:Li,TransitionGroup:{props:Si,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Kt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=wi(this),s=0;s-1?Gn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Gn[e]=/HTMLUnknownElement/.test(t.toString())},Y(Mn.options.directives,vi),Y(Mn.options.components,ji),Mn.prototype.__patch__=q?li:O,Mn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=_e),Xt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new fn(e,r,O,{before:function(){e._isMounted&&!e._isDestroyed&&Xt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Xt(e,"mounted")),e}(this,e=e&&q?function(e){if("string"==typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}(e):void 0,t)},q&&setTimeout((function(){F.devtools&&ie&&ie.emit("init",Mn)}),0),t.a=Mn},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));n(18);function r(e,t,n,r,i,o,a){try{var s=e[o](a),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,i)}function i(e){return function(){var t=this,n=arguments;return new Promise((function(i,o){var a=e.apply(t,n);function s(e){r(a,i,o,s,l,"next",e)}function l(e){r(a,i,o,s,l,"throw",e)}s(void 0)}))}}},function(e,t,n){"use strict";var r=Object.prototype.hasOwnProperty;function i(e,t){return r.call(e,t)}function o(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function a(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var s=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,l=new RegExp(s.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),u=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,c=n(404);var d=/[&<>"]/,f=/[&<>"]/g,p={"&":"&","<":"<",">":">",'"':"""};function h(e){return p[e]}var m=/[.?*+^$[\]\\(){}|-]/g;var _=n(170);t.lib={},t.lib.mdurl=n(405),t.lib.ucmicro=n(655),t.assign=function(e){var t=Array.prototype.slice.call(arguments,1);return t.forEach((function(t){if(t){if("object"!=typeof t)throw new TypeError(t+"must be object");Object.keys(t).forEach((function(n){e[n]=t[n]}))}})),e},t.isString=function(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)},t.has=i,t.unescapeMd=function(e){return e.indexOf("\\")<0?e:e.replace(s,"$1")},t.unescapeAll=function(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(l,(function(e,t,n){return t||function(e,t){var n=0;return i(c,t)?c[t]:35===t.charCodeAt(0)&&u.test(t)&&o(n="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?a(n):e}(e,n)}))},t.isValidEntityCode=o,t.fromCodePoint=a,t.escapeHtml=function(e){return d.test(e)?e.replace(f,h):e},t.arrayReplaceAt=function(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))},t.isSpace=function(e){switch(e){case 9:case 32:return!0}return!1},t.isWhiteSpace=function(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1},t.isMdAsciiPunct=function(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}},t.isPunctChar=function(e){return _.test(e)},t.escapeRE=function(e){return e.replace(m,"\\$&")},t.normalizeReference=function(e){return e=e.trim().replace(/\s+/g," "),"Ṿ"==="ẞ".toLowerCase()&&(e=e.replace(/ẞ/g,"ß")),e.toLowerCase().toUpperCase()}},function(e,t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof global&&global)||function(){return this}()||Function("return this")()},function(e,t,n){var r=n(8),i=n(124),o=n(22),a=n(97),s=n(128),l=n(179),u=i("wks"),c=r.Symbol,d=l?c:c&&c.withoutSetter||a;e.exports=function(e){return o(u,e)&&(s||"string"==typeof u[e])||(s&&o(c,e)?u[e]=c[e]:u[e]=d("Symbol."+e)),u[e]}},function(e,t,n){"use strict";var r=n(2),i=n(66).map;r({target:"Array",proto:!0,forced:!n(85)("map")},{map:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){"use strict";n.d(t,"f",(function(){return r})),n.d(t,"c",(function(){return i})),n.d(t,"a",(function(){return o})),n.d(t,"l",(function(){return a})),n.d(t,"k",(function(){return s})),n.d(t,"d",(function(){return l})),n.d(t,"h",(function(){return u})),n.d(t,"i",(function(){return c})),n.d(t,"j",(function(){return d})),n.d(t,"b",(function(){return f})),n.d(t,"g",(function(){return p})),n.d(t,"o",(function(){return h})),n.d(t,"p",(function(){return m})),n.d(t,"e",(function(){return g})),n.d(t,"n",(function(){return v})),n.d(t,"m",(function(){return y}));n(26),n(12),n(552),n(60),n(36),n(10),n(54),n(55),n(17),n(69),n(93);var r=/#.*$/,i=/\.(md|html)$/,o=/\/$/,a=/^[a-z]+:/i;function s(e){return decodeURI(e).replace(r,"").replace(i,"")}function l(e){var t=e.match(r);if(t)return t[0]}function u(e){return a.test(e)}function c(e){return/^mailto:/.test(e)}function d(e){return/^tel:/.test(e)}function f(e){if(u(e))return e;var t=e.match(r),n=t?t[0]:"",i=s(e);return o.test(i)?e:i+".html"+n}function p(e,t){var n=decodeURIComponent(e.hash),r=l(t);return(!r||n===r)&&s(e.path)===s(t)}function h(e,t,n){if(u(t))return{type:"external",path:t};n&&(t=function(e,t,n){var r=e.charAt(0);if("/"===r)return e;if("?"===r||"#"===r)return t+e;var i=t.split("/");n&&i[i.length-1]||i.pop();for(var o=e.replace(/^\//,"").split("/"),a=0;a3&&void 0!==arguments[3]?arguments[3]:1;if("string"==typeof t)return h(n,t,r);if(Array.isArray(t))return Object.assign(h(n,t[0],r),{title:t[1]});var o=t.children||[];return 0===o.length&&t.path?Object.assign(h(n,t.path,r),{title:t.title}):{type:"group",path:t.path,title:t.title,sidebarDepth:t.sidebarDepth,initialOpenGroupIndex:t.initialOpenGroupIndex,children:o.map((function(t){return e(t,n,r,i+1)})),collapsable:!1!==t.collapsable}}(e,i,u)})):[]}return[]}function _(e){var t=g(e.headers||[]);return[{type:"group",collapsable:!1,title:e.title,path:null,children:t.map((function(t){return{type:"auto",title:t.title,basePath:e.path,path:e.path+"#"+t.slug,children:t.children||[]}}))}]}function g(e){var t;return(e=e.map((function(e){return Object.assign({},e)}))).forEach((function(e){2===e.level?t=e:t&&(t.children||(t.children=[])).push(e)})),e.filter((function(e){return 2===e.level}))}function v(e){return Object.assign(e,{type:e.items&&e.items.length?"links":"link"})}function y(e,t){if(Array.isArray(t))return{base:"/",config:t};for(var n in t)if(0===(r=e,/(\.html|\/)$/.test(r)?r:r+"/").indexOf(encodeURI(n)))return{base:n,config:t[n]};var r;return{}}},function(e,t,n){"use strict";var r=n(2),i=n(104);r({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},function(e,t,n){var r=n(5);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){var r=n(14);e.exports=function(e){if(!r(e))throw TypeError(String(e)+" is not an object");return e}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));n(69);var r=n(94);var i=n(116),o=n(71);function a(e){return function(e){if(Array.isArray(e))return Object(r.a)(e)}(e)||Object(i.a)(e)||Object(o.a)(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(e,t,n){"use strict";var r=n(2),i=n(66).filter;r({target:"Array",proto:!0,forced:!n(85)("filter")},{filter:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(142),i=n(23),o=n(446);r||i(Object.prototype,"toString",o,{unsafe:!0})},function(e,t,n){"use strict";var r=n(145).charAt,i=n(41),o=n(134),a=i.set,s=i.getterFor("String Iterator");o(String,"String",(function(e){a(this,{type:"String Iterator",string:String(e),index:0})}),(function(){var e,t=s(this),n=t.string,i=t.index;return i>=n.length?{value:void 0,done:!0}:(e=r(n,i),t.index+=e.length,{value:e,done:!1})}))},function(e,t,n){"use strict";var r,i=n(232),o=Object.prototype.toString,a=(r=Object.create(null),function(e){var t=o.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function s(e){return e=e.toLowerCase(),function(t){return a(t)===e}}function l(e){return Array.isArray(e)}function u(e){return void 0===e}var c=s("ArrayBuffer");function d(e){return null!==e&&"object"==typeof e}function f(e){if("object"!==a(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var p=s("Date"),h=s("File"),m=s("Blob"),_=s("FileList");function g(e){return"[object Function]"===o.call(e)}var v=s("URLSearchParams");function y(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),l(e))for(var n=0,r=e.length;n0;)a[o=r[i]]||(t[o]=e[o],a[o]=!0);e=Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:a,kindOfTest:s,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;var t=e.length;if(u(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:w,isFileList:_}},function(e,t,n){var r=n(13),i=n(177),o=n(15),a=n(73),s=Object.defineProperty;t.f=r?s:function(e,t,n){if(o(e),t=a(t,!0),o(n),i)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(8),i=n(34),o=n(22),a=n(126),s=n(133),l=n(41),u=l.get,c=l.enforce,d=String(String).split("String");(e.exports=function(e,t,n,s){var l,u=!!s&&!!s.unsafe,f=!!s&&!!s.enumerable,p=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof t||o(n,"name")||i(n,"name",t),(l=c(n)).source||(l.source=d.join("string"==typeof t?t:""))),e!==r?(u?!p&&e[t]&&(f=!0):delete e[t],f?e[t]=n:i(e,t,n)):f?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||s(this)}))},function(e,t,n){var r=n(8),i=n(195),o=n(122),a=n(34),s=n(9),l=s("iterator"),u=s("toStringTag"),c=o.values;for(var d in i){var f=r[d],p=f&&f.prototype;if(p){if(p[l]!==c)try{a(p,l,c)}catch(e){p[l]=c}if(p[u]||a(p,u,d),i[d])for(var h in o)if(p[h]!==o[h])try{a(p,h,o[h])}catch(e){p[h]=o[h]}}}},function(e,t,n){"use strict";var r=n(13),i=n(8),o=n(81),a=n(23),s=n(22),l=n(52),u=n(165),c=n(73),d=n(5),f=n(45),p=n(80).f,h=n(46).f,m=n(21).f,_=n(166).trim,g=i.Number,v=g.prototype,y="Number"==l(f(v)),b=function(e){var t,n,r,i,o,a,s,l,u=c(e,!1);if("string"==typeof u&&u.length>2)if(43===(t=(u=_(u)).charCodeAt(0))||45===t){if(88===(n=u.charCodeAt(2))||120===n)return NaN}else if(48===t){switch(u.charCodeAt(1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+u}for(a=(o=u.slice(2)).length,s=0;si)return NaN;return parseInt(o,r)}return+u};if(o("Number",!g(" 0o1")||!g("0b1")||g("+0x1"))){for(var w,k=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof k&&(y?d((function(){v.valueOf.call(n)})):"Number"!=l(n))?u(new g(b(t)),n,k):b(t)},M=r?p(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),x=0;M.length>x;x++)s(g,w=M[x])&&!s(k,w)&&m(k,w,h(g,w));k.prototype=v,v.constructor=k,a(i,"Number",k)}},function(e,t,n){"use strict";var r=n(103),i=n(15),o=n(29),a=n(77),s=n(32),l=n(150),u=n(451),c=n(105),d=Math.max,f=Math.min;r("replace",2,(function(e,t,n,r){var p=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,h=r.REPLACE_KEEPS_$0,m=p?"$":"$0";return[function(n,r){var i=s(this),o=null==n?void 0:n[e];return void 0!==o?o.call(n,i,r):t.call(String(i),n,r)},function(e,r){if(!p&&h||"string"==typeof r&&-1===r.indexOf(m)){var s=n(t,e,this,r);if(s.done)return s.value}var _=i(e),g=String(this),v="function"==typeof r;v||(r=String(r));var y=_.global;if(y){var b=_.unicode;_.lastIndex=0}for(var w=[];;){var k=c(_,g);if(null===k)break;if(w.push(k),!y)break;""===String(k[0])&&(_.lastIndex=l(g,o(_.lastIndex),b))}for(var M,x="",L=0,S=0;S=L&&(x+=g.slice(L,T)+C,L=T+D.length)}return x+g.slice(L)}]}))},function(e,t,n){"use strict";var r=n(2),i=n(5),o=n(83),a=n(14),s=n(30),l=n(29),u=n(84),c=n(146),d=n(85),f=n(9),p=n(75),h=f("isConcatSpreadable"),m=p>=51||!i((function(){var e=[];return e[h]=!1,e.concat()[0]!==e})),_=d("concat"),g=function(e){if(!a(e))return!1;var t=e[h];return void 0!==t?!!t:o(e)};r({target:"Array",proto:!0,forced:!m||!_},{concat:function(e){var t,n,r,i,o,a=s(this),d=c(a,0),f=0;for(t=-1,r=arguments.length;t9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n=9007199254740991)throw TypeError("Maximum allowed index exceeded");u(d,f++,o)}return d.length=f,d}})},function(e,t,n){var r=function(e){"use strict";var t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},i=r.iterator||"@@iterator",o=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function l(e,t,n,r){var i=t&&t.prototype instanceof d?t:d,o=Object.create(i.prototype),a=new M(r||[]);return o._invoke=function(e,t,n){var r="suspendedStart";return function(i,o){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===i)throw o;return L()}for(n.method=i,n.arg=o;;){var a=n.delegate;if(a){var s=b(a,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var l=u(e,t,n);if("normal"===l.type){if(r=n.done?"completed":"suspendedYield",l.arg===c)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(r="completed",n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var c={};function d(){}function f(){}function p(){}var h={};h[i]=function(){return this};var m=Object.getPrototypeOf,_=m&&m(m(x([])));_&&_!==t&&n.call(_,i)&&(h=_);var g=p.prototype=d.prototype=Object.create(h);function v(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){var r;this._invoke=function(i,o){function a(){return new t((function(r,a){!function r(i,o,a,s){var l=u(e[i],e,o);if("throw"!==l.type){var c=l.arg,d=c.value;return d&&"object"==typeof d&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,a,s)}),(function(e){r("throw",e,a,s)})):t.resolve(d).then((function(e){c.value=e,a(c)}),(function(e){return r("throw",e,a,s)}))}s(l.arg)}(i,o,r,a)}))}return r=r?r.then(a,a):a()}}function b(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,b(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var r=u(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,c;var i=r.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function k(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function M(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function x(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,o=function t(){for(;++r=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var s=n.call(o,"catchLoc"),l=n.call(o,"finallyLoc");if(s&&l){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),k(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;k(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}(e.exports);try{regeneratorRuntime=r}catch(e){Function("r","regeneratorRuntime = r")(r)}},function(e,t,n){var r=n(77),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},function(e,t,n){var r=n(32);e.exports=function(e){return Object(r(e))}},function(e,t,n){var r=n(72),i=n(32);e.exports=function(e){return r(i(e))}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){var r=n(13),i=n(21),o=n(64);e.exports=r?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){"use strict";var r=n(2),i=n(14),o=n(83),a=n(131),s=n(29),l=n(31),u=n(84),c=n(9),d=n(85)("slice"),f=c("species"),p=[].slice,h=Math.max;r({target:"Array",proto:!0,forced:!d},{slice:function(e,t){var n,r,c,d=l(this),m=s(d.length),_=a(e,m),g=a(void 0===t?m:t,m);if(o(d)&&("function"!=typeof(n=d.constructor)||n!==Array&&!o(n.prototype)?i(n)&&null===(n=n[f])&&(n=void 0):n=void 0,n===Array||void 0===n))return p.call(d,_,g);for(r=new(void 0===n?Array:n)(h(g-_,0)),c=0;_"+e+"<\/script>"},h=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(e){}var e,t;h=r?function(e){e.write(p("")),e.close();var t=e.parentWindow.Object;return e=null,t}(r):((t=u("iframe")).style.display="none",l.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(p("document.F=Object")),e.close(),e.F);for(var n=a.length;n--;)delete h.prototype[a[n]];return h()};s[d]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(f.prototype=i(e),n=new f,f.prototype=null,n[d]=e):n=h(),void 0===t?n:o(n,t)}},function(e,t,n){var r=n(13),i=n(100),o=n(64),a=n(31),s=n(73),l=n(22),u=n(177),c=Object.getOwnPropertyDescriptor;t.f=r?c:function(e,t){if(e=a(e),t=s(t,!0),u)try{return c(e,t)}catch(e){}if(l(e,t))return o(!i.f.call(e,t),e[t])}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,t,n){"use strict";var r=n(2),i=n(8),o=n(40),a=n(44),s=n(13),l=n(128),u=n(179),c=n(5),d=n(22),f=n(83),p=n(14),h=n(15),m=n(30),_=n(31),g=n(73),v=n(64),y=n(45),b=n(76),w=n(80),k=n(449),M=n(135),x=n(46),L=n(21),S=n(100),D=n(34),T=n(23),Y=n(124),j=n(99),O=n(78),E=n(97),C=n(9),A=n(203),P=n(204),H=n(53),I=n(41),R=n(66).forEach,F=j("hidden"),N=C("toPrimitive"),$=I.set,U=I.getterFor("Symbol"),z=Object.prototype,B=i.Symbol,q=o("JSON","stringify"),W=x.f,V=L.f,G=k.f,J=S.f,K=Y("symbols"),Z=Y("op-symbols"),Q=Y("string-to-symbol-registry"),X=Y("symbol-to-string-registry"),ee=Y("wks"),te=i.QObject,ne=!te||!te.prototype||!te.prototype.findChild,re=s&&c((function(){return 7!=y(V({},"a",{get:function(){return V(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=W(z,t);r&&delete z[t],V(e,t,n),r&&e!==z&&V(z,t,r)}:V,ie=function(e,t){var n=K[e]=y(B.prototype);return $(n,{type:"Symbol",tag:e,description:t}),s||(n.description=t),n},oe=u?function(e){return"symbol"==typeof e}:function(e){return Object(e)instanceof B},ae=function(e,t,n){e===z&&ae(Z,t,n),h(e);var r=g(t,!0);return h(n),d(K,r)?(n.enumerable?(d(e,F)&&e[F][r]&&(e[F][r]=!1),n=y(n,{enumerable:v(0,!1)})):(d(e,F)||V(e,F,v(1,{})),e[F][r]=!0),re(e,r,n)):V(e,r,n)},se=function(e,t){h(e);var n=_(t),r=b(n).concat(de(n));return R(r,(function(t){s&&!le.call(n,t)||ae(e,t,n[t])})),e},le=function(e){var t=g(e,!0),n=J.call(this,t);return!(this===z&&d(K,t)&&!d(Z,t))&&(!(n||!d(this,t)||!d(K,t)||d(this,F)&&this[F][t])||n)},ue=function(e,t){var n=_(e),r=g(t,!0);if(n!==z||!d(K,r)||d(Z,r)){var i=W(n,r);return!i||!d(K,r)||d(n,F)&&n[F][r]||(i.enumerable=!0),i}},ce=function(e){var t=G(_(e)),n=[];return R(t,(function(e){d(K,e)||d(O,e)||n.push(e)})),n},de=function(e){var t=e===z,n=G(t?Z:_(e)),r=[];return R(n,(function(e){!d(K,e)||t&&!d(z,e)||r.push(K[e])})),r};(l||(T((B=function(){if(this instanceof B)throw TypeError("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,t=E(e),n=function(e){this===z&&n.call(Z,e),d(this,F)&&d(this[F],t)&&(this[F][t]=!1),re(this,t,v(1,e))};return s&&ne&&re(z,t,{configurable:!0,set:n}),ie(t,e)}).prototype,"toString",(function(){return U(this).tag})),T(B,"withoutSetter",(function(e){return ie(E(e),e)})),S.f=le,L.f=ae,x.f=ue,w.f=k.f=ce,M.f=de,A.f=function(e){return ie(C(e),e)},s&&(V(B.prototype,"description",{configurable:!0,get:function(){return U(this).description}}),a||T(z,"propertyIsEnumerable",le,{unsafe:!0}))),r({global:!0,wrap:!0,forced:!l,sham:!l},{Symbol:B}),R(b(ee),(function(e){P(e)})),r({target:"Symbol",stat:!0,forced:!l},{for:function(e){var t=String(e);if(d(Q,t))return Q[t];var n=B(t);return Q[t]=n,X[n]=t,n},keyFor:function(e){if(!oe(e))throw TypeError(e+" is not a symbol");if(d(X,e))return X[e]},useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),r({target:"Object",stat:!0,forced:!l,sham:!s},{create:function(e,t){return void 0===t?y(e):se(y(e),t)},defineProperty:ae,defineProperties:se,getOwnPropertyDescriptor:ue}),r({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:ce,getOwnPropertySymbols:de}),r({target:"Object",stat:!0,forced:c((function(){M.f(1)}))},{getOwnPropertySymbols:function(e){return M.f(m(e))}}),q)&&r({target:"JSON",stat:!0,forced:!l||c((function(){var e=B();return"[null]"!=q([e])||"{}"!=q({a:e})||"{}"!=q(Object(e))}))},{stringify:function(e,t,n){for(var r,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(r=t,(p(t)||void 0!==e)&&!oe(e))return f(t)||(t=function(e,t){if("function"==typeof r&&(t=r.call(this,e,t)),!oe(t))return t}),i[1]=t,q.apply(null,i)}});B.prototype[N]||D(B.prototype,N,B.prototype.valueOf),H(B,"Symbol"),O[F]=!0},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){"use strict";var r=n(2),i=n(66).some;r({target:"Array",proto:!0,forced:!n(67)("some")},{some:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(21).f,i=n(22),o=n(9)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t,n){"use strict";var r=n(2),i=n(201);r({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},function(e,t,n){var r=n(8),i=n(195),o=n(201),a=n(34);for(var s in i){var l=r[s],u=l&&l.prototype;if(u&&u.forEach!==o)try{a(u,"forEach",o)}catch(e){u.forEach=o}}},function(e,t,n){"use strict";var r=n(2),i=n(13),o=n(8),a=n(22),s=n(14),l=n(21).f,u=n(182),c=o.Symbol;if(i&&"function"==typeof c&&(!("description"in c.prototype)||void 0!==c().description)){var d={},f=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),t=this instanceof f?new c(e):void 0===e?c():c(e);return""===e&&(d[t]=!0),t};u(f,c);var p=f.prototype=c.prototype;p.constructor=f;var h=p.toString,m="Symbol(test)"==String(c("test")),_=/^Symbol\((.*)\)[^)]+$/;l(p,"description",{configurable:!0,get:function(){var e=s(this)?this.valueOf():this,t=h.call(e);if(a(d,e))return"";var n=m?t.slice(7,-1):t.replace(_,"$1");return""===n?void 0:n}}),r({global:!0,forced:!0},{Symbol:f})}},function(e,t,n){"use strict";var r=n(2),i=n(130).includes,o=n(123);r({target:"Array",proto:!0},{includes:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o("includes")},function(e,t,n){var r=n(88),i=n(455),o=n(456),a=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?i(e):o(e)}},function(e,t,n){var r=n(470),i=n(473);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},function(e,t,n){"use strict";var r=n(103),i=n(147),o=n(15),a=n(32),s=n(144),l=n(150),u=n(29),c=n(105),d=n(104),f=n(5),p=[].push,h=Math.min,m=!f((function(){return!RegExp(4294967295,"y")}));r("split",2,(function(e,t,n){var r;return r="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var r=String(a(this)),o=void 0===n?4294967295:n>>>0;if(0===o)return[];if(void 0===e)return[r];if(!i(e))return t.call(r,e,o);for(var s,l,u,c=[],f=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),h=0,m=new RegExp(e.source,f+"g");(s=d.call(m,r))&&!((l=m.lastIndex)>h&&(c.push(r.slice(h,s.index)),s.length>1&&s.index=o));)m.lastIndex===s.index&&m.lastIndex++;return h===r.length?!u&&m.test("")||c.push(""):c.push(r.slice(h)),c.length>o?c.slice(0,o):c}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var i=a(this),o=null==t?void 0:t[e];return void 0!==o?o.call(t,i,n):r.call(String(i),t,n)},function(e,i){var a=n(r,e,this,i,r!==t);if(a.done)return a.value;var d=o(e),f=String(this),p=s(d,RegExp),_=d.unicode,g=(d.ignoreCase?"i":"")+(d.multiline?"m":"")+(d.unicode?"u":"")+(m?"y":"g"),v=new p(m?d:"^(?:"+d.source+")",g),y=void 0===i?4294967295:i>>>0;if(0===y)return[];if(0===f.length)return null===c(v,f)?[f]:[];for(var b=0,w=0,k=[];w"===e?n(558)(t,r):r(t[e])}},function(e,t,n){function r(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=r=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=r=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),r(t)}n(48),n(56),n(18),n(68),n(19),n(24),e.exports=r,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){n(92),e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(47);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){var r=n(65),i=n(72),o=n(30),a=n(29),s=n(146),l=[].push,u=function(e){var t=1==e,n=2==e,u=3==e,c=4==e,d=6==e,f=7==e,p=5==e||d;return function(h,m,_,g){for(var v,y,b=o(h),w=i(b),k=r(m,_,3),M=a(w.length),x=0,L=g||s,S=t?L(h,M):n||f?L(h,0):void 0;M>x;x++)if((p||x in w)&&(y=k(v=w[x],x,b),e))if(t)S[x]=y;else if(y)switch(e){case 3:return!0;case 5:return v;case 6:return x;case 2:l.call(S,v)}else switch(e){case 4:return!1;case 7:l.call(S,v)}return d?-1:u||c?c:S}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterOut:u(7)}},function(e,t,n){"use strict";var r=n(5);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){throw 1},1)}))}},function(e,t,n){n(204)("iterator")},function(e,t,n){n(2)({target:"Array",stat:!0},{isArray:n(83)})},function(e,t,n){"use strict";var r=n(20);function i(e,t,n,r,i){Error.call(this),this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i)}r.inherits(i,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var o=i.prototype,a={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){a[e]={value:e}})),Object.defineProperties(i,a),Object.defineProperty(o,"isAxiosError",{value:!0}),i.from=function(e,t,n,a,s,l){var u=Object.create(o);return r.toFlatObject(e,u,(function(e){return e!==Error.prototype})),i.call(u,e.message,t,n,a,s),u.name=e.name,l&&Object.assign(u,l),u},e.exports=i},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));n(35),n(18),n(43),n(102),n(19);var r=n(94);function i(e,t){if(e){if("string"==typeof e)return Object(r.a)(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(r.a)(e,t):void 0}}},function(e,t,n){var r=n(5),i=n(52),o="".split;e.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?o.call(e,""):Object(e)}:Object},function(e,t,n){var r=n(14);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var r=n(52),i=n(8);e.exports="process"==r(i.process)},function(e,t,n){var r,i,o=n(8),a=n(98),s=o.process,l=s&&s.versions,u=l&&l.v8;u?i=(r=u.split("."))[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(i=r[1]),e.exports=i&&+i},function(e,t,n){var r=n(180),i=n(132);e.exports=Object.keys||function(e){return r(e,i)}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t){e.exports={}},function(e,t){e.exports={}},function(e,t,n){var r=n(180),i=n(132).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},function(e,t,n){var r=n(5),i=/#|\.prototype\./,o=function(e,t){var n=s[a(e)];return n==u||n!=l&&("function"==typeof t?r(t):!!t)},a=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},s=o.data={},l=o.NATIVE="N",u=o.POLYFILL="P";e.exports=o},function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},function(e,t,n){var r=n(52);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){"use strict";var r=n(73),i=n(21),o=n(64);e.exports=function(e,t,n){var a=r(t);a in e?i.f(e,a,o(0,n)):e[a]=n}},function(e,t,n){var r=n(5),i=n(9),o=n(75),a=i("species");e.exports=function(e){return o>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},function(e,t,n){"use strict";var r=n(2),i=n(447).left,o=n(67),a=n(75),s=n(74);r({target:"Array",proto:!0,forced:!o("reduce")||!s&&a>79&&a<83},{reduce:function(e){return i(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){"use strict";var r=n(2),i=n(199),o=n(32);r({target:"String",proto:!0,forced:!n(200)("includes")},{includes:function(e){return!!~String(o(this)).indexOf(i(e),arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(37).Symbol;e.exports=r},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){var r=n(2),i=n(8),o=n(98),a=[].slice,s=function(e){return function(t,n){var r=arguments.length>2,i=r?a.call(arguments,2):void 0;return e(r?function(){("function"==typeof t?t:Function(t)).apply(this,i)}:t,n)}};r({global:!0,bind:!0,forced:/MSIE .\./.test(o)},{setTimeout:s(i.setTimeout),setInterval:s(i.setInterval)})},function(e,t,n){var r=n(2),i=n(13);r({target:"Object",stat:!0,forced:!i,sham:!i},{defineProperty:n(21).f})},function(e,t,n){"use strict";var r=n(2),i=n(130).indexOf,o=n(67),a=[].indexOf,s=!!a&&1/[1].indexOf(1,-0)<0,l=o("indexOf");r({target:"Array",proto:!0,forced:s||!l},{indexOf:function(e){return s?a.apply(this,arguments)||0:i(this,e,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n3)for(n=[n],o=3;o0?E(p.type,p.props,p.key,null,p.__v):p)){if(p.__=n,p.__b=n.__b+1,null===(f=g[c])||f&&p.key==f.key&&p.type===f.type)g[c]=void 0;else for(d=0;d3)for(n=[n],o=3;o=n.__.length&&n.__.push({}),n.__[e]}function pe(e){return oe=1,he(Me,e)}function he(e,t,n){var r=fe(ne++,2);return r.t=e,r.__c||(r.__=[n?n(t):Me(void 0,t),function(e){var t=r.t(r.__[0],e);r.__[0]!==t&&(r.__=[t,r.__[1]],r.__c.setState({}))}],r.__c=re),r.__}function me(e,t){var n=fe(ne++,3);!w.__s&&ke(n.__H,t)&&(n.__=e,n.__H=t,re.__H.__h.push(n))}function _e(e,t){var n=fe(ne++,4);!w.__s&&ke(n.__H,t)&&(n.__=e,n.__H=t,re.__h.push(n))}function ge(e,t){var n=fe(ne++,7);return ke(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function ve(){ae.forEach((function(e){if(e.__P)try{e.__H.__h.forEach(be),e.__H.__h.forEach(we),e.__H.__h=[]}catch(t){e.__H.__h=[],w.__e(t,e.__v)}})),ae=[]}w.__b=function(e){re=null,se&&se(e)},w.__r=function(e){le&&le(e),ne=0;var t=(re=e.__c).__H;t&&(t.__h.forEach(be),t.__h.forEach(we),t.__h=[])},w.diffed=function(e){ue&&ue(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(1!==ae.push(t)&&ie===w.requestAnimationFrame||((ie=w.requestAnimationFrame)||function(e){var t,n=function(){clearTimeout(r),ye&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);ye&&(t=requestAnimationFrame(n))})(ve)),re=void 0},w.__c=function(e,t){t.some((function(e){try{e.__h.forEach(be),e.__h=e.__h.filter((function(e){return!e.__||we(e)}))}catch(n){t.some((function(e){e.__h&&(e.__h=[])})),t=[],w.__e(n,e.__v)}})),ce&&ce(e,t)},w.unmount=function(e){de&&de(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(be)}catch(e){w.__e(e,t.__v)}};var ye="function"==typeof requestAnimationFrame;function be(e){var t=re;"function"==typeof e.__c&&e.__c(),re=t}function we(e){var t=re;e.__c=e.__(),re=t}function ke(e,t){return!e||e.length!==t.length||t.some((function(t,n){return t!==e[n]}))}function Me(e,t){return"function"==typeof t?t(e):t}function xe(e,t){for(var n in t)e[n]=t[n];return e}function Le(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var r in t)if("__source"!==r&&e[r]!==t[r])return!0;return!1}function Se(e){this.props=e}(Se.prototype=new A).isPureReactComponent=!0,Se.prototype.shouldComponentUpdate=function(e,t){return Le(this.props,e)||Le(this.state,t)};var De=w.__b;w.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),De&&De(e)};var Te="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911,Ye=function(e,t){return null==e?null:$($(e).map(t))},je={map:Ye,forEach:Ye,count:function(e){return e?$(e).length:0},only:function(e){var t=$(e);if(1!==t.length)throw"Children.only";return t[0]},toArray:$},Oe=w.__e;function Ee(){this.__u=0,this.t=null,this.__b=null}function Ce(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function Ae(){this.u=null,this.o=null}w.__e=function(e,t,n){if(e.then)for(var r,i=t;i=i.__;)if((r=i.__c)&&r.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),r.__c(e,t);Oe(e,t,n)},(Ee.prototype=new A).__c=function(e,t){var n=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);var i=Ce(r.__v),o=!1,a=function(){o||(o=!0,n.componentWillUnmount=n.__c,i?i(s):s())};n.__c=n.componentWillUnmount,n.componentWillUnmount=function(){a(),n.__c&&n.__c()};var s=function(){if(!--r.__u){if(r.state.__e){var e=r.state.__e;r.__v.__k[0]=function e(t,n,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map((function(t){return e(t,n,r)})),t.__c&&t.__c.__P===n&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(e,e.__c.__P,e.__c.__O)}var t;for(r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate()}},l=!0===t.__h;r.__u++||l||r.setState({__e:r.__b=r.__v.__k[0]}),e.then(a,a)},Ee.prototype.componentWillUnmount=function(){this.t=[]},Ee.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function e(t,n,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach((function(e){"function"==typeof e.__c&&e.__c()})),t.__c.__H=null),null!=(t=xe({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=n),t.__c=null),t.__k=t.__k&&t.__k.map((function(t){return e(t,n,r)}))),t}(this.__b,n,r.__O=r.__P)}this.__b=null}var i=t.__e&&O(C,null,e.fallback);return i&&(i.__h=null),[O(C,null,t.__e?null:e.children),i]};var Pe=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(e)}}),X(O(He,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function Re(e,t){return O(Ie,{__v:e,i:t})}(Ae.prototype=new A).__e=function(e){var t=this,n=Ce(t.__v),r=t.o.get(e);return r[0]++,function(i){var o=function(){t.props.revealOrder?(r.push(i),Pe(t,e,r)):i()};n?n(o):o()}},Ae.prototype.render=function(e){this.u=null,this.o=new Map;var t=$(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Ae.prototype.componentDidUpdate=Ae.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){Pe(e,n,t)}))};var Fe="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,Ne=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,$e=function(e){return("undefined"!=typeof Symbol&&"symbol"==h(Symbol())?/fil|che|rad/i:/fil|che|ra/i).test(e)};function Ue(e,t,n){return null==t.__k&&(t.textContent=""),X(e,t),"function"==typeof n&&n(),e?e.__c:null}A.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(A.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var ze=w.event;function Be(){}function qe(){return this.cancelBubble}function We(){return this.defaultPrevented}w.event=function(e){return ze&&(e=ze(e)),e.persist=Be,e.isPropagationStopped=qe,e.isDefaultPrevented=We,e.nativeEvent=e};var Ve,Ge={configurable:!0,get:function(){return this.class}},Je=w.vnode;w.vnode=function(e){var t=e.type,n=e.props,r=n;if("string"==typeof t){for(var i in r={},n){var o=n[i];"value"===i&&"defaultValue"in n&&null==o||("defaultValue"===i&&"value"in n&&null==n.value?i="value":"download"===i&&!0===o?o="":/ondoubleclick/i.test(i)?i="ondblclick":/^onchange(textarea|input)/i.test(i+t)&&!$e(n.type)?i="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(i)?i=i.toLowerCase():Ne.test(i)?i=i.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===o&&(o=void 0),r[i]=o)}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=$(n.children).forEach((function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)}))),"select"==t&&null!=r.defaultValue&&(r.value=$(n.children).forEach((function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value}))),e.props=r}t&&n.class!=n.className&&(Ge.enumerable="className"in n,null!=n.className&&(r.class=n.className),Object.defineProperty(r,"className",Ge)),e.$$typeof=Fe,Je&&Je(e)};var Ke=w.__r;w.__r=function(e){Ke&&Ke(e),Ve=e.__c};var Ze={ReactCurrentDispatcher:{current:{readContext:function(e){return Ve.__n[e.__c].props.value}}}};function Qe(e){return!!e&&e.$$typeof===Fe}"object"==("undefined"==typeof performance?"undefined":h(performance))&&"function"==typeof performance.now&&performance.now.bind(performance);var Xe={useState:pe,useReducer:he,useEffect:me,useLayoutEffect:_e,useRef:function(e){return oe=5,ge((function(){return{current:e}}),[])},useImperativeHandle:function(e,t,n){oe=6,_e((function(){"function"==typeof e?e(t()):e&&(e.current=t())}),null==n?n:n.concat(e))},useMemo:ge,useCallback:function(e,t){return oe=8,ge((function(){return e}),t)},useContext:function(e){var t=re.context[e.__c],n=fe(ne++,9);return n.__c=e,t?(null==n.__&&(n.__=!0,t.sub(re)),t.props.value):e.__},useDebugValue:function(e,t){w.useDebugValue&&w.useDebugValue(t?t(e):e)},version:"16.8.0",Children:je,render:Ue,hydrate:function(e,t,n){return ee(e,t),"function"==typeof n&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(X(null,e),!0)},createPortal:Re,createElement:O,createContext:function(e,t){var n={__c:t="__cC"+L++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,r;return this.getChildContext||(n=[],(r={})[t]=this,this.getChildContext=function(){return r},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some(I)},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Provider.__=n.Consumer.contextType=n},createFactory:function(e){return O.bind(null,e)},cloneElement:function(e){return Qe(e)?te.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:C,isValidElement:Qe,findDOMNode:function(e){return e&&(e.base||1===e.nodeType&&e)||null},Component:A,PureComponent:Se,memo:function(e,t){function n(e){var n=this.props.ref,r=n==e.ref;return!r&&n&&(n.call?n(null):n.current=null),t?!t(this.props,e)||!r:Le(this.props,e)}function r(t){return this.shouldComponentUpdate=n,O(e,t)}return r.displayName="Memo("+(e.displayName||e.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r},forwardRef:function(e){function t(t,n){var r=xe({},t);return delete r.ref,e(r,(n=t.ref||n)&&("object"!=h(n)||"current"in n)?n:null)}return t.$$typeof=Te,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:C,Suspense:Ee,SuspenseList:Ae,lazy:function(e){var t,n,r;function i(i){if(t||(t=e()).then((function(e){n=e.default||e}),(function(e){r=e})),r)throw r;if(!n)throw t;return O(n,i)}return i.displayName="Lazy",i.__f=!0,i},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Ze};function et(){return Xe.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},Xe.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}function tt(){return Xe.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},Xe.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var nt=["translations"];function rt(){return(rt=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,nt),o=r.buttonText,a=void 0===o?"Search":o,s=r.buttonAriaLabel,l=void 0===s?"Search":s,u=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return it(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?it(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(pe(null),2),c=u[0],d=u[1];return me((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?d("⌘"):d("Ctrl"))}),[]),Xe.createElement("button",rt({type:"button",className:"DocSearch DocSearch-Button","aria-label":l},i,{ref:t}),Xe.createElement("span",{className:"DocSearch-Button-Container"},Xe.createElement(tt,null),Xe.createElement("span",{className:"DocSearch-Button-Placeholder"},a)),Xe.createElement("span",{className:"DocSearch-Button-Keys"},null!==c&&Xe.createElement(Xe.Fragment,null,Xe.createElement("kbd",{className:"DocSearch-Button-Key"},"Ctrl"===c?Xe.createElement(et,null):c),Xe.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))}));function at(e){return e.reduce((function(e,t){return e.concat(t)}),[])}var st=0;function lt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}function ut(e,t){0}var ct=function(){},dt=[{segment:"autocomplete-core",version:"1.7.2"}];function ft(e){return function e(t,n){var r=n;return{then:function(n,i){return e(t.then(pt(n,r,t),pt(i,r,t)),r)},catch:function(n){return e(t.catch(pt(n,r,t)),r)},finally:function(n){return n&&r.onCancelList.push(n),e(t.finally(pt(n&&function(){return r.onCancelList=[],n()},r,t)),r)},cancel:function(){r.isCanceled=!0;var e=r.onCancelList;r.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===r.isCanceled}}}(e,{isCanceled:!1,onCancelList:[]})}function pt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function ht(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var i=(null===t?-1:t)+e;return i<=-1||i>=n?null===r?null:0:i}function mt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _t(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,i=0,o=0;!1===r;){var a=t.collections[i];if(a===n){r=!0;break}o+=a.items.length,i++}return t.activeItemId-o}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}var vt=/((gt|sm)-|galaxy nexus)|samsung[- ]/i;function yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function bt(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,Nt);Vt&&i.environment.clearTimeout(Vt);var u=l.setCollections,c=l.setIsOpen,d=l.setQuery,f=l.setActiveItemId,p=l.setStatus;if(d(o),f(i.defaultActiveItemId),!o&&!1===i.openOnFocus){var h,m=s.getState().collections.map((function(e){return Ut(Ut({},e),{},{items:[]})}));p("idle"),u(m),c(null!==(h=r.isOpen)&&void 0!==h?h:i.shouldPanelOpen({state:s.getState()}));var _=ft(Gt(m).then((function(){return Promise.resolve()})));return s.pendingRequests.add(_)}p("loading"),Vt=i.environment.setTimeout((function(){p("stalled")}),i.stallThreshold);var g=ft(Gt(i.getSources(Ut({query:o,refresh:a,state:s.getState()},l)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Ut({query:o,refresh:a,state:s.getState()},l))).then((function(t){return function(e,t){return n=e,Boolean(null==n?void 0:n.execute)?Ht(Ht({},e),{},{requests:e.queries.map((function(n){return{query:n,sourceId:t,transformResponse:e.transformResponse}}))}):{items:e,sourceId:t};var n}(t,e.sourceId)}))}))).then(Ft).then((function(t){return function(e,t){return t.map((function(t){var n=e.filter((function(e){return e.sourceId===t.sourceId})),r=n.map((function(e){return e.items})),i=n[0].transformResponse,o=i?i(function(e){var t=e.map((function(e){var t;return bt(bt({},e),{},{hits:null===(t=e.hits)||void 0===t?void 0:t.map((function(t){return bt(bt({},t),{},{__autocomplete_indexName:e.index,__autocomplete_queryID:e.queryID})}))})}));return{results:t,hits:t.map((function(e){return e.hits})).filter(Boolean),facetHits:t.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}}(r)):r;return ut(Array.isArray(o)),ut(o.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems")),{source:t,items:o}}))}(t,e)})).then((function(e){return function(e){var t=e.props,n=e.state,r=e.collections.reduce((function(e,t){return Et(Et({},e),{},Ct({},t.source.sourceId,Et(Et({},t.source),{},{getItems:function(){return at(t.items)}})))}),{});return at(t.reshape({sources:Object.values(r),sourcesBySourceId:r,state:n})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:i,state:s.getState()})}))})))).then((function(e){var n;p("idle"),u(e);var d=i.shouldPanelOpen({state:s.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:i.openOnFocus&&!o&&d||d);var f=gt(s.getState());if(null!==s.getState().activeItemId&&f){var h=f.item,m=f.itemInputValue,_=f.itemUrl,g=f.source;g.onActive(Ut({event:t,item:h,itemInputValue:m,itemUrl:_,refresh:a,source:g,state:s.getState()},l))}})).finally((function(){p("idle"),Vt&&i.environment.clearTimeout(Vt)}));return s.pendingRequests.add(g)}var Kt=["event","props","refresh","store"];function Zt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Qt(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function cn(e){var t=e.props,n=e.refresh,r=e.store,i=un(e,en);return{getEnvironmentProps:function(e){var n=e.inputElement,i=e.formElement,o=e.panelElement;function a(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[i,o].some((function(t){return(n=t)===(r=e.target)||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return sn({onTouchStart:a,onMouseDown:a,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},un(e,tn))},getRootProps:function(e){return sn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){return e.inputElement,sn({action:"",noValidate:!0,role:"search",onSubmit:function(o){var a;o.preventDefault(),t.onSubmit(sn({event:o,refresh:n,state:r.getState()},i)),r.dispatch("submit",null),null===(a=e.inputElement)||void 0===a||a.blur()},onReset:function(o){var a;o.preventDefault(),t.onReset(sn({event:o,refresh:n,state:r.getState()},i)),r.dispatch("reset",null),null===(a=e.inputElement)||void 0===a||a.focus()}},un(e,nn))},getLabelProps:function(e){return sn({htmlFor:"".concat(t.id,"-input"),id:"".concat(t.id,"-label")},e)},getInputProps:function(e){var o;function a(e){(t.openOnFocus||Boolean(r.getState().query))&&Jt(sn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},i)),r.dispatch("focus",null)}var s=e||{},l=(s.inputElement,s.maxLength),u=void 0===l?512:l,c=un(s,rn),d=gt(r.getState()),f=function(e){return Boolean(e&&e.match(vt))}((null===(o=t.environment.navigator)||void 0===o?void 0:o.userAgent)||""),p=null!=d&&d.itemUrl&&!f?"go":"search";return sn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:p,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Jt(sn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},i))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,i=e.store,o=function(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,Kt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var a=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(i.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},s=function(){var e=gt(i.getState());if(null!==i.getState().activeItemId&&e){var n=e.item,a=e.itemInputValue,s=e.itemUrl,l=e.source;l.onActive(Qt({event:t,item:n,itemInputValue:a,itemUrl:s,refresh:r,source:l,state:i.getState()},o))}};t.preventDefault(),!1===i.getState().isOpen&&(n.openOnFocus||Boolean(i.getState().query))?Jt(Qt({event:t,props:n,query:i.getState().query,refresh:r,store:i},o)).then((function(){i.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),s(),setTimeout(a,0)})):(i.dispatch(t.key,{}),s(),a())}else if("Escape"===t.key)t.preventDefault(),i.dispatch(t.key,null),i.pendingRequests.cancelAll();else if("Tab"===t.key)i.dispatch("blur",null),i.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===i.getState().activeItemId||i.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||i.pendingRequests.cancelAll());t.preventDefault();var l=gt(i.getState()),u=l.item,c=l.itemInputValue,d=l.itemUrl,f=l.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(f.onSelect(Qt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:i.getState()},o)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:i.getState()}));else if(t.shiftKey)void 0!==d&&(f.onSelect(Qt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:i.getState()},o)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:i.getState()}));else if(t.altKey);else{if(void 0!==d)return f.onSelect(Qt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:i.getState()},o)),void n.navigator.navigate({itemUrl:d,item:u,state:i.getState()});Jt(Qt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:i},o)).then((function(){f.onSelect(Qt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:f,state:i.getState()},o))}))}}}(sn({event:e,props:t,refresh:n,store:r},i))},onFocus:a,onBlur:ct,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||a(n)}},c)},getPanelProps:function(e){return sn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){return sn({role:"listbox","aria-labelledby":"".concat(t.id,"-label"),id:"".concat(t.id,"-list")},e)},getItemProps:function(e){var o=e.item,a=e.source,s=un(e,on);return sn({id:"".concat(t.id,"-item-").concat(o.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===o.__autocomplete_id,onMouseMove:function(e){if(o.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",o.__autocomplete_id);var t=gt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,s=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(sn({event:e,item:a,itemInputValue:s,itemUrl:l,refresh:n,source:u,state:r.getState()},i))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var s=a.getItemInputValue({item:o,state:r.getState()}),l=a.getItemUrl({item:o,state:r.getState()});(l?Promise.resolve():Jt(sn({event:e,nextState:{isOpen:!1},props:t,query:s,refresh:n,store:r},i))).then((function(){a.onSelect(sn({event:e,item:o,itemInputValue:s,itemUrl:l,refresh:n,source:a,state:r.getState()},i))}))}},s)}}}function dn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function fn(e){for(var t=1;t0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:"autocomplete-".concat(st++),plugins:i,initialState:Yt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),i.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),i.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),i.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(function(e){return function(e){if(Array.isArray(e))return Dt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Dt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Dt(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(i.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return ut(Array.isArray(e)),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(ut(e.sourceId),n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,Nn),i=n.noResultsText,o=void 0===i?"No results for":i,a=n.suggestedQueryText,s=void 0===a?"Try searching for":a,l=n.reportMissingResultsText,u=void 0===l?"Believe this query should return results?":l,c=n.reportMissingResultsLinkText,d=void 0===c?"Let us know.":c,f=r.state.context.searchSuggestions;return Xe.createElement("div",{className:"DocSearch-NoResults"},Xe.createElement("div",{className:"DocSearch-Screen-Icon"},Xe.createElement(Rn,null)),Xe.createElement("p",{className:"DocSearch-Title"},o,' "',Xe.createElement("strong",null,r.state.query),'"'),f&&f.length>0&&Xe.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},Xe.createElement("p",{className:"DocSearch-Help"},s,":"),Xe.createElement("ul",null,f.slice(0,3).reduce((function(e,t){return[].concat(function(e){return function(e){if(Array.isArray(e))return $n(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return $n(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$n(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(e),[Xe.createElement("li",{key:t},Xe.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){r.setQuery(t.toLowerCase()+" "),r.refresh(),r.inputRef.current.focus()}},t))])}),[]))),r.getMissingResultsUrl&&Xe.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),Xe.createElement("a",{href:r.getMissingResultsUrl({query:r.state.query}),target:"_blank",rel:"noopener noreferrer"},d)))}var zn=["hit","attribute","tagName"];function Bn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function qn(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,zn)),{},{dangerouslySetInnerHTML:{__html:Vn(t,"_snippetResult.".concat(n,".value"))||Vn(t,n)}}))}function Jn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Kn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Kn(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Kn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n|<\/mark>)/g,ir=RegExp(rr.source);function or(e){var t,n,r,i,o,a=e;if(!a.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var s=((a.__docsearch_parent?null===(t=a.__docsearch_parent)||void 0===t||null===(n=t._highlightResult)||void 0===n||null===(r=n.hierarchy)||void 0===r?void 0:r.lvl0:null===(i=e._highlightResult)||void 0===i||null===(o=i.hierarchy)||void 0===o?void 0:o.lvl0)||{}).value;return s&&ir.test(s)?s.replace(rr,""):s}function ar(){return(ar=Object.assign||function(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,lr),i=n.recentSearchesTitle,o=void 0===i?"Recent":i,a=n.noRecentSearchesText,s=void 0===a?"No recent searches":a,l=n.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,c=n.removeRecentSearchButtonTitle,d=void 0===c?"Remove this search from history":c,f=n.favoriteSearchesTitle,p=void 0===f?"Favorite":f,h=n.removeFavoriteSearchButtonTitle,m=void 0===h?"Remove this search from favorites":h;return"idle"===r.state.status&&!1===r.hasCollections?r.disableUserPersonalization?null:Xe.createElement("div",{className:"DocSearch-StartScreen"},Xe.createElement("p",{className:"DocSearch-Help"},s)):!1===r.hasCollections?null:Xe.createElement("div",{className:"DocSearch-Dropdown-Container"},Xe.createElement(Qn,ur({},r,{title:o,collection:r.state.collections[0],renderIcon:function(){return Xe.createElement("div",{className:"DocSearch-Hit-icon"},Xe.createElement(Yn,null))},renderAction:function(e){var t=e.item,n=e.runFavoriteTransition,i=e.runDeleteTransition;return Xe.createElement(Xe.Fragment,null,Xe.createElement("div",{className:"DocSearch-Hit-action"},Xe.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),n((function(){r.favoriteSearches.add(t),r.recentSearches.remove(t),r.refresh()}))}},Xe.createElement(Hn,null))),Xe.createElement("div",{className:"DocSearch-Hit-action"},Xe.createElement("button",{className:"DocSearch-Hit-action-button",title:d,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),i((function(){r.recentSearches.remove(t),r.refresh()}))}},Xe.createElement(jn,null))))}})),Xe.createElement(Qn,ur({},r,{title:p,collection:r.state.collections[1],renderIcon:function(){return Xe.createElement("div",{className:"DocSearch-Hit-icon"},Xe.createElement(Hn,null))},renderAction:function(e){var t=e.item,n=e.runDeleteTransition;return Xe.createElement("div",{className:"DocSearch-Hit-action"},Xe.createElement("button",{className:"DocSearch-Hit-action-button",title:m,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),n((function(){r.favoriteSearches.remove(t),r.refresh()}))}},Xe.createElement(jn,null)))}})))}var dr=["translations"];function fr(){return(fr=Object.assign||function(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,dr);if("error"===r.state.status)return Xe.createElement(Fn,{translations:null==n?void 0:n.errorScreen});var i=r.state.collections.some((function(e){return e.items.length>0}));return r.state.query?!1===i?Xe.createElement(Un,fr({},r,{translations:null==n?void 0:n.noResultsScreen})):Xe.createElement(sr,r):Xe.createElement(cr,fr({},r,{hasCollections:i,translations:null==n?void 0:n.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status})),hr=["translations"];function mr(){return(mr=Object.assign||function(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,hr),i=n.resetButtonTitle,o=void 0===i?"Clear the query":i,a=n.resetButtonAriaLabel,s=void 0===a?"Clear the query":a,l=n.cancelButtonText,u=void 0===l?"Cancel":l,c=n.cancelButtonAriaLabel,d=void 0===c?"Cancel":c,f=r.getFormProps({inputElement:r.inputRef.current}).onReset;return Xe.useEffect((function(){r.autoFocus&&r.inputRef.current&&r.inputRef.current.focus()}),[r.autoFocus,r.inputRef]),Xe.useEffect((function(){r.isFromSelection&&r.inputRef.current&&r.inputRef.current.select()}),[r.isFromSelection,r.inputRef]),Xe.createElement(Xe.Fragment,null,Xe.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:f},Xe.createElement("label",mr({className:"DocSearch-MagnifierLabel"},r.getLabelProps()),Xe.createElement(tt,null)),Xe.createElement("div",{className:"DocSearch-LoadingIndicator"},Xe.createElement(Tn,null)),Xe.createElement("input",mr({className:"DocSearch-Input",ref:r.inputRef},r.getInputProps({inputElement:r.inputRef.current,autoFocus:r.autoFocus,maxLength:64}))),Xe.createElement("button",{type:"reset",title:o,className:"DocSearch-Reset","aria-label":s,hidden:!r.state.query},Xe.createElement(jn,null))),Xe.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":d,onClick:r.onClose},u))}var gr=["_highlightResult","_snippetResult"];function vr(e){var t=e.key,n=e.limit,r=void 0===n?5:n,i=function(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(e){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}(t),o=i.getItem().slice(0,r);return{add:function(e){var t=e,n=(t._highlightResult,t._snippetResult,function(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(t,gr)),a=o.findIndex((function(e){return e.objectID===n.objectID}));a>-1&&o.splice(a,1),o.unshift(n),o=o.slice(0,r),i.setItem(o)},remove:function(e){o=o.filter((function(t){return t.objectID!==e.objectID})),i.setItem(o)},getAll:function(){return o}}}var yr=["facetName","facetQuery"];function br(e){var t,n="algoliasearch-client-js-".concat(e.key),r=function(){return void 0===t&&(t=e.localStorage||window.localStorage),t},i=function(){return JSON.parse(r().getItem(n)||"{}")};return{get:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var n=JSON.stringify(e),r=i()[n];return Promise.all([r||t(),void 0!==r])})).then((function(e){var t=g(e,2),r=t[0],i=t[1];return Promise.all([r,i||n.miss(r)])})).then((function(e){return g(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var o=i();return o[JSON.stringify(e)]=t,r().setItem(n,JSON.stringify(o)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=i();delete t[JSON.stringify(e)],r().setItem(n,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){r().removeItem(n)}))}}}function wr(e){var t=v(e.caches),n=t.shift();return void 0===n?{get:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,n.miss(e)])})).then((function(e){return g(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return n.get(e,r,i).catch((function(){return wr({caches:t}).get(e,r,i)}))},set:function(e,r){return n.set(e,r).catch((function(){return wr({caches:t}).set(e,r)}))},delete:function(e){return n.delete(e).catch((function(){return wr({caches:t}).delete(e)}))},clear:function(){return n.clear().catch((function(){return wr({caches:t}).clear()}))}}}function kr(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(n,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},o=JSON.stringify(n);if(o in t)return Promise.resolve(e.serializable?JSON.parse(t[o]):t[o]);var a=r(),s=i&&i.miss||function(){return Promise.resolve()};return a.then((function(e){return s(e)})).then((function(){return a}))},set:function(n,r){return t[JSON.stringify(n)]=e.serializable?JSON.stringify(r):r,Promise.resolve(r)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function Mr(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}return e}function xr(e,t){return t?(Object.keys(t).forEach((function(n){e[n]=t[n](e)})),e):e}function Lr(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r0?r:void 0,timeout:n.timeout||t,headers:n.headers||{},queryParameters:n.queryParameters||{},cacheable:n.cacheable}}var Yr={Read:1,Write:2,Any:3};function jr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return p(p({},e),{},{status:t,lastUpdate:Date.now()})}function Or(e){return"string"==typeof e?{protocol:"https",url:e,accept:Yr.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Yr.Any}}var Er="POST";function Cr(e,t,n,r){var i=[],o=function(e,t){if("GET"!==e.method&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:p(p({},e.data),t.data);return JSON.stringify(n)}}(n,r),a=function(e,t){var n=p(p({},e.headers),t.headers),r={};return Object.keys(n).forEach((function(e){var t=n[e];r[e.toLowerCase()]=t})),r}(e,r),s=n.method,l="GET"!==n.method?{}:p(p({},n.data),r.data),u=p(p(p({"x-algolia-agent":e.userAgent.value},e.queryParameters),l),r.queryParameters),c=0,d=function t(l,d){var f=l.pop();if(void 0===f)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Ir(i)};var p={data:o,headers:a,method:s,url:Pr(f,n.path,u),connectTimeout:d(c,e.timeouts.connect),responseTimeout:d(c,r.timeout)},h=function(e){var t={request:p,response:e,host:f,triesLeft:l.length};return i.push(t),t},m={onSucess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var r=h(n);return n.isTimedOut&&c++,Promise.all([e.logger.info("Retryable failure",Rr(r)),e.hostsCache.set(f,jr(f,n.isTimedOut?3:2))]).then((function(){return t(l,d)}))},onFail:function(e){throw h(e),function(e,t){var n=e.content,r=e.status,i=n;try{i=JSON.parse(n).message}catch(e){}return function(e,t,n){return{name:"ApiError",message:e,status:t,transporterStackTrace:n}}(i,r,t)}(e,Ir(i))}};return e.requester.send(p).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,n=e.status;return!t&&0==~~n}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSucess(e):t.onFail(e)}(e,m)}))};return function(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(jr(t))}))}))).then((function(e){var n=e.filter((function(e){return function(e){return 1===e.status||Date.now()-e.lastUpdate>12e4}(e)})),r=e.filter((function(e){return function(e){return 3===e.status&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(v(n),v(r));return{getTimeout:function(e,t){return(0===r.length&&0===e?1:r.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return Or(e)})):t}}))}(e.hostsCache,t).then((function(e){return d(v(e.statelessHosts).reverse(),e.getTimeout)}))}function Ar(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var n="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(n)&&(t.value="".concat(t.value).concat(n)),t}};return t}function Pr(e,t,n){var r=Hr(n),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return r.length&&(i+="?".concat(r)),i}function Hr(e){return Object.keys(e).map((function(t){return Lr("%s=%s",t,(n=e[t],"[object Object]"===Object.prototype.toString.call(n)||"[object Array]"===Object.prototype.toString.call(n)?JSON.stringify(e[t]):e[t]));var n})).join("&")}function Ir(e){return e.map((function(e){return Rr(e)}))}function Rr(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return p(p({},e),{},{request:p(p({},e.request),{},{headers:p(p({},e.request.headers),t)})})}var Fr=function(e){return function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r={transporter:e.transporter,appId:e.appId,indexName:t};return xr(r,n.methods)}},Nr=function(e){return function(t,n){var r=t.map((function(e){return p(p({},e),{},{params:Hr(e.params||{})})}));return e.transporter.read({method:Er,path:"1/indexes/*/queries",data:{requests:r},cacheable:!0},n)}},$r=function(e){return function(t,n){return Promise.all(t.map((function(t){var r=t.params,i=r.facetName,o=r.facetQuery,a=function(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(r,yr);return Fr(e)(t.indexName,{methods:{searchForFacetValues:Br}}).searchForFacetValues(i,o,p(p({},n),a))})))}},Ur=function(e){return function(t,n,r){return e.transporter.read({method:Er,path:Lr("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:n},cacheable:!0},r)}},zr=function(e){return function(t,n){return e.transporter.read({method:Er,path:Lr("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},n)}},Br=function(e){return function(t,n,r){return e.transporter.read({method:Er,path:Lr("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:n},cacheable:!0},r)}};function qr(e,t,n){var r={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var n=new XMLHttpRequest;n.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return n.setRequestHeader(t,e.headers[t])}));var r,i=function(e,r){return setTimeout((function(){n.abort(),t({status:0,content:r,isTimedOut:!0})}),1e3*e)},o=i(e.connectTimeout,"Connection timeout");n.onreadystatechange=function(){n.readyState>n.OPENED&&void 0===r&&(clearTimeout(o),r=i(e.responseTimeout,"Socket timeout"))},n.onerror=function(){0===n.status&&(clearTimeout(o),clearTimeout(r),t({content:n.responseText||"Network request failed",status:n.status,isTimedOut:!1}))},n.onload=function(){clearTimeout(o),clearTimeout(r),t({content:n.responseText,status:n.status,isTimedOut:!1})},n.send(e.data)}))}},logger:(3,{debug:function(e,t){return Promise.resolve()},info:function(e,t){return Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:kr(),requestsCache:kr({serializable:!1}),hostsCache:wr({caches:[br({key:"".concat("4.8.5","-").concat(e)}),kr()]}),userAgent:Ar("4.8.5").add({segment:"Browser",version:"lite"}),authMode:Sr};return function(e){var t=e.appId,n=function(e,t,n){var r={"x-algolia-api-key":n,"x-algolia-application-id":t};return{headers:function(){return e===Dr?r:{}},queryParameters:function(){return e===Sr?r:{}}}}(void 0!==e.authMode?e.authMode:Dr,t,e.apiKey),r=function(e){var t=e.hostsCache,n=e.logger,r=e.requester,i=e.requestsCache,o=e.responsesCache,a=e.timeouts,s=e.userAgent,l=e.hosts,u=e.queryParameters,c={hostsCache:t,logger:n,requester:r,requestsCache:i,responsesCache:o,timeouts:a,userAgent:s,headers:e.headers,queryParameters:u,hosts:l.map((function(e){return Or(e)})),read:function(e,t){var n=Tr(t,c.timeouts.read),r=function(){return Cr(c,c.hosts.filter((function(e){return 0!=(e.accept&Yr.Read)})),e,n)};if(!0!==(void 0!==n.cacheable?n.cacheable:e.cacheable))return r();var i={request:e,mappedRequestOptions:n,transporter:{queryParameters:c.queryParameters,headers:c.headers}};return c.responsesCache.get(i,(function(){return c.requestsCache.get(i,(function(){return c.requestsCache.set(i,r()).then((function(e){return Promise.all([c.requestsCache.delete(i),e])}),(function(e){return Promise.all([c.requestsCache.delete(i),Promise.reject(e)])})).then((function(e){var t=g(e,2);return t[0],t[1]}))}))}),{miss:function(e){return c.responsesCache.set(i,e)}})},write:function(e,t){return Cr(c,c.hosts.filter((function(e){return 0!=(e.accept&Yr.Write)})),e,Tr(t,c.timeouts.write))}};return c}(p(p({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:Yr.Read},{url:"".concat(t,".algolia.net"),accept:Yr.Write}].concat(Mr([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:p(p(p({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:p(p({},n.queryParameters()),e.queryParameters)}));return xr({transporter:r,appId:t,addAlgoliaAgent:function(e,t){r.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([r.requestsCache.clear(),r.responsesCache.clear()]).then((function(){}))}},e.methods)}(p(p(p({},r),n),{},{methods:{search:Nr,searchForFacetValues:$r,multipleQueries:Nr,multipleSearchForFacetValues:$r,initIndex:function(e){return function(t){return Fr(e)(t,{methods:{search:zr,searchForFacetValues:Br,findAnswers:Ur}})}}}}))}qr.version="4.8.5";var Wr=["footer","searchBox"];function Vr(){return(Vr=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(L,Wr),j=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Zr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Zr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(Xe.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),O=j[0],E=j[1],C=Xe.useRef(null),A=Xe.useRef(null),P=Xe.useRef(null),H=Xe.useRef(null),I=Xe.useRef(null),R=Xe.useRef(10),F=Xe.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,64):"").current,N=Xe.useRef(M||F).current,$=function(e,t,n){return Xe.useMemo((function(){var r=qr(e,t);return r.addAlgoliaAgent("docsearch","3.3.0"),!1===/docsearch.js \(.*\)/.test(r.transporter.userAgent.value)&&r.addAlgoliaAgent("docsearch-react","3.3.0"),n(r)}),[e,t,n])}(t,n,y),U=Xe.useRef(vr({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(r),limit:10})).current,z=Xe.useRef(vr({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(r),limit:0===U.getAll().length?7:4})).current,B=Xe.useCallback((function(e){if(!w){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===U.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&z.add(t)}}),[U,z,w]),q=Xe.useMemo((function(){return Mn({id:"docsearch",defaultActiveItemId:0,placeholder:o,openOnFocus:!0,initialState:{query:N,context:{searchSuggestions:[]}},navigator:m,onStateChange:function(e){E(e.state)},getSources:function(e){var t=e.query,n=e.state,i=e.setContext,o=e.setStatus;return t?$.search([{query:t,indexName:r,params:Jr({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(R.current),"hierarchy.lvl2:".concat(R.current),"hierarchy.lvl3:".concat(R.current),"hierarchy.lvl4:".concat(R.current),"hierarchy.lvl5:".concat(R.current),"hierarchy.lvl6:".concat(R.current),"content:".concat(R.current)],snippetEllipsisText:"…",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20},a)}]).catch((function(e){throw"RetryError"===e.name&&o("error"),e})).then((function(e){var t=e.results[0],r=t.hits,o=t.nbHits,a=er(r,(function(e){return or(e)}));return n.context.searchSuggestions.length0&&(G(),I.current&&I.current.focus())}),[N,G]),Xe.useEffect((function(){function e(){if(A.current){var e=.01*window.innerHeight;A.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),Xe.createElement("div",Vr({ref:C},V({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===O.status&&"DocSearch-Container--Stalled","error"===O.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&l()}}),Xe.createElement("div",{className:"DocSearch-Modal",ref:A},Xe.createElement("header",{className:"DocSearch-SearchBar",ref:P},Xe.createElement(_r,Vr({},q,{state:O,autoFocus:0===N.length,inputRef:I,isFromSelection:Boolean(N)&&N===F,translations:T,onClose:l}))),Xe.createElement("div",{className:"DocSearch-Dropdown",ref:H},Xe.createElement(pr,Vr({},q,{indexName:r,state:O,hitComponent:f,resultsFooterComponent:h,disableUserPersonalization:w,recentSearches:z,favoriteSearches:U,inputRef:I,translations:Y,getMissingResultsUrl:S,onItemClick:function(e){B(e),l()}}))),Xe.createElement("footer",{className:"DocSearch-Footer"},Xe.createElement(Sn,{translations:D}))))}function Xr(){return(Xr=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:window;return"string"==typeof e?t.document.querySelector(e):e}(e.container,e.environment))};n(549);var ii={name:"AlgoliaSearchBox",props:["options"],watch:{$lang:function(e){this.update(this.options,e)},options:function(e){this.update(e,this.$lang)}},mounted:function(){this.initialize(this.options,this.$lang)},methods:{getRelativePath:function(e){var t=new URL(e),n=t.pathname,r=t.hash;return n.replace(this.$site.base,"/")+r},initialize:function(e,t){var n=this,r=this.$router;ri(Object(d.a)(Object(d.a)({placeholder:this.$site.themeConfig.searchPlaceholder},e),{},{container:"#docsearch",searchParameters:Object.assign({},t&&{facetFilters:["lang:".concat(t)].concat(e.facetFilters||[])},e.searchParameters),navigator:{navigate:function(e){var t=e.suggestionUrl,n=new URL(window.location.origin+t).pathname;r.history.current.path===n?window.location.assign(window.location.origin+t):r.push(t)}},transformItems:function(e){return e.map((function(e){return Object.assign({},e,{url:n.getRelativePath(e.url)})}))},hitComponent:function(e){var t=e.hit,n=e.children;return{type:"a",ref:void 0,constructor:void 0,key:void 0,props:{href:t.url,onClick:function(e){(function(e){return 1===e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey})(e)||(e.preventDefault(),r.push(t.url))},children:n},__v:null}}}))},update:function(e,t){this.$el.innerHTML='
',this.initialize(e,t)}}},oi=(n(550),Object(o.a)(ii,(function(){var e=this.$createElement;return(this._self._c||e)("div",{attrs:{id:"docsearch"}})}),[],!1,null,null,null).exports),ai=n(6),si=(n(28),n(551),n(86),n(228),n(42),n(93),n(11)),li=n(229),ui=n(16);n(51);function ci(e){var t=e.$themeLocaleConfig,n=e.$site;return t.nav||n.themeConfig.nav||[]}function di(e){return Object.assign(e,{type:e.items&&e.items.length?"links":"link"})}function fi(e){var t=this,n=e.$site,r=e.$router,i=e.$localeConfig,o=e.$themeLocaleConfig,a=n.locales;if(a&&Object.keys(a).length>1){var s=this.$page.path,l=r.options.routes,u=n.themeConfig.locales||{},c={text:o.selectText||"Languages",items:Object.keys(a).map((function(e){var n,r=a[e],o=u[e]&&u[e].label||r.lang;return r.lang===t.$lang?n=s:(n=s.replace(i.path,e),l.some((function(e){return e.path===n}))||(n=e)),{text:o,link:n}}))};return[].concat(Object(ui.a)(ci({$site:n,$themeLocaleConfig:o})),[c])}return ci({$site:n,$themeLocaleConfig:o})}function pi(e){return(fi(e)||[]).map((function(e){return Object.assign(di(e),{items:(e.items||[]).map(di)})}))}function hi(e,t){return e.ownerDocument.defaultView.getComputedStyle(e,null)[t]}function mi(){return(window.pageYOffset||document.documentElement.scrollTop)-(document.documentElement.clientTop||0)}n(231),n(113),n(91);function _i(e,t){var n,r;return function(){for(var i=arguments.length,o=new Array(i),a=0;a=t&&(e.apply(s,o),r=Date.now())}),t-(Date.now()-r))):(e.apply(s,o),r=Date.now())}}n(230);var gi={AMBER:"amber",ARDOISE:"ardoise",BLUE:"blue",DEEP_BLUE:"deepBlue",GOLD:"gold",GRAY:"gray",GRENADINE:"grenadine",KIWI:"kiwi",LILAS:"lilas",MAHOGANY:"mahogany",OCHER:"ocher",PINE:"pine",PLATINUM:"platinum",PRUNE:"prune",SAND:"sand",SAND_PEARL:"sandPearl",SILVER:"silver",SKY_BLUE:"skyBlue",SOUTH_SEA:"southSea",TURQUOISE:"turquoise",WATER_GREEN:"waterGreen",CODE:"code",WHITE_BUTTON:"white-button"},vi={BLACK:"black",DEEP_RED:"deepRed",EMERALD:"emerald",ORANGE:"orange",RED:"red",YELLOW:"yellow",WHITE:"white"},yi={GRAY_LIGHTER:"gray-lighter",GRAY_LIGHT:"gray-light",GRAY_MEDIUM:"gray-medium",GRAY_DARK:"gray-dark",GRAY_DARKER:"gray-darker"},bi={BOOKING:"booking",DANGER:"danger",INFO:"info",SUCCESS:"success",WARNING:"warning"},wi=Object(d.a)(Object(d.a)(Object(d.a)(Object(d.a)({},gi),vi),yi),bi),ki=Object.values(gi),Mi=Object.values(vi),xi=Object.values(yi),Li=Object.values(bi),Si=[].concat(Object(ui.a)(ki),Object(ui.a)(Mi),Object(ui.a)(xi),Object(ui.a)(Li));function Di(e,t,n,r){var i=n.pages,o=n.themeConfig,a=(r&&o.locales&&o.locales[r]||o).otherTopics||o.otherTopics;if(a){var s=Object(si.m)(t,a),l=s.base,u=s.config;return u?u.map((function(e){return Object(si.o)(i,e,l)})):[]}return[]}function Ti(e,t){for(var n=0;n-1))}));return e[t]=Object(d.a)(Object(d.a)({},r[t]),{},{symbols:i}),e}),{}):{}},getApiRedirectUrl:function(){var e;return(null===(e=this.$themeConfig)||void 0===e?void 0:e.apiRedirectUrl)||""},filterSymbols:function(e){var t,n=this;return null!==(t=this.$themeConfig)&&void 0!==t&&t.$$findSymbols?this.$themeConfig.$$findSymbols(e).map((function(e){return Object(d.a)(Object(d.a)({},e),{},{link:n.getApiLink(e)})})):[]},getApiLink:function(e){return e.path?"".concat(this.getApiRedirectUrl()).concat(e.path.replace(/\/\//gi,"/"),".html"):""}}},Ci={name:"ApiSymbol",mixins:[Ei],props:{item:{type:Object,default:function(){return{status:[]}}},theme:{type:String,default:"bubble"}},computed:{name:function(){return this.item.symbolName},type:function(){return this.item.symbolType},link:function(){return this.getApiLink(this.item)},deprecated:function(){var e;return null===(e=this.item.status)||void 0===e?void 0:e.find((function(e){return"deprecated"===e.key||"deprecated"===e}))}}},Ai=(n(591),Object(o.a)(Ci,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("a",{class:"reset-link symbol-container -"+e.theme+" "+(e.deprecated?"opacity-50":""),attrs:{href:e.link,title:e.name}},[n("span",[n("span",{class:"symbol "+e.type})]),e._v(" "),n("span",{class:"overflow-hidden truncate "+(e.deprecated?"line-through":"")},[e._v("\n "+e._s(e.name)+"\n ")])])}),[],!1,null,null,null).exports),Pi={name:"ApiList",mixins:[Ei],components:{ApiSymbol:Ai},props:{items:{type:Array,default:void 0},query:{type:String,default:void 0}},data:function(){return{loaded:!1}},computed:{symbols:function(){if(this.items)return this.items;var e=this.query;return this.filterSymbols(e)}},mounted:function(){var e=this;return Object(ai.a)(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.loadApi();case 2:e.loaded=t.sent;case 3:case"end":return t.stop()}}),t)})))()}},Hi=Object(o.a)(Pi,(function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"bg-gray-lighter pb-4 p-5 mb-10 rounded-small"},[t("div",{staticClass:"-mx-2"},[this.loaded?t("ul",{staticClass:"reset-list flex flex-wrap"},this._l(this.symbols,(function(e){return t("li",{staticClass:"w-full sm:w-1/3 lg:w-1/4 mb-2 px-2"},[t("ApiSymbol",{staticClass:"w-full px-2 py-1",attrs:{theme:"list",item:e}})],1)})),0):t("span",{staticClass:"w-full sm:w-1/3 lg:w-1/4 mb-2 px-2"},[this._v("\n Loading in progress...\n ")])])])}),[],!1,null,null,null).exports,Ii={name:"ApiSymbolQuery",mixins:[Ei],components:{ApiSymbol:Ai},props:{query:{type:String,default:""},placeholder:{type:String,default:""}},data:function(){return{loaded:!1}},computed:{item:function(){return this.filterSymbols(this.query)}},mounted:function(){var e=this;return Object(ai.a)(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.loadApi();case 2:e.loaded=t.sent;case 3:case"end":return t.stop()}}),t)})))()}},Ri=Object(o.a)(Ii,(function(){var e=this.$createElement;return(this._self._c||e)("ApiSymbol",{attrs:{item:this.loaded&&this.item.length?this.item[0]:{symbolName:this.placeholder}}})}),[],!1,null,null,null).exports,Fi=(n(43),n(115),{name:"ApiSymbolName",components:{ApiSymbolQuery:Ri},props:{name:{type:String,default:void 0}},computed:{placeholder:function(){return this.name||this.$slots.default[0].text.trim()},query:function(){return'symbolName === "'.concat(this.name||this.$slots.default[0].text.trim(),'"')}}}),Ni=Object(o.a)(Fi,(function(){var e=this.$createElement;return(this._self._c||e)("ApiSymbolQuery",{attrs:{query:this.query,placeholder:this.placeholder}})}),[],!1,null,null,null).exports,$i={name:"Banner",props:{src:{type:String},href:{type:String},height:{type:[Number,String]},bgColor:{type:String,default:""},padding:{type:Number,default:5}}},Ui=Object(o.a)($i,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"flex justify-center items-center"},[n("a",{class:"block m-auto p-"+e.padding+" rounded-full bg-"+e.bgColor,style:{width:e.height+"px",height:e.height+"px"},attrs:{href:e.href}},[n("div",{staticClass:"h-full w-full bg-contain bg-no-repeat bg-center",style:{backgroundImage:"url("+e.src+")"}}),e._v(" "),n("img",{staticClass:"hidden",attrs:{src:e.src,height:e.height}})])])}),[],!1,null,null,null).exports,zi=(n(593),n(596),Object(o.a)({},(function(e,t){var n=t._c;return n("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[n("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),t._v(" "),n("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])}),[],!0,null,null,null).exports),Bi={name:"Link",props:{href:{type:String,required:!0},title:{type:String,required:!1},icon:{type:String,required:!1},outbound:{type:Boolean,default:!0}},components:{OutboundLink:zi},computed:{link:function(){return Object(si.b)(this.href)},exact:function(){var e=this;return this.$site.locales?Object.keys(this.$site.locales).some((function(t){return t===e.link})):"/"===this.link}},methods:{isExternal:function(e){return Object(si.h)(e)},isMailto:function(e){return Object(si.i)(e)},isTel:function(e){return Object(si.j)(e)}}},qi=Object(o.a)(Bi,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.isExternal(e.link)?n("a",{staticClass:"link external",attrs:{href:e.link,title:e.title,target:e.isMailto(e.link)||e.isTel(e.link)?null:"_blank",rel:e.isMailto(e.link)||e.isTel(e.link)?null:"noopener noreferrer"}},[e._t("default"),e._v(" "),e.outbound?n("OutboundLink"):e._e()],2):n("router-link",{staticClass:"link internal",attrs:{to:e.link,title:e.title,exact:e.exact}},[e.icon?n("i",{class:e.icon}):e._e(),e._v(" "),e._t("default")],2)}),[],!1,null,null,null).exports,Wi={name:"Button",props:{component:{type:[Object,String],default:function(){return qi}},disabled:{type:Boolean,default:!1},color:{type:String,default:"white-button"},bgColor:{type:String,default:"blue"},borderColor:{type:String,default:"blue"},hover:{type:String,default:"active"},fontWeight:{type:String,default:"bold"},paddingX:{type:[Number,String],default:4},paddingY:{type:[Number,String],default:1},rounded:{type:String,default:"small"},shadow:{type:String,default:"none"},href:{type:String,default:""},title:{type:String,default:""}},components:{Link:qi},computed:{classes:function(){var e=this.borderColor,t=this.bgColor,n=this.color,r=this.disabled,i=this.rounded,o=this.shadow,a=this.hover,s=void 0===a?"active":a;return r&&(t="gray-light",e="gray-light"),e||(e=t),"reset-link inline-flex flex-col items-stretch overflow-hidden text-base transition-colors\n bg-".concat(t," border-").concat(e," text-").concat(n," focus:bg-").concat(t,"-active focus:border-").concat(e,"-").concat(s,"\n hover:bg-").concat(t,"-").concat(s," hover:border-").concat(e,"-").concat(s," focus:text-").concat(n,"-").concat(s," hover:text-").concat(n,"-").concat(s,"\n cursor-pointer border-1 border-solid rounded-").concat(i," shadow-").concat(o)}},methods:{onClick:function(e){this.$emit("click",e)}}},Vi=Object(o.a)(Wi,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(e.component,{tag:"component",class:e.classes,attrs:{disabled:e.disabled,outbound:!1,href:e.href,title:e.title},on:{click:e.onClick}},[n("span",{class:"flex justify-center items-center w-full font-"+e.fontWeight+" px-"+e.paddingX+" py-"+e.paddingY},[n("span",{staticClass:"m-1 text-center flex justify-center items-center"},[e._t("default")],2)])])}),[],!1,null,null,null).exports,Gi=(n(36),n(60),n(35),n(54),n(55),{inserted:function(e){function t(){var t=e.querySelector("img");if(t)t.addEventListener("load",(function(){setTimeout((function(){t.classList.remove("opacity-0")}),100)})),t.addEventListener("error",(function(){return console.log("error")})),t.src=t.dataset.url;else{var n=e.querySelector("iframe");n&&(n.src=n.dataset.url)}}function n(n,r){n.forEach((function(n){n.isIntersecting&&(t(),r.unobserve(e))}))}window.IntersectionObserver?new IntersectionObserver(n,{root:null,threshold:"0"}).observe(e):t()}}),Ji={name:"ButtonBadge",components:{Link:qi},directives:{lazyload:Gi},props:{href:{type:String},src:{type:String},title:{type:String,required:!0},showTitle:{type:Boolean,default:!0},width:{type:[String,Number],default:60},bgColor:{type:String,default:"gray-lighter"},color:{type:String,default:"blue"},blur:{type:[String,Number]},textSize:{type:String,default:"xxs"},shadow:{type:String},padding:{type:[String,Number]},fontWeight:{type:String}},filters:{initial:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.split(" ").map((function(e){return e.slice(0,1)})).join("")},overflow:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.slice(0,12)+(e.length>12?"...":"")}}},Ki=Object(o.a)(Ji,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Link",{class:"reset-link transition-all duration-500 ease-in-out relative no-underline hover:scale-110 text-"+e.textSize+" text-"+e.color+" hover:text-"+e.color+"-active",attrs:{href:e.href,outbound:!1,title:e.title}},[n("figure",{directives:[{name:"lazyload",rawName:"v-lazyload"}],class:"flex items-center justify-center relative z-2 overflow-hidden rounded-medium mb-2 bg-"+e.bgColor+" shadow-"+e.shadow+" p-"+e.padding,style:{width:e.width+"px",height:e.width+"px"}},[e.src?n("img",{staticClass:"w-full opacity-0 transition-all no-shadow",attrs:{"data-url":e.src}}):n("span",{staticClass:"flex items-center justify-center font-bold uppercase text-2xl h-full"},[e._v(e._s(e._f("initial")(e.title)))])]),e._v(" "),e.blur>0&&e.src?n("span",{directives:[{name:"lazyload",rawName:"v-lazyload"}],class:"overflow-hidden z-1 rounded-medium absolute left-0 opacity-50 filter-blur-"+e.blur,style:{width:e.width+"px",top:"5px",height:e.width+"px"}},[e.src?n("img",{staticClass:"w-full opacity-0 transition-all",attrs:{"data-url":e.src,alt:e._f("initial")(e.title)}}):e._e()]):e._e(),e._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:e.showTitle,expression:"showTitle"}],staticClass:"flex items-center justify-center whitespace-pre",class:"font-"+e.fontWeight,style:{width:e.width+"px"}},[e._v(e._s(e._f("overflow")(e.title)))])])}),[],!1,null,null,null).exports,Zi={name:"ButtonBadges",components:{ButtonBadge:Ki},props:{items:{type:Array,default:function(){return[]}},showTitle:{type:Boolean,default:!0},width:{type:[String,Number],default:60},bgColor:{type:String,default:"gray-lighter"},color:{type:String,default:"blue"},blur:{type:[String,Number]},textSize:{type:String,default:"xxs"},shadow:{type:String},padding:{type:[String,Number],default:5},innerPadding:{type:[String,Number]},fontWeight:{type:String},liClass:{type:String,default:""}}},Qi=Object(o.a)(Zi,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:"-m-"+e.padding+" mb-5"},[n("ul",{staticClass:"reset-list flex flex-wrap items-center"},e._l(e.items,(function(t){return n("li",{key:t.title,class:"p-"+e.padding+" "+e.liClass},[n("ButtonBadge",{staticClass:"flex flex-col",attrs:{"show-title":e.showTitle,title:t.title,src:t.src,href:t.href,bgColor:e.bgColor,color:e.color,"text-size":e.textSize,blur:e.blur,width:e.width,shadow:e.shadow,"font-weight":e.fontWeight,padding:e.innerPadding}})],1)})),0)])}),[],!1,null,null,null).exports,Xi={name:"Contributors",components:{ButtonBadges:Qi},props:{contributors:{type:Array,default:function(){return[]}},showTitle:{type:Boolean,default:!1},width:{type:[String,Number],default:60},bgColor:{type:String,default:"gray-lighter"},color:{type:String,default:"blue"},blur:{type:[String,Number]},textSize:{type:String,default:"xxs"},shadow:{type:String},padding:{type:[String,Number]},innerPadding:{type:[String,Number]},fontWeight:{type:String}},computed:{items:function(){return this.contributors.map((function(e){return Object(d.a)(Object(d.a)({},e),{},{title:e.login})}))}}},eo=Object(o.a)(Xi,(function(){var e=this,t=e.$createElement;return(e._self._c||t)("ButtonBadges",{attrs:{items:e.items,"show-title":e.showTitle,"font-weight":e.fontWeight,shadow:e.shadow,padding:e.padding,"inner-padding":e.innerPadding,bgColor:e.bgColor,color:e.color,"text-size":e.textSize,blur:e.blur,width:e.width}})}),[],!1,null,null,null).exports,to={name:"Feature",components:{BxIcon:c},props:{title:{type:String},icon:{type:String},description:{type:String}}},no=Object(o.a)(to,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"text-center flex flex-col p-3"},[n("div",{staticClass:"p-2 text-api-default mb-3"},[e.icon?n("BxIcon",{staticClass:"text-7xl",attrs:{name:e.icon}}):e._e()],1),e._v(" "),n("h3",{staticClass:"text-md font-bold text-blue mb-2"},[e._v(e._s(e.title))]),e._v(" "),n("div",{staticClass:"m-auto",staticStyle:{"max-width":"250px"}},[e.description?void 0:e._e(),e._v(" "),e._t("default")],2)])}),[],!1,null,null,null).exports,ro={name:"GithubStars",components:{BxIcon:c,Button:Vi},props:{borderColor:{type:String,default:"gray-darker"},color:{type:String,default:"white"}},data:function(){return{url:"",stargazersCount:0}},mounted:function(){var e=this;return Object(ai.a)(regeneratorRuntime.mark((function t(){var n,r,i,o,a,s,l,u;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.$site.themeConfig,r=n.repo,i=n.githubProxyUrl,o=n.docsRepo,a=void 0===o?r:o,t.next=3,Qu(i||a);case 3:s=t.sent,l=s.stargazers_count,u=s.html_url,e.url=u,e.stargazersCount=l;case 8:case"end":return t.stop()}}),t)})))()}},io=Object(o.a)(ro,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"relative inline-flex w-auto"},[n("ClientOnly",[n("Button",{staticClass:"border-2 relative flex items-center justify-center",attrs:{href:e.url,component:"a",title:"Github",border:"",color:e.borderColor,"border-color":e.borderColor,"bg-color":"transparent","padding-x":"1","padding-y":"1",rounded:"medium"}},[n("BxIcon",{staticClass:"text-lg",attrs:{name:"bxl-github"}})],1)],1),e._v(" "),n("span",{staticClass:"text-xs py-1 px-2 absolute right-0 rounded-medium rounded-bl-small",class:["bg-"+e.borderColor+" text-"+e.color],style:{top:"-12px",right:"-28px"}},[e._v(e._s(e.stargazersCount))])],1)}),[],!1,null,null,null).exports,oo={name:"WordsSlider",props:{height:{type:String,default:"span"}},data:function(){return{words:[],translateValue:0}},created:function(){this.words=this.getContent()},beforeUpdate:function(){this.words=this.getContent(),this.run()},mounted:function(){this.$el.style.width="".concat(this.$refs.container.getBoundingClientRect().width,"px"),this.run()},destroyed:function(){clearInterval(this.timer)},methods:{run:function(){var e=this,t=100/(this.words.length+1),n=0;this.timer&&clearInterval(this.timer),this.timer=setInterval((function(){var r=e.$refs.container;r.classList.contains("transition-all")||r.classList.add("transition-all"),n=(n+t)%100,r.style.transform="translateY(-".concat(n,"%)"),(n+t)%100==0&&setTimeout((function(){r.classList.remove("transition-all"),n+=t,setTimeout((function(){r.style.transform="translateY(0%)"}))}),600)}),2e3)},getContent:function(){return this.$slots.default?this.$slots.default.map((function(e){return e.text&&e.text.trim()})).join(" ").split(",").map((function(e){return e.trim()})).filter(Boolean):[]}}},ao=(n(597),Object(o.a)(oo,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"overflow-hidden align-top relative inline-block"},[e._v("\n  \n "),n("span",{ref:"container",staticClass:"absolute top-0 block animation-words-slider"},[e._l(e.words,(function(t){return n("span",{key:t,staticClass:"block text-left whitespace-no-wrap"},[e._v(e._s(t))])})),e._v(" "),n("span",{staticClass:"block text-left whitespace-no-wrap"},[e._v(e._s(e.words[0]))])],2)])}),[],!1,null,null,null).exports),so=(n(244),[{type:"github",title:"Github",icon:"bxl-github"},{type:"gitter",title:"Gitter",icon:"bx-message-rounded-dots"},{type:"slack",title:"Slack",icon:"bxl-slack"},{type:"discord",title:"Discord",icon:"bxl-discord"},{type:"microsoftTeams",title:"Microsoft Teams",icon:"bxl-microsoft-teams"},{type:"twitter",title:"Twitter",icon:"bxl-twitter"},{type:"stackoverflow",title:"StackOverflow",icon:"bxl-stack-overflow"},{type:"sponsor",title:"Support us",icon:"bxs-heart",showTitle:!0}]),lo={name:"NavbarLink",props:{href:{type:String,required:!0},title:{type:String,required:!1},icon:{type:String,required:!1}},methods:{isExternal:function(e){return Object(si.h)(e)},isMailto:function(e){return Object(si.i)(e)},isTel:function(e){return Object(si.j)(e)}}},uo=Object(o.a)(lo,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("a",{staticClass:"p-1 hover:text-blue-active transition-all duration-500 ease-in-out flex",attrs:{title:e.title,href:e.href,target:e.isMailto(e.href)||e.isTel(e.href)?null:"_blank",rel:e.isMailto(e.href)||e.isTel(e.href)?null:"noopener noreferrer"}},[n("i",{class:"bx "+e.icon}),e._v(" "),e._t("default")],2)}),[],!1,null,null,null).exports,co={name:"DropdownTransition",methods:{setHeight:function(e){e.style.height=e.scrollHeight+"px"},unsetHeight:function(e){e.style.height=""}}},fo=Object(o.a)(co,(function(){var e=this.$createElement;return(this._self._c||e)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null).exports,po={name:"InputText",props:["value","bgColor"],computed:{inputListeners:function(){var e=this;return Object.assign({},this.$listeners,{input:function(t){e.$emit("input",t.target.value)}})},classes:function(){var e=this.bgColor,t=void 0===e?"gray-lighter":e;return["bg-".concat(t),"border-".concat(t),"focus-within:text-blue","focus-within:border-blue"]}}},ho=Object(o.a)(po,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"inline-flex items-center border-2 py-1 px-3 rounded-small text-gray-darker transition-all",class:e.classes},[e._t("input-left"),e._v(" "),n("div",{staticClass:"flex flex-1 px-1 relative items-center"},[n("input",e._g(e._b({staticClass:"reset-input text-current w-full",domProps:{value:e.value}},"input",e.$attrs,!1),e.inputListeners))]),e._v(" "),e._t("input-right")],2)}),[],!1,null,null,null).exports,mo={name:"SearchBox",components:{BxIcon:c,DropdownTransition:fo,InputText:ho},data:function(){return{query:"",focused:!1,focusIndex:0}},computed:{showSuggestions:function(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions:function(){var e=this.query.trim().toLowerCase();if(e){for(var t=this.$site,n=t.pages,r=t.themeConfig.searchMaxSuggestions||5,i=this.$localePath,o=function(t){return t.title&&t.title.toLowerCase().indexOf(e)>-1},a=[],s=0;s=r);s++){var l=n[s];if(this.getPageLocalePath(l)===i)if(o(l))a.push(l);else if(l.headers)for(var u=0;u=r);u++){var c=l.headers[u];o(c)&&a.push(Object.assign({},l,{path:l.path+"#"+c.slug,header:c}))}}return a}}},mounted:function(){document.addEventListener("click",this.onClickOutside),document.addEventListener("focus",this.onClickOutside)},destroyed:function(){document.removeEventListener("click",this.onClickOutside),document.removeEventListener("focus",this.onClickOutside)},methods:{onClickOutside:function(){this.unfocus()},getPageLocalePath:function(e){for(var t in this.$site.locales||{})if("/"!==t&&0===e.path.indexOf(t))return t;return"/"},onUp:function(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown:function(){this.showSuggestions&&(this.focusIndex